// Rowley C Compiler, runtime support.
//
// Copyright (c) 2001, 2002 Rowley Associates Limited.
//
// This file may be distributed under the terms of the License Agreement
// provided with this software.
//
// THIS FILE IS PROVIDED AS IS WITH NO WARRANTY OF ANY KIND, INCLUDING THE
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
#ifndef __vfprintf_H
#define __vfprintf_H
#if defined(__CROSSWORKS) || defined(__CROSSWORKS_ARM)
#include "__argtype.h"
#else
#include "../../lib/hosted__argtype.h"
#endif
#ifndef __MEMSPACE
#define __MEMSPACE
#endif
#ifndef __CODE
#define __CODE
#endif
#ifdef __cplusplus
extern "C" {
#endif
typedef struct
{
int is_string;
size_t charcount;
size_t maxchars;
union
{
char *string;
int (*output_fn)(int);
} u;
} __printf_t;
typedef struct
{
char is_string;
} __scanf_t;
typedef struct
{
char is_string;
char *string;
} __string_scanf_t;
typedef struct
{
char is_string;
int (*getc_fn)(void);
int (*ungetc_fn)(int);
} __stream_scanf_t;
// Printer formatting flags.
#define FORMAT_LONG (1<<0)
#define FORMAT_LONG_LONG (1<<1)
#define FORMAT_SHORT (1<<2)
#define FORMAT_CHAR (1<<3)
#define FORMAT_LEFT_JUSTIFY (1<<4)
#define FORMAT_SIGNED (1<<5)
#define FORMAT_SPACE (1<<6)
#define FORMAT_ALTERNATIVE (1<<7)
#define FORMAT_HAVE_PRECISION (1<<8)
#define FORMAT_ZERO_FILL (1<<9)
#define FORMAT_FLOAT_E (1<<10)
#define FORMAT_FLOAT_F (1<<11)
#define FORMAT_FLOAT_A (1<<12)
#define FORMAT_CAPITALS (1<<13)
#define FORMAT_INPUT_SIGNED (1<<14)
// Combinations of flags used internally...
#define FORMAT_NEGATIVE (FORMAT_SIGNED | FORMAT_SPACE)
#define FORMAT_FLOAT_G (FORMAT_FLOAT_E | FORMAT_FLOAT_F)
// Helper variables.
extern __CODE const char __hex_uc[16];
extern __CODE const char __hex_lc[16];
// Create _c versions of the functions
#ifdef __VFxxxxx_C
#define __vfprintf __vfprintf_c
#define __vfscanf __vfscanf_c
#endif
// Standard formatting routine.
int __vfprintf(__printf_t *p, __MEMSPACE const char *fmt, ARGTYPE args);
int __vfscanf(__scanf_t *p, __MEMSPACE const unsigned char *fmt, ARGTYPE argv);
#ifdef __cplusplus
}
#endif
#endif