diff options
author | Franklin Wei <git@fwei.tk> | 2017-09-29 16:54:31 -0400 |
---|---|---|
committer | Franklin Wei <git@fwei.tk> | 2017-12-23 20:55:02 -0500 |
commit | 01c6dcf6c7b9bb1ad2fa0450f99bacc5f3d3e04b (patch) | |
tree | 28064ac51c2c150bb33a3f0f53db3771fc54fd3a | |
parent | a8423321b802bff39fe2ba22f2b0a26220a57535 (diff) | |
download | rockbox-01c6dcf6c7b9bb1ad2fa0450f99bacc5f3d3e04b.tar.gz rockbox-01c6dcf6c7b9bb1ad2fa0450f99bacc5f3d3e04b.zip |
Support floating-point formatting
This is just a quick and dirty way to get %f formatting to work for
some games. It works.
Change-Id: I75585e0c6a0f9d6db41a87b71ca405b067d8b85d
-rw-r--r-- | firmware/common/vuprintf.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/firmware/common/vuprintf.c b/firmware/common/vuprintf.c index c32b690cf8..1c0adad00e 100644 --- a/firmware/common/vuprintf.c +++ b/firmware/common/vuprintf.c | |||
@@ -524,6 +524,18 @@ static inline const char * format_p(const void *p, | |||
524 | } | 524 | } |
525 | #endif /* FMT_RADIX_p */ | 525 | #endif /* FMT_RADIX_p */ |
526 | 526 | ||
527 | #undef ABS | ||
528 | #define ABS(x) ((x)<0?-(x):(x)) | ||
529 | |||
530 | static const char * format_f(double f, | ||
531 | struct fmt_buf *fmt_buf, | ||
532 | int radixchar, | ||
533 | bool *numericp) | ||
534 | { | ||
535 | fmt_buf->length = snprintf(fmt_buf->buf, 24, "%d.%06d", (int)f, ABS((int)((f - (int)f)*1e6))); | ||
536 | return fmt_buf->buf; | ||
537 | } | ||
538 | |||
527 | /* parse fixed width or precision field */ | 539 | /* parse fixed width or precision field */ |
528 | static const char * parse_number_spec(const char *fmt, | 540 | static const char * parse_number_spec(const char *fmt, |
529 | int ch, | 541 | int ch, |
@@ -741,6 +753,12 @@ int vuprintf(vuprintf_push_cb push, /* call 'push()' for each output letter */ | |||
741 | break; | 753 | break; |
742 | #endif | 754 | #endif |
743 | 755 | ||
756 | case 'f': | ||
757 | case 'g': | ||
758 | buf = format_f(va_arg(ap, double), &fmt_buf, ch, | ||
759 | &numeric); | ||
760 | break; | ||
761 | |||
744 | /** signed integer **/ | 762 | /** signed integer **/ |
745 | case 'd': | 763 | case 'd': |
746 | case 'i': | 764 | case 'i': |