|  | /************************************************************************* | 
|  | * | 
|  | * $Id$ | 
|  | * | 
|  | * Copyright (C) 1998 Bjorn Reese and Daniel Stenberg. | 
|  | * | 
|  | * Permission to use, copy, modify, and distribute this software for any | 
|  | * purpose with or without fee is hereby granted, provided that the above | 
|  | * copyright notice and this permission notice appear in all copies. | 
|  | * | 
|  | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED | 
|  | * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF | 
|  | * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND | 
|  | * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER. | 
|  | * | 
|  | ************************************************************************* | 
|  | * | 
|  | * http://ctrio.sourceforge.net/ | 
|  | * | 
|  | ************************************************************************/ | 
|  |  | 
|  | #ifndef TRIO_TRIO_H | 
|  | #define TRIO_TRIO_H | 
|  |  | 
|  | #if !defined(WITHOUT_TRIO) | 
|  |  | 
|  | /* | 
|  | * Use autoconf defines if present. Packages using trio must define | 
|  | * HAVE_CONFIG_H as a compiler option themselves. | 
|  | */ | 
|  | #if defined(TRIO_HAVE_CONFIG_H) | 
|  | # include "config.h" | 
|  | #endif | 
|  |  | 
|  | #include "triodef.h" | 
|  |  | 
|  | #include <stdio.h> | 
|  | #include <stdlib.h> | 
|  | #if defined(TRIO_COMPILER_ANCIENT) | 
|  | # include <varargs.h> | 
|  | #else | 
|  | # include <stdarg.h> | 
|  | #endif | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | extern "C" { | 
|  | #endif | 
|  |  | 
|  | /* | 
|  | * Error codes. | 
|  | * | 
|  | * Remember to add a textual description to trio_strerror. | 
|  | */ | 
|  | enum { | 
|  | TRIO_EOF      = 1, | 
|  | TRIO_EINVAL   = 2, | 
|  | TRIO_ETOOMANY = 3, | 
|  | TRIO_EDBLREF  = 4, | 
|  | TRIO_EGAP     = 5, | 
|  | TRIO_ENOMEM   = 6, | 
|  | TRIO_ERANGE   = 7, | 
|  | TRIO_ERRNO    = 8, | 
|  | TRIO_ECUSTOM  = 9 | 
|  | }; | 
|  |  | 
|  | /* Error macros */ | 
|  | #define TRIO_ERROR_CODE(x) ((-(x)) & 0x00FF) | 
|  | #define TRIO_ERROR_POSITION(x) ((-(x)) >> 8) | 
|  | #define TRIO_ERROR_NAME(x) trio_strerror(x) | 
|  |  | 
|  | typedef int (*trio_outstream_t) TRIO_PROTO((trio_pointer_t, int)); | 
|  | typedef int (*trio_instream_t) TRIO_PROTO((trio_pointer_t)); | 
|  |  | 
|  | TRIO_CONST char *trio_strerror TRIO_PROTO((int)); | 
|  |  | 
|  | /************************************************************************* | 
|  | * Print Functions | 
|  | */ | 
|  |  | 
|  | int trio_printf TRIO_PROTO((TRIO_CONST char *format, ...)); | 
|  | int trio_vprintf TRIO_PROTO((TRIO_CONST char *format, va_list args)); | 
|  | int trio_printfv TRIO_PROTO((TRIO_CONST char *format, void **args)); | 
|  |  | 
|  | int trio_fprintf TRIO_PROTO((FILE *file, TRIO_CONST char *format, ...)); | 
|  | int trio_vfprintf TRIO_PROTO((FILE *file, TRIO_CONST char *format, va_list args)); | 
|  | int trio_fprintfv TRIO_PROTO((FILE *file, TRIO_CONST char *format, void **args)); | 
|  |  | 
|  | int trio_dprintf TRIO_PROTO((int fd, TRIO_CONST char *format, ...)); | 
|  | int trio_vdprintf TRIO_PROTO((int fd, TRIO_CONST char *format, va_list args)); | 
|  | int trio_dprintfv TRIO_PROTO((int fd, TRIO_CONST char *format, void **args)); | 
|  |  | 
|  | int trio_cprintf TRIO_PROTO((trio_outstream_t stream, trio_pointer_t closure, | 
|  | TRIO_CONST char *format, ...)); | 
|  | int trio_vcprintf TRIO_PROTO((trio_outstream_t stream, trio_pointer_t closure, | 
|  | TRIO_CONST char *format, va_list args)); | 
|  | int trio_cprintfv TRIO_PROTO((trio_outstream_t stream, trio_pointer_t closure, | 
|  | TRIO_CONST char *format, void **args)); | 
|  |  | 
|  | int trio_sprintf TRIO_PROTO((char *buffer, TRIO_CONST char *format, ...)); | 
|  | int trio_vsprintf TRIO_PROTO((char *buffer, TRIO_CONST char *format, va_list args)); | 
|  | int trio_sprintfv TRIO_PROTO((char *buffer, TRIO_CONST char *format, void **args)); | 
|  |  | 
|  | int trio_snprintf TRIO_PROTO((char *buffer, size_t max, TRIO_CONST char *format, ...)); | 
|  | int trio_vsnprintf TRIO_PROTO((char *buffer, size_t bufferSize, TRIO_CONST char *format, | 
|  | va_list args)); | 
|  | int trio_snprintfv TRIO_PROTO((char *buffer, size_t bufferSize, TRIO_CONST char *format, | 
|  | void **args)); | 
|  |  | 
|  | int trio_snprintfcat TRIO_PROTO((char *buffer, size_t max, TRIO_CONST char *format, ...)); | 
|  | int trio_vsnprintfcat TRIO_PROTO((char *buffer, size_t bufferSize, TRIO_CONST char *format, | 
|  | va_list args)); | 
|  |  | 
|  | char *trio_aprintf TRIO_PROTO((TRIO_CONST char *format, ...)); | 
|  | char *trio_vaprintf TRIO_PROTO((TRIO_CONST char *format, va_list args)); | 
|  |  | 
|  | int trio_asprintf TRIO_PROTO((char **ret, TRIO_CONST char *format, ...)); | 
|  | int trio_vasprintf TRIO_PROTO((char **ret, TRIO_CONST char *format, va_list args)); | 
|  |  | 
|  | /************************************************************************* | 
|  | * Scan Functions | 
|  | */ | 
|  | int trio_scanf TRIO_PROTO((TRIO_CONST char *format, ...)); | 
|  | int trio_vscanf TRIO_PROTO((TRIO_CONST char *format, va_list args)); | 
|  | int trio_scanfv TRIO_PROTO((TRIO_CONST char *format, void **args)); | 
|  |  | 
|  | int trio_fscanf TRIO_PROTO((FILE *file, TRIO_CONST char *format, ...)); | 
|  | int trio_vfscanf TRIO_PROTO((FILE *file, TRIO_CONST char *format, va_list args)); | 
|  | int trio_fscanfv TRIO_PROTO((FILE *file, TRIO_CONST char *format, void **args)); | 
|  |  | 
|  | int trio_dscanf TRIO_PROTO((int fd, TRIO_CONST char *format, ...)); | 
|  | int trio_vdscanf TRIO_PROTO((int fd, TRIO_CONST char *format, va_list args)); | 
|  | int trio_dscanfv TRIO_PROTO((int fd, TRIO_CONST char *format, void **args)); | 
|  |  | 
|  | int trio_cscanf TRIO_PROTO((trio_instream_t stream, trio_pointer_t closure, | 
|  | TRIO_CONST char *format, ...)); | 
|  | int trio_vcscanf TRIO_PROTO((trio_instream_t stream, trio_pointer_t closure, | 
|  | TRIO_CONST char *format, va_list args)); | 
|  | int trio_cscanfv TRIO_PROTO((trio_instream_t stream, trio_pointer_t closure, | 
|  | TRIO_CONST char *format, void **args)); | 
|  |  | 
|  | int trio_sscanf TRIO_PROTO((TRIO_CONST char *buffer, TRIO_CONST char *format, ...)); | 
|  | int trio_vsscanf TRIO_PROTO((TRIO_CONST char *buffer, TRIO_CONST char *format, va_list args)); | 
|  | int trio_sscanfv TRIO_PROTO((TRIO_CONST char *buffer, TRIO_CONST char *format, void **args)); | 
|  |  | 
|  | /************************************************************************* | 
|  | * Locale Functions | 
|  | */ | 
|  | void trio_locale_set_decimal_point TRIO_PROTO((char *decimalPoint)); | 
|  | void trio_locale_set_thousand_separator TRIO_PROTO((char *thousandSeparator)); | 
|  | void trio_locale_set_grouping TRIO_PROTO((char *grouping)); | 
|  |  | 
|  | /************************************************************************* | 
|  | * Renaming | 
|  | */ | 
|  | #ifdef TRIO_REPLACE_STDIO | 
|  | /* Replace the <stdio.h> functions */ | 
|  | #ifndef HAVE_PRINTF | 
|  | # undef printf | 
|  | # define printf trio_printf | 
|  | #endif | 
|  | #ifndef HAVE_VPRINTF | 
|  | # undef vprintf | 
|  | # define vprintf trio_vprintf | 
|  | #endif | 
|  | #ifndef HAVE_FPRINTF | 
|  | # undef fprintf | 
|  | # define fprintf trio_fprintf | 
|  | #endif | 
|  | #ifndef HAVE_VFPRINTF | 
|  | # undef vfprintf | 
|  | # define vfprintf trio_vfprintf | 
|  | #endif | 
|  | #ifndef HAVE_SPRINTF | 
|  | # undef sprintf | 
|  | # define sprintf trio_sprintf | 
|  | #endif | 
|  | #ifndef HAVE_VSPRINTF | 
|  | # undef vsprintf | 
|  | # define vsprintf trio_vsprintf | 
|  | #endif | 
|  | #ifndef HAVE_SNPRINTF | 
|  | # undef snprintf | 
|  | # define snprintf trio_snprintf | 
|  | #endif | 
|  | #ifndef HAVE_VSNPRINTF | 
|  | # undef vsnprintf | 
|  | # define vsnprintf trio_vsnprintf | 
|  | #endif | 
|  | #ifndef HAVE_SCANF | 
|  | # undef scanf | 
|  | # define scanf trio_scanf | 
|  | #endif | 
|  | #ifndef HAVE_VSCANF | 
|  | # undef vscanf | 
|  | # define vscanf trio_vscanf | 
|  | #endif | 
|  | #ifndef HAVE_FSCANF | 
|  | # undef fscanf | 
|  | # define fscanf trio_fscanf | 
|  | #endif | 
|  | #ifndef HAVE_VFSCANF | 
|  | # undef vfscanf | 
|  | # define vfscanf trio_vfscanf | 
|  | #endif | 
|  | #ifndef HAVE_SSCANF | 
|  | # undef sscanf | 
|  | # define sscanf trio_sscanf | 
|  | #endif | 
|  | #ifndef HAVE_VSSCANF | 
|  | # undef vsscanf | 
|  | # define vsscanf trio_vsscanf | 
|  | #endif | 
|  | /* These aren't stdio functions, but we make them look similar */ | 
|  | #define dprintf trio_dprintf | 
|  | #define vdprintf trio_vdprintf | 
|  | #define aprintf trio_aprintf | 
|  | #define vaprintf trio_vaprintf | 
|  | #define asprintf trio_asprintf | 
|  | #define vasprintf trio_vasprintf | 
|  | #define dscanf trio_dscanf | 
|  | #define vdscanf trio_vdscanf | 
|  | #endif | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | } /* extern "C" */ | 
|  | #endif | 
|  |  | 
|  | #endif /* WITHOUT_TRIO */ | 
|  |  | 
|  | #endif /* TRIO_TRIO_H */ |