1 /*************************************************************************
5 * Copyright (C) 1998 Bjorn Reese and Daniel Stenberg.
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.
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.
16 *************************************************************************
18 * http://ctrio.sourceforge.net/
20 ************************************************************************/
25 #if !defined(WITHOUT_TRIO)
28 * Use autoconf defines if present. Packages using trio must define
29 * HAVE_CONFIG_H as a compiler option themselves.
31 #if defined(TRIO_HAVE_CONFIG_H)
39 #if defined(TRIO_COMPILER_ANCIENT)
52 * Remember to add a textual description to trio_strerror.
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)
71 typedef int (*trio_outstream_t
) TRIO_PROTO((trio_pointer_t
, int));
72 typedef int (*trio_instream_t
) TRIO_PROTO((trio_pointer_t
));
74 TRIO_CONST
char *trio_strerror
TRIO_PROTO((int));
76 /*************************************************************************
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
));
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
));
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
));
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
));
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
));
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
,
106 int trio_snprintfv
TRIO_PROTO((char *buffer
, size_t bufferSize
, TRIO_CONST
char *format
,
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
,
113 char *trio_aprintf
TRIO_PROTO((TRIO_CONST
char *format
, ...));
114 char *trio_vaprintf
TRIO_PROTO((TRIO_CONST
char *format
, va_list args
));
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
));
119 /*************************************************************************
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
));
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
));
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
));
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
));
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
));
145 /*************************************************************************
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
));
152 /*************************************************************************
155 #ifdef TRIO_REPLACE_STDIO
156 /* Replace the <stdio.h> functions */
159 # define printf trio_printf
163 # define vprintf trio_vprintf
167 # define fprintf trio_fprintf
169 #ifndef HAVE_VFPRINTF
171 # define vfprintf trio_vfprintf
175 # define sprintf trio_sprintf
177 #ifndef HAVE_VSPRINTF
179 # define vsprintf trio_vsprintf
181 #ifndef HAVE_SNPRINTF
183 # define snprintf trio_snprintf
185 #ifndef HAVE_VSNPRINTF
187 # define vsnprintf trio_vsnprintf
191 # define scanf trio_scanf
195 # define vscanf trio_vscanf
199 # define fscanf trio_fscanf
203 # define vfscanf trio_vfscanf
207 # define sscanf trio_sscanf
211 # define vsscanf trio_vsscanf
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
228 #endif /* WITHOUT_TRIO */
230 #endif /* TRIO_TRIO_H */