Blame trio.h

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