OLD | NEW |
| (Empty) |
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(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 arg
s)); | |
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 *form
at, ...)); | |
110 int trio_vsnprintfcat TRIO_PROTO((char *buffer, size_t bufferSize, TRIO_CONST ch
ar *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, v
a_list args)); | |
143 int trio_sscanfv TRIO_PROTO((TRIO_CONST char *buffer, TRIO_CONST char *format, v
oid **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 # define printf trio_printf | |
159 #endif | |
160 #ifndef HAVE_VPRINTF | |
161 # define vprintf trio_vprintf | |
162 #endif | |
163 #ifndef HAVE_FPRINTF | |
164 # define fprintf trio_fprintf | |
165 #endif | |
166 #ifndef HAVE_VFPRINTF | |
167 # define vfprintf trio_vfprintf | |
168 #endif | |
169 #ifndef HAVE_SPRINTF | |
170 # define sprintf trio_sprintf | |
171 #endif | |
172 #ifndef HAVE_VSPRINTF | |
173 # define vsprintf trio_vsprintf | |
174 #endif | |
175 #ifndef HAVE_SNPRINTF | |
176 # define snprintf trio_snprintf | |
177 #endif | |
178 #ifndef HAVE_VSNPRINTF | |
179 # define vsnprintf trio_vsnprintf | |
180 #endif | |
181 #ifndef HAVE_SCANF | |
182 # define scanf trio_scanf | |
183 #endif | |
184 #ifndef HAVE_VSCANF | |
185 # define vscanf trio_vscanf | |
186 #endif | |
187 #ifndef HAVE_FSCANF | |
188 # define fscanf trio_fscanf | |
189 #endif | |
190 #ifndef HAVE_VFSCANF | |
191 # define vfscanf trio_vfscanf | |
192 #endif | |
193 #ifndef HAVE_SSCANF | |
194 # define sscanf trio_sscanf | |
195 #endif | |
196 #ifndef HAVE_VSSCANF | |
197 # define vsscanf trio_vsscanf | |
198 #endif | |
199 /* These aren't stdio functions, but we make them look similar */ | |
200 #define dprintf trio_dprintf | |
201 #define vdprintf trio_vdprintf | |
202 #define aprintf trio_aprintf | |
203 #define vaprintf trio_vaprintf | |
204 #define asprintf trio_asprintf | |
205 #define vasprintf trio_vasprintf | |
206 #define dscanf trio_dscanf | |
207 #define vdscanf trio_vdscanf | |
208 #endif | |
209 | |
210 #ifdef __cplusplus | |
211 } /* extern "C" */ | |
212 #endif | |
213 | |
214 #endif /* WITHOUT_TRIO */ | |
215 | |
216 #endif /* TRIO_TRIO_H */ | |
OLD | NEW |