1 /** Simple printf implementation
2 Again a stub - will use the std one later...
10 static void _printn(unsigned u, unsigned base, char issigned, void (*emitter)(char, void *), void *pData)
12 const char *_hex = "0123456789ABCDEF";
13 if (issigned && ((int)u < 0)) {
14 (*emitter)('-', pData);
15 u = (unsigned)-((int)u);
18 _printn(u/base, base, 0, emitter, pData);
19 (*emitter)(_hex[u%base], pData);
22 STATIC void _printf(const char *format, void (*emitter)(char, void *), void *pData, va_list va)
28 char c = (char)va_arg(va, int);
34 unsigned u = va_arg(va, unsigned);
35 _printn(u, 10, 0, emitter, pData);
40 unsigned u = va_arg(va, unsigned);
41 _printn(u, 10, 1, emitter, pData);
46 unsigned u = va_arg(va, unsigned);
47 _printn(u, 16, 0, emitter, pData);
52 char *s = va_arg(va, char *);
54 (*emitter)(*s, pData);
61 (*emitter)(*format, pData);
69 STATIC void _char_emitter(char c, void *pData)
71 /* PENDING: Make the compiler happy. */
77 int printf(const char *format, ...)
82 _printf(format, _char_emitter, NULL, va);
84 /* PENDING: What to return? */
88 STATIC void _buf_emitter(char c, void *pData)
90 *((*((char **)pData)))++ = c;
93 int sprintf(char *pInto, const char *format, ...)
98 _printf(format, _buf_emitter, &pInto, va);
101 /* PENDING: What to return? */