/ libxml2 / trio.h
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   * MERCHANTIBILITY 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 */