Home | History | Annotate | Download | only in libxml2
      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 */
    231