Skip to content
Snippets Groups Projects
trio.h 7.25 KiB
Newer Older
  • Learn to ignore specific revisions
  • /*************************************************************************
     *
     * $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
    
    Nick Wellnhofer's avatar
    Nick Wellnhofer committed
     * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND
    
     * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER.
     *
    
     *************************************************************************
     *
     * http://ctrio.sourceforge.net/
     *
    
     ************************************************************************/
    
    
    Bjorn Reese's avatar
    Bjorn Reese committed
    #ifndef TRIO_TRIO_H
    #define TRIO_TRIO_H
    
    Bjorn Reese's avatar
    Bjorn Reese committed
     * 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 <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,
    
    /* 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));
    
    Bjorn Reese's avatar
    Bjorn Reese committed
    
    /*************************************************************************
     * 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));
    
    Bjorn Reese's avatar
    Bjorn Reese committed
    /*************************************************************************
     * 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));
    
    Bjorn Reese's avatar
    Bjorn Reese committed
    /*************************************************************************
     * Renaming
     */
    
    #ifdef TRIO_REPLACE_STDIO
    /* Replace the <stdio.h> functions */
    
    Bjorn Reese's avatar
    Bjorn Reese committed
    #ifndef HAVE_PRINTF
    
    Patrick Monnerat's avatar
    Patrick Monnerat committed
    # undef printf
    
    Bjorn Reese's avatar
    Bjorn Reese committed
    # define printf trio_printf
    #endif
    #ifndef HAVE_VPRINTF
    
    Patrick Monnerat's avatar
    Patrick Monnerat committed
    # undef vprintf
    
    Bjorn Reese's avatar
    Bjorn Reese committed
    # define vprintf trio_vprintf
    #endif
    #ifndef HAVE_FPRINTF
    
    Patrick Monnerat's avatar
    Patrick Monnerat committed
    # undef fprintf
    
    Bjorn Reese's avatar
    Bjorn Reese committed
    # define fprintf trio_fprintf
    #endif
    #ifndef HAVE_VFPRINTF
    
    Patrick Monnerat's avatar
    Patrick Monnerat committed
    # undef vfprintf
    
    Bjorn Reese's avatar
    Bjorn Reese committed
    # define vfprintf trio_vfprintf
    #endif
    #ifndef HAVE_SPRINTF
    
    Patrick Monnerat's avatar
    Patrick Monnerat committed
    # undef sprintf
    
    Bjorn Reese's avatar
    Bjorn Reese committed
    # define sprintf trio_sprintf
    #endif
    #ifndef HAVE_VSPRINTF
    
    Patrick Monnerat's avatar
    Patrick Monnerat committed
    # undef vsprintf
    
    Bjorn Reese's avatar
    Bjorn Reese committed
    # define vsprintf trio_vsprintf
    #endif
    #ifndef HAVE_SNPRINTF
    
    Patrick Monnerat's avatar
    Patrick Monnerat committed
    # undef snprintf
    
    Bjorn Reese's avatar
    Bjorn Reese committed
    # define snprintf trio_snprintf
    #endif
    #ifndef HAVE_VSNPRINTF
    
    Patrick Monnerat's avatar
    Patrick Monnerat committed
    # undef vsnprintf
    
    Bjorn Reese's avatar
    Bjorn Reese committed
    # define vsnprintf trio_vsnprintf
    #endif
    #ifndef HAVE_SCANF
    
    Patrick Monnerat's avatar
    Patrick Monnerat committed
    # undef scanf
    
    Bjorn Reese's avatar
    Bjorn Reese committed
    # define scanf trio_scanf
    #endif
    #ifndef HAVE_VSCANF
    
    Patrick Monnerat's avatar
    Patrick Monnerat committed
    # undef vscanf
    
    Bjorn Reese's avatar
    Bjorn Reese committed
    # define vscanf trio_vscanf
    #endif
    #ifndef HAVE_FSCANF
    
    Patrick Monnerat's avatar
    Patrick Monnerat committed
    # undef fscanf
    
    Bjorn Reese's avatar
    Bjorn Reese committed
    # define fscanf trio_fscanf
    #endif
    #ifndef HAVE_VFSCANF
    
    Patrick Monnerat's avatar
    Patrick Monnerat committed
    # undef vfscanf
    
    Bjorn Reese's avatar
    Bjorn Reese committed
    # define vfscanf trio_vfscanf
    #endif
    #ifndef HAVE_SSCANF
    
    Patrick Monnerat's avatar
    Patrick Monnerat committed
    # undef sscanf
    
    Bjorn Reese's avatar
    Bjorn Reese committed
    # define sscanf trio_sscanf
    #endif
    #ifndef HAVE_VSSCANF
    
    Patrick Monnerat's avatar
    Patrick Monnerat committed
    # undef vsscanf
    
    Bjorn Reese's avatar
    Bjorn Reese committed
    # 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 */
    
    Bjorn Reese's avatar
    Bjorn Reese committed
    
    #endif /* TRIO_TRIO_H */