| 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(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 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 # 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 */ | |
| OLD | NEW |