|
|
|
@ -1,5 +1,7 @@ |
|
|
|
|
#include "global.h" |
|
|
|
|
|
|
|
|
|
//#define WITH_FLOAT // this is busted still
|
|
|
|
|
|
|
|
|
|
#include <string.h> |
|
|
|
|
|
|
|
|
|
uint32_t parse_int(const char *src, int b, int width) |
|
|
|
@ -25,7 +27,7 @@ uint32_t parse_int(const char *src, int b, int width) |
|
|
|
|
val += *src - 'A' + 10; |
|
|
|
|
else if (*src >= '0' && *src <= '9') |
|
|
|
|
val += *src - '0'; |
|
|
|
|
else
|
|
|
|
|
else |
|
|
|
|
break; |
|
|
|
|
skip: |
|
|
|
|
src++; |
|
|
|
@ -39,11 +41,12 @@ uint32_t parse_int(const char *src, int b, int width) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#ifdef WITH_FLOAT |
|
|
|
|
static int __print_float(char *buf, int buf_len, float i, int width, int width2) |
|
|
|
|
static int __print_float(char *buf, int buf_len, double i, int width, int width2) |
|
|
|
|
{ |
|
|
|
|
char *s, *p = buf; |
|
|
|
|
uint8_t use_width = width; |
|
|
|
|
uint8_t use_width2 = width2; |
|
|
|
|
double t; |
|
|
|
|
double u = i; |
|
|
|
|
|
|
|
|
|
if (i == 0.0f) { |
|
|
|
|
s = "0.0\0"; |
|
|
|
@ -60,13 +63,13 @@ static int __print_float(char *buf, int buf_len, float i, int width, int width2) |
|
|
|
|
*s = '\0'; |
|
|
|
|
|
|
|
|
|
while (i != 0.0f && (!use_width || (width > 0))) { |
|
|
|
|
t = (unsigned int) u % 10.0f; |
|
|
|
|
t = u % 10.0f; |
|
|
|
|
*--s = (char)(t + '0'); |
|
|
|
|
u /= 10.0f; |
|
|
|
|
width--; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
almost: |
|
|
|
|
while (width > 0) { |
|
|
|
|
*buf++ = '0'; |
|
|
|
@ -74,7 +77,7 @@ almost: |
|
|
|
|
} |
|
|
|
|
strcpy(buf, s); |
|
|
|
|
|
|
|
|
|
return strlen(p);
|
|
|
|
|
return strlen(p); |
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
@ -83,7 +86,7 @@ static int __print_int(char *buf, int buf_len, int i, int base, int sign, int wi |
|
|
|
|
char *s, *p = buf; |
|
|
|
|
unsigned int u = (unsigned int) i; |
|
|
|
|
uint8_t use_width; |
|
|
|
|
int t;
|
|
|
|
|
int t; |
|
|
|
|
|
|
|
|
|
use_width = width; |
|
|
|
|
|
|
|
|
@ -149,7 +152,7 @@ int mcu_vsnprintf(char *str, size_t size, const char *format, va_list ap) |
|
|
|
|
if (*format == 'l') { |
|
|
|
|
format++; |
|
|
|
|
// XXX handle LONG?
|
|
|
|
|
}
|
|
|
|
|
} |
|
|
|
|
switch(*format) { |
|
|
|
|
case 'c': { /* Character */ |
|
|
|
|
char tmp = va_arg(ap, int); |
|
|
|
@ -158,7 +161,7 @@ int mcu_vsnprintf(char *str, size_t size, const char *format, va_list ap) |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
case 'u': { /* Unsigned integer */ |
|
|
|
|
uint8_t tmp = __print_int(str, size-len,
|
|
|
|
|
uint8_t tmp = __print_int(str, size-len, |
|
|
|
|
va_arg(ap, unsigned int), |
|
|
|
|
10, 0, width); |
|
|
|
|
str += tmp; |
|
|
|
@ -166,16 +169,16 @@ int mcu_vsnprintf(char *str, size_t size, const char *format, va_list ap) |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
case 'd': { /* Signed integer */ |
|
|
|
|
uint8_t tmp = __print_int(str, size-len,
|
|
|
|
|
uint8_t tmp = __print_int(str, size-len, |
|
|
|
|
va_arg(ap, int), |
|
|
|
|
10, 1, width); |
|
|
|
|
str += tmp; |
|
|
|
|
len += tmp; |
|
|
|
|
break; |
|
|
|
|
}
|
|
|
|
|
} |
|
|
|
|
case 'p': { /* Pointer */ |
|
|
|
|
width = 8; |
|
|
|
|
uint8_t tmp = __print_int(str, size-len,
|
|
|
|
|
uint8_t tmp = __print_int(str, size-len, |
|
|
|
|
va_arg(ap, unsigned long), |
|
|
|
|
16, 1, width); |
|
|
|
|
str += tmp; |
|
|
|
@ -201,7 +204,7 @@ int mcu_vsnprintf(char *str, size_t size, const char *format, va_list ap) |
|
|
|
|
16, 0, width); |
|
|
|
|
str += tmp; |
|
|
|
|
len += tmp; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (i+1 < MAC_ADDR_LEN) { |
|
|
|
|
*(str++) = ':'; |
|
|
|
|
len++; |
|
|
|
@ -234,7 +237,18 @@ int mcu_vsnprintf(char *str, size_t size, const char *format, va_list ap) |
|
|
|
|
len++; |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
}
|
|
|
|
|
} |
|
|
|
|
#ifdef WITH_FLOAT |
|
|
|
|
case 'f': { /* Floating point */ |
|
|
|
|
uint8_t tmp = __print_float(str, size-len, |
|
|
|
|
va_arg(ap, double), |
|
|
|
|
width, width); |
|
|
|
|
str += tmp; |
|
|
|
|
len += tmp; |
|
|
|
|
break; |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
#endif |
|
|
|
|
default: { |
|
|
|
|
// char *ptr = va_arg(ap, char *);
|
|
|
|
|
// XXX insert error into output?
|
|
|
|
|