/*------------------------------------------------------------------------*/
/* Universal string handler for user console interface  (C)ChaN, 2011     */
/*------------------------------------------------------------------------*/

#ifndef _STRFUNC
#define _STRFUNC

#include <stdarg.h>

#ifdef __cplusplus
extern "C" {
#endif

#define _USE_XFUNC_OUT  1   /* 1: Use output functions */
#define _CR_CRLF        1   /* 1: Convert \n ==> \r\n in the output char */

#define _USE_XFUNC_IN   1   /* 1: Use input function */
#define _LINE_ECHO      1   /* 1: Echo back input chars in xgets function */

#if _USE_XFUNC_OUT
#define xdev_out(func) xfunc_out = (void(*)(unsigned char))(func)
extern void (*xfunc_out)(unsigned char);
extern void xputc(char c);
extern void xputs(const char *str);
extern void xfputs(void (*func)(unsigned char), const char *str);
extern void xvprintf(const char *fmt, va_list arp);
extern void xprintf(const char *fmt, ...);
extern void xsprintf(char *buff, const char *fmt, ...);
extern void xfprintf(void (*func)(unsigned char), const char  *fmt, ...);
extern void put_dump(const void *buff, unsigned long addr, int len, int width);
#define DW_CHAR     sizeof(char)
#define DW_SHORT    sizeof(short)
#define DW_LONG     sizeof(long)
#endif

#if _USE_XFUNC_IN
#define xdev_in(func) xfunc_in = (unsigned char(*)(void))(func)
extern unsigned char (*xfunc_in)(void);
extern int xgets(char *buff, int len);
extern int xfgets(unsigned char (*func)(void), char *buff, int len);
extern int xatoi(char **str, long *res);
#endif

#ifdef __cplusplus
}
#endif

#endif
