/*************************************************************************
 *
 * $Id: triop.h,v 1.16 2008/11/09 10:52:26 breese Exp $
 *
 * Copyright (C) 2000 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.
 *
 ************************************************************************
 *
 * Private functions, types, etc. used for callback functions.
 *
 * The ref pointer is an opaque type and should remain as such.
 * Private data must only be accessible through the getter and
 * setter functions.
 *
 ************************************************************************/

#ifndef TRIO_TRIOP_H
#define TRIO_TRIOP_H

#include "triodef.h"

#include <stdlib.h>
#if defined(TRIO_COMPILER_ANCIENT)
# include <varargs.h>
#else
# include <stdarg.h>
#endif

/* R defines */
#define TRIO_FEATURE_SCANF 1
#define TRIO_FUNC_TO_FLOAT 1
#define TRIO_FEATURE_FD 0
#define TRIO_FEATURE_CLOSURE 0
#define TRIO_FEATURE_STRERR 0
#define TRIO_FEATURE_LOCALE 0
#define TRIO_FEATURE_USER_DEFINED 0
#define TRIO_EMBED_NAN 1
#define TRIO_EMBED_STRING 1
#define TRIO_EXTENSION 0

#ifdef __cplusplus
extern "C" {
#endif

/*************************************************************************
 * Supported standards
 */

/*
 * TRIO_C99 (=0 or =1)
 *
 * Define this to 0 to disable C99 format specifier extensions, or
 * define to 1 to enable them.  The format specifiers that are
 * disabled by this switch are labelled with [C99] in the format
 * specifier documentation.
 */
#if !defined(TRIO_C99)
# define TRIO_C99 1
#endif

/*
 * TRIO_BSD (=0 or =1)
 *
 * Define this to 0 to disable BSD format specifier extensions, or
 * define to 1 to enable them.  The format specifiers that are
 * disabled by this switch are labelled with [BSD] in the format
 * specifier documentation.
 */
#if !defined(TRIO_BSD)
# define TRIO_BSD 1
#endif

/*
 * TRIO_GNU (=0 or =1)
 *
 * Define this to 0 to disable GNU format specifier extensions, or
 * define to 1 to enable them.  The format specifiers that are
 * disabled by this switch are labelled with [GNU] in the format
 * specifier documentation.
 */
#if !defined(TRIO_GNU)
# define TRIO_GNU 1
#endif

/*
 * TRIO_MISC (=0 or =1)
 *
 * Define this to 0 to disable miscellaneous format specifier
 * extensions, or define to 1 to enable them.  The format specifiers
 * that are disabled by this switch are labelled with [MISC] in the
 * format specifier documentation.
 */
#if !defined(TRIO_MISC)
# define TRIO_MISC 1
#endif

/*
 * TRIO_UNIX98 (=0 or =1)
 *
 * Define this to 0 to disable UNIX98 format specifier extensions,
 * or define to 1 to enable them.  The format specifiers that are
 * disabled by this switch are labelled with [UNIX98] in the format
 * specifier documentation.
 */
#if !defined(TRIO_UNIX98)
# define TRIO_UNIX98 1
#endif
  
/*
 * TRIO_MICROSOFT (=0 or =1)
 *
 * Define this to 0 to disable Microsoft Visual C format specifier
 * extensions, or define to 1 to enable them.  The format specifiers
 * that are disabled by this switch are labelled with [MSVC] in the
 * format specifier documentation.
 */
#if !defined(TRIO_MICROSOFT)
# define TRIO_MICROSOFT 1
#endif

/*
 * TRIO_EXTENSION (=0 or =1)
 *
 * Define this to 0 to disable Trio-specific extensions, or define
 * to 1 to enable them.  This has two effects: it controls whether
 * or not the Trio user-defined formating mechanism
 * (trio_register() etc) is supported, and it enables or disables
 * Trio's own format specifier extensions.  The format specifiers
 * that are disabled by this switch are labelled with [TRIO] in
 * the format specifier documentation.
 */
#if !defined(TRIO_EXTENSION)
# define TRIO_EXTENSION 1
#endif

/*
 * TRIO_DEPRECATED (=0 or =1)
 *
 * Define this to 0 to disable deprecated functionality, or define
 * to 1 to enable them.
 */
#if !defined(TRIO_DEPRECATED)
# define TRIO_DEPRECATED 1
#endif

/*************************************************************************
 * Features
 */

#if defined(TRIO_SNPRINTF_ONLY)
# define TRIO_FEATURE_SCANF 0
# define TRIO_FEATURE_FILE 0
# define TRIO_FEATURE_STDIO 0
# define TRIO_FEATURE_FD 0
# define TRIO_FEATURE_DYNAMICSTRING 0
# define TRIO_FEATURE_CLOSURE 0
# define TRIO_FEATURE_STRERR 0
# define TRIO_FEATURE_LOCALE 0
# define TRIO_EMBED_NAN 1
# define TRIO_EMBED_STRING 1
#endif
  
/*
 * TRIO_FEATURE_SCANF (=0 or =1)
 *
 * Define this to 0 to disable all the scanf() variants, or define to 1
 * to enable them.
 */
#if !defined(TRIO_FEATURE_SCANF)
# define TRIO_FEATURE_SCANF 1
#endif
  
/*
 * TRIO_FEATURE_FILE (=0 or =1)
 *
 * Define this to 0 to disable compilation of the trio_fprintf() and
 * trio_fscanf() family of functions, or define to 1 to enable them.
 *
 * This may be useful on an embedded platform with no filesystem.
 * Note that trio_printf() uses fwrite to write to stdout, so if you
 * do not have an implementation of fwrite() at all then you must also
 * define TRIO_FEATURE_STDIO to 0.
 */
#if !defined(TRIO_FEATURE_FILE)
# define TRIO_FEATURE_FILE 1
#endif

/*
 * TRIO_FEATURE_STDIO (=0 or =1)
 *
 * Define this to 0 to disable compilation of the trio_printf() and
 * trio_scanf() family of functions, or define to 1 to enable them.
 *
 * This may be useful on an embedded platform with no standard I/O.
 */
#if !defined(TRIO_FEATURE_STDIO)
# define TRIO_FEATURE_STDIO 1
#endif

/*
 * TRIO_FEATURE_FD (=0 or =1)
 *
 * Define this to 0 to disable compilation of the trio_dprintf() and
 * trio_dscanf() family of functions, or define to 1 to enable them.
 *
 * This may be useful on an embedded platform with no filesystem, or on
 * a platform that supports file I/O using FILE* but not using raw file
 * descriptors.
 */
#if !defined(TRIO_FEATURE_FD)
# define TRIO_FEATURE_FD 1
#endif

/*
 * TRIO_FEATURE_DYNAMICSTRING (=0 or =1)
 *
 * Define this to 0 to disable compilation of the trio_aprintf() 
 * family of functions, or define to 1 to enable them.
 *
 * If you define both this and TRIO_MINIMAL to 0, then Trio will never
 * call malloc or free.
 */
#if !defined(TRIO_FEATURE_DYNAMICSTRING)
# define TRIO_FEATURE_DYNAMICSTRING 1
#endif

/*
 * TRIO_FEATURE_CLOSURE (=0 or =1)
 *
 * Define this to 0 to disable compilation of the trio_cprintf() and
 * trio_cscanf() family of functions, or define to 1 to enable them.
 *
 * These functions are rarely needed. This saves a (small) amount of code.
 */
#if !defined(TRIO_FEATURE_CLOSURE)
# define TRIO_FEATURE_CLOSURE 1
#endif

/*
 * TRIO_FEATURE_ERRORCODE (=0 or =1)
 *
 * Define this to 0 to return -1 from the print and scan function on
 * error, or define to 1 to return a negative number with debugging
 * information as part of the return code.
 *
 * If enabled, the return code will be a negative number, which encodes
 * an error code and an error location. These can be decoded with the
 * TRIO_ERROR_CODE and TRIO_ERROR_POSITION macros.
 */
#if defined(TRIO_ERRORS)
# define TRIO_FEATURE_ERRORCODE TRIO_ERRORS
#endif
#if !defined(TRIO_FEATURE_ERRORCODE)
# define TRIO_FEATURE_ERRORCODE 1
#endif

/*
 * TRIO_FEATURE_STRERR (=0 or =1)
 *
 * Define this to 0 if you do not use trio_strerror(), or define to 1 if
 * you do use it.
 *
 * This saves a (small) amount of code.
 */
#if !defined(TRIO_FEATURE_STRERR)
# define TRIO_FEATURE_STRERR 1
#endif

/*
 * TRIO_FEATURE_FLOAT (=0 or =1)
 *
 * Define this to 0 to disable all floating-point support, or define
 * to 1 to enable it.
 *
 * This is useful in restricted embedded platforms that do not support
 * floating-point.  Obviously you cannot use floating-point format
 * specifiers if you define this.
 *
 * Do not compile trionan.c if you disable this.
 */
#if !defined(TRIO_FEATURE_FLOAT)
# define TRIO_FEATURE_FLOAT 1
#endif

/*
 * TRIO_FEATURE_LOCALE (=0 or =1)
 *
 * Define this to 0 to disable customized locale support, or define
 * to 1 to enable it.
 *
 * This saves a (small) amount of code.
 */
#if !defined(TRIO_FEATURE_LOCALE)
# define TRIO_FEATURE_LOCALE 1
#endif

/*
 * TRIO_MINIMAL
 *
 * Define this to disable building the public trionan.h and triostr.h.
 * If you define this, then you must not compile trionan.c and triostr.c
 * separately.
 */
#if defined(TRIO_MINIMAL)
# if !defined(TRIO_EMBED_NAN)
#  define TRIO_EMBED_NAN
# endif
# if !defined(TRIO_EMBED_STRING)
#  define TRIO_EMBED_STRING
# endif
#endif
  
/* Does not work yet. Do not enable */
#ifndef TRIO_FEATURE_WIDECHAR
# define TRIO_FEATURE_WIDECHAR 0
#endif

/*************************************************************************
 * Mapping standards to internal features
 */

#if !defined(TRIO_FEATURE_HEXFLOAT)
# define TRIO_FEATURE_HEXFLOAT (TRIO_C99 && TRIO_FEATURE_FLOAT)
#endif

#if !defined(TRIO_FEATURE_LONGDOUBLE)
# define TRIO_FEATURE_LONGDOUBLE TRIO_FEATURE_FLOAT
#endif

#if !defined(TRIO_FEATURE_ERRNO)
# define TRIO_FEATURE_ERRNO TRIO_GNU
#endif

#if !defined(TRIO_FEATURE_QUAD)
# define TRIO_FEATURE_QUAD (TRIO_BSD || TRIO_GNU)
#endif

#if !defined(TRIO_FEATURE_SIZE_T)
# define TRIO_FEATURE_SIZE_T TRIO_C99
#endif

#if !defined(TRIO_FEATURE_SIZE_T_UPPER)
# define TRIO_FEATURE_SIZE_T_UPPER TRIO_GNU
#endif
  
#if !defined(TRIO_FEATURE_PTRDIFF_T)
# define TRIO_FEATURE_PTRDIFF_T TRIO_C99
#endif

#if !defined(TRIO_FEATURE_INTMAX_T)
# define TRIO_FEATURE_INTMAX_T TRIO_C99
#endif

#if !defined(TRIO_FEATURE_FIXED_SIZE)
# define TRIO_FEATURE_FIXED_SIZE TRIO_MICROSOFT
#endif

#if !defined(TRIO_FEATURE_POSITIONAL)
# define TRIO_FEATURE_POSITIONAL TRIO_UNIX98
#endif

#if !defined(TRIO_FEATURE_USER_DEFINED)
# define TRIO_FEATURE_USER_DEFINED TRIO_EXTENSION
#endif

#if !defined(TRIO_FEATURE_BINARY)
# define TRIO_FEATURE_BINARY TRIO_EXTENSION
#endif

#if !defined(TRIO_FEATURE_QUOTE)
# define TRIO_FEATURE_QUOTE TRIO_EXTENSION
#endif
  
#if !defined(TRIO_FEATURE_STICKY)
# define TRIO_FEATURE_STICKY TRIO_EXTENSION
#endif
  
#if !defined(TRIO_FEATURE_VARSIZE)
# define TRIO_FEATURE_VARSIZE TRIO_EXTENSION
#endif

#if !defined(TRIO_FEATURE_ROUNDING)
# define TRIO_FEATURE_ROUNDING TRIO_EXTENSION
#endif
  
/*************************************************************************
 * Memory handling
 */
#ifndef TRIO_MALLOC
# define TRIO_MALLOC(n) malloc(n)
#endif
#ifndef TRIO_REALLOC
# define TRIO_REALLOC(x,n) realloc((x),(n))
#endif
#ifndef TRIO_FREE
# define TRIO_FREE(x) free(x)
#endif


/*************************************************************************
 * User-defined specifiers
 */

typedef int (*trio_callback_t) TRIO_PROTO((trio_pointer_t));

trio_pointer_t trio_register TRIO_PROTO((trio_callback_t callback, const char *name));
void trio_unregister TRIO_PROTO((trio_pointer_t handle));

TRIO_CONST char *trio_get_format TRIO_PROTO((trio_pointer_t ref));
trio_pointer_t trio_get_argument TRIO_PROTO((trio_pointer_t ref));

/* Modifiers */
int  trio_get_width TRIO_PROTO((trio_pointer_t ref));
void trio_set_width TRIO_PROTO((trio_pointer_t ref, int width));
int  trio_get_precision TRIO_PROTO((trio_pointer_t ref));
void trio_set_precision TRIO_PROTO((trio_pointer_t ref, int precision));
int  trio_get_base TRIO_PROTO((trio_pointer_t ref));
void trio_set_base TRIO_PROTO((trio_pointer_t ref, int base));
int  trio_get_padding TRIO_PROTO((trio_pointer_t ref));
void trio_set_padding TRIO_PROTO((trio_pointer_t ref, int is_padding));
int  trio_get_short TRIO_PROTO((trio_pointer_t ref)); /* h */
void trio_set_shortshort TRIO_PROTO((trio_pointer_t ref, int is_shortshort));
int  trio_get_shortshort TRIO_PROTO((trio_pointer_t ref)); /* hh */
void trio_set_short TRIO_PROTO((trio_pointer_t ref, int is_short));
int  trio_get_long TRIO_PROTO((trio_pointer_t ref)); /* l */
void trio_set_long TRIO_PROTO((trio_pointer_t ref, int is_long));
int  trio_get_longlong TRIO_PROTO((trio_pointer_t ref)); /* ll */
void trio_set_longlong TRIO_PROTO((trio_pointer_t ref, int is_longlong));
int  trio_get_longdouble TRIO_PROTO((trio_pointer_t ref)); /* L */
void trio_set_longdouble TRIO_PROTO((trio_pointer_t ref, int is_longdouble));
int  trio_get_alternative TRIO_PROTO((trio_pointer_t ref)); /* # */
void trio_set_alternative TRIO_PROTO((trio_pointer_t ref, int is_alternative));
int  trio_get_alignment TRIO_PROTO((trio_pointer_t ref)); /* - */
void trio_set_alignment TRIO_PROTO((trio_pointer_t ref, int is_leftaligned));
int  trio_get_spacing TRIO_PROTO((trio_pointer_t ref)); /*  TRIO_PROTO((space) */
void trio_set_spacing TRIO_PROTO((trio_pointer_t ref, int is_space));
int  trio_get_sign TRIO_PROTO((trio_pointer_t ref)); /* + */
void trio_set_sign TRIO_PROTO((trio_pointer_t ref, int is_showsign));
#if TRIO_FEATURE_QUOTE
int  trio_get_quote TRIO_PROTO((trio_pointer_t ref)); /* ' */
void trio_set_quote TRIO_PROTO((trio_pointer_t ref, int is_quote));
#endif
int  trio_get_upper TRIO_PROTO((trio_pointer_t ref));
void trio_set_upper TRIO_PROTO((trio_pointer_t ref, int is_upper));
#if TRIO_FEATURE_INTMAX_T
int  trio_get_largest TRIO_PROTO((trio_pointer_t ref)); /* j */
void trio_set_largest TRIO_PROTO((trio_pointer_t ref, int is_largest));
#endif
#if TRIO_FEATURE_PTRDIFF_T
int  trio_get_ptrdiff TRIO_PROTO((trio_pointer_t ref)); /* t */
void trio_set_ptrdiff TRIO_PROTO((trio_pointer_t ref, int is_ptrdiff));
#endif
#if TRIO_FEATURE_SIZE_T
int  trio_get_size TRIO_PROTO((trio_pointer_t ref)); /* z / Z */
void trio_set_size TRIO_PROTO((trio_pointer_t ref, int is_size));
#endif

/* Printing */
int trio_print_ref TRIO_PROTO((trio_pointer_t ref, const char *format, ...));
int trio_vprint_ref TRIO_PROTO((trio_pointer_t ref, const char *format, va_list args));
int trio_printv_ref TRIO_PROTO((trio_pointer_t ref, const char *format, trio_pointer_t *args));

void trio_print_int TRIO_PROTO((trio_pointer_t ref, int number));
void trio_print_uint TRIO_PROTO((trio_pointer_t ref, unsigned int number));
/*  void trio_print_long TRIO_PROTO((trio_pointer_t ref, long number)); */
/*  void trio_print_ulong TRIO_PROTO((trio_pointer_t ref, unsigned long number)); */
void trio_print_double TRIO_PROTO((trio_pointer_t ref, double number));
void trio_print_string TRIO_PROTO((trio_pointer_t ref, char *string));
static void trio_print_pointer TRIO_PROTO((trio_pointer_t ref, trio_pointer_t pointer));

#ifdef __cplusplus
} /* extern "C" */
#endif

#endif /* TRIO_TRIOP_H */
