(root)/
libxml2-2.12.3/
trio.h
       1  /*************************************************************************
       2   *
       3   * $Id$
       4   *
       5   * Copyright (C) 1998 Bjorn Reese and Daniel Stenberg.
       6   *
       7   * Permission to use, copy, modify, and distribute this software for any
       8   * purpose with or without fee is hereby granted, provided that the above
       9   * copyright notice and this permission notice appear in all copies.
      10   *
      11   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
      12   * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
      13   * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
      14   * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
      15   *
      16   *************************************************************************
      17   *
      18   * http://ctrio.sourceforge.net/
      19   *
      20   ************************************************************************/
      21  
      22  #ifndef TRIO_TRIO_H
      23  #define TRIO_TRIO_H
      24  
      25  #if !defined(WITHOUT_TRIO)
      26  
      27  /*
      28   * Use autoconf defines if present. Packages using trio must define
      29   * HAVE_CONFIG_H as a compiler option themselves.
      30   */
      31  #if defined(TRIO_HAVE_CONFIG_H)
      32  # include "config.h"
      33  #endif
      34  
      35  #include "triodef.h"
      36  
      37  #include <stdio.h>
      38  #include <stdlib.h>
      39  #if defined(TRIO_COMPILER_ANCIENT)
      40  # include <varargs.h>
      41  #else
      42  # include <stdarg.h>
      43  #endif
      44  
      45  #ifdef __cplusplus
      46  extern "C" {
      47  #endif
      48  
      49  /*
      50   * Error codes.
      51   *
      52   * Remember to add a textual description to trio_strerror.
      53   */
      54  enum {
      55    TRIO_EOF      = 1,
      56    TRIO_EINVAL   = 2,
      57    TRIO_ETOOMANY = 3,
      58    TRIO_EDBLREF  = 4,
      59    TRIO_EGAP     = 5,
      60    TRIO_ENOMEM   = 6,
      61    TRIO_ERANGE   = 7,
      62    TRIO_ERRNO    = 8,
      63    TRIO_ECUSTOM  = 9
      64  };
      65  
      66  /* Error macros */
      67  #define TRIO_ERROR_CODE(x) ((-(x)) & 0x00FF)
      68  #define TRIO_ERROR_POSITION(x) ((-(x)) >> 8)
      69  #define TRIO_ERROR_NAME(x) trio_strerror(x)
      70  
      71  typedef int (*trio_outstream_t) TRIO_PROTO((trio_pointer_t, int));
      72  typedef int (*trio_instream_t) TRIO_PROTO((trio_pointer_t));
      73  
      74  TRIO_CONST char *trio_strerror TRIO_PROTO((int));
      75  
      76  /*************************************************************************
      77   * Print Functions
      78   */
      79  
      80  int trio_printf TRIO_PROTO((TRIO_CONST char *format, ...));
      81  int trio_vprintf TRIO_PROTO((TRIO_CONST char *format, va_list args));
      82  int trio_printfv TRIO_PROTO((TRIO_CONST char *format, void **args));
      83  
      84  int trio_fprintf TRIO_PROTO((FILE *file, TRIO_CONST char *format, ...));
      85  int trio_vfprintf TRIO_PROTO((FILE *file, TRIO_CONST char *format, va_list args));
      86  int trio_fprintfv TRIO_PROTO((FILE *file, TRIO_CONST char *format, void **args));
      87  
      88  int trio_dprintf TRIO_PROTO((int fd, TRIO_CONST char *format, ...));
      89  int trio_vdprintf TRIO_PROTO((int fd, TRIO_CONST char *format, va_list args));
      90  int trio_dprintfv TRIO_PROTO((int fd, TRIO_CONST char *format, void **args));
      91  
      92  int trio_cprintf TRIO_PROTO((trio_outstream_t stream, trio_pointer_t closure,
      93  			     TRIO_CONST char *format, ...));
      94  int trio_vcprintf TRIO_PROTO((trio_outstream_t stream, trio_pointer_t closure,
      95  			      TRIO_CONST char *format, va_list args));
      96  int trio_cprintfv TRIO_PROTO((trio_outstream_t stream, trio_pointer_t closure,
      97  			      TRIO_CONST char *format, void **args));
      98  
      99  int trio_sprintf TRIO_PROTO((char *buffer, TRIO_CONST char *format, ...));
     100  int trio_vsprintf TRIO_PROTO((char *buffer, TRIO_CONST char *format, va_list args));
     101  int trio_sprintfv TRIO_PROTO((char *buffer, TRIO_CONST char *format, void **args));
     102  
     103  int trio_snprintf TRIO_PROTO((char *buffer, size_t max, TRIO_CONST char *format, ...));
     104  int trio_vsnprintf TRIO_PROTO((char *buffer, size_t bufferSize, TRIO_CONST char *format,
     105  		   va_list args));
     106  int trio_snprintfv TRIO_PROTO((char *buffer, size_t bufferSize, TRIO_CONST char *format,
     107  		   void **args));
     108  
     109  int trio_snprintfcat TRIO_PROTO((char *buffer, size_t max, TRIO_CONST char *format, ...));
     110  int trio_vsnprintfcat TRIO_PROTO((char *buffer, size_t bufferSize, TRIO_CONST char *format,
     111                        va_list args));
     112  
     113  char *trio_aprintf TRIO_PROTO((TRIO_CONST char *format, ...));
     114  char *trio_vaprintf TRIO_PROTO((TRIO_CONST char *format, va_list args));
     115  
     116  int trio_asprintf TRIO_PROTO((char **ret, TRIO_CONST char *format, ...));
     117  int trio_vasprintf TRIO_PROTO((char **ret, TRIO_CONST char *format, va_list args));
     118  
     119  /*************************************************************************
     120   * Scan Functions
     121   */
     122  int trio_scanf TRIO_PROTO((TRIO_CONST char *format, ...));
     123  int trio_vscanf TRIO_PROTO((TRIO_CONST char *format, va_list args));
     124  int trio_scanfv TRIO_PROTO((TRIO_CONST char *format, void **args));
     125  
     126  int trio_fscanf TRIO_PROTO((FILE *file, TRIO_CONST char *format, ...));
     127  int trio_vfscanf TRIO_PROTO((FILE *file, TRIO_CONST char *format, va_list args));
     128  int trio_fscanfv TRIO_PROTO((FILE *file, TRIO_CONST char *format, void **args));
     129  
     130  int trio_dscanf TRIO_PROTO((int fd, TRIO_CONST char *format, ...));
     131  int trio_vdscanf TRIO_PROTO((int fd, TRIO_CONST char *format, va_list args));
     132  int trio_dscanfv TRIO_PROTO((int fd, TRIO_CONST char *format, void **args));
     133  
     134  int trio_cscanf TRIO_PROTO((trio_instream_t stream, trio_pointer_t closure,
     135  			    TRIO_CONST char *format, ...));
     136  int trio_vcscanf TRIO_PROTO((trio_instream_t stream, trio_pointer_t closure,
     137  			     TRIO_CONST char *format, va_list args));
     138  int trio_cscanfv TRIO_PROTO((trio_instream_t stream, trio_pointer_t closure,
     139  			     TRIO_CONST char *format, void **args));
     140  
     141  int trio_sscanf TRIO_PROTO((TRIO_CONST char *buffer, TRIO_CONST char *format, ...));
     142  int trio_vsscanf TRIO_PROTO((TRIO_CONST char *buffer, TRIO_CONST char *format, va_list args));
     143  int trio_sscanfv TRIO_PROTO((TRIO_CONST char *buffer, TRIO_CONST char *format, void **args));
     144  
     145  /*************************************************************************
     146   * Locale Functions
     147   */
     148  void trio_locale_set_decimal_point TRIO_PROTO((char *decimalPoint));
     149  void trio_locale_set_thousand_separator TRIO_PROTO((char *thousandSeparator));
     150  void trio_locale_set_grouping TRIO_PROTO((char *grouping));
     151  
     152  /*************************************************************************
     153   * Renaming
     154   */
     155  #ifdef TRIO_REPLACE_STDIO
     156  /* Replace the <stdio.h> functions */
     157  #ifndef HAVE_PRINTF
     158  # undef printf
     159  # define printf trio_printf
     160  #endif
     161  #ifndef HAVE_VPRINTF
     162  # undef vprintf
     163  # define vprintf trio_vprintf
     164  #endif
     165  #ifndef HAVE_FPRINTF
     166  # undef fprintf
     167  # define fprintf trio_fprintf
     168  #endif
     169  #ifndef HAVE_VFPRINTF
     170  # undef vfprintf
     171  # define vfprintf trio_vfprintf
     172  #endif
     173  #ifndef HAVE_SPRINTF
     174  # undef sprintf
     175  # define sprintf trio_sprintf
     176  #endif
     177  #ifndef HAVE_VSPRINTF
     178  # undef vsprintf
     179  # define vsprintf trio_vsprintf
     180  #endif
     181  #ifndef HAVE_SNPRINTF
     182  # undef snprintf
     183  # define snprintf trio_snprintf
     184  #endif
     185  #ifndef HAVE_VSNPRINTF
     186  # undef vsnprintf
     187  # define vsnprintf trio_vsnprintf
     188  #endif
     189  #ifndef HAVE_SCANF
     190  # undef scanf
     191  # define scanf trio_scanf
     192  #endif
     193  #ifndef HAVE_VSCANF
     194  # undef vscanf
     195  # define vscanf trio_vscanf
     196  #endif
     197  #ifndef HAVE_FSCANF
     198  # undef fscanf
     199  # define fscanf trio_fscanf
     200  #endif
     201  #ifndef HAVE_VFSCANF
     202  # undef vfscanf
     203  # define vfscanf trio_vfscanf
     204  #endif
     205  #ifndef HAVE_SSCANF
     206  # undef sscanf
     207  # define sscanf trio_sscanf
     208  #endif
     209  #ifndef HAVE_VSSCANF
     210  # undef vsscanf
     211  # define vsscanf trio_vsscanf
     212  #endif
     213  /* These aren't stdio functions, but we make them look similar */
     214  #define dprintf trio_dprintf
     215  #define vdprintf trio_vdprintf
     216  #define aprintf trio_aprintf
     217  #define vaprintf trio_vaprintf
     218  #define asprintf trio_asprintf
     219  #define vasprintf trio_vasprintf
     220  #define dscanf trio_dscanf
     221  #define vdscanf trio_vdscanf
     222  #endif
     223  
     224  #ifdef __cplusplus
     225  } /* extern "C" */
     226  #endif
     227  
     228  #endif /* WITHOUT_TRIO */
     229  
     230  #endif /* TRIO_TRIO_H */