From f96fe64b1ed0ffa7bd7c954de3e1b14104d5bac6 Mon Sep 17 00:00:00 2001 From: Rob Landley Date: Sat, 14 Jul 2012 00:59:32 -0500 Subject: Fill out od -c and -f. --- toys/od.c | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/toys/od.c b/toys/od.c index 7ac468e3..dfde4440 100644 --- a/toys/od.c +++ b/toys/od.c @@ -96,6 +96,7 @@ static void od_outline(void) t = types+i; while (jtype < 2) { @@ -108,19 +109,35 @@ static void od_outline(void) else if (c==127) strcpy(buf, "del"); else sprintf(buf, "%c", c); } else { - char *bfnrt = "\b\f\n\r\t", *s = strchr(bfnrt, c); - if (s) sprintf(buf, "\\%c", "bfnrt0"[s-bfnrt]); + char *bfnrtav = "\b\f\n\r\t\a\v", *s = strchr(bfnrtav, c); + if (s) sprintf(buf, "\\%c", "bfnrtav0"[s-bfnrtav]); + else if (c < 32 || c >= 127) sprintf(buf, "%03o", c); else { // TODO: this should be UTF8 aware. sprintf(buf, "%c", c); } } } else if (CFG_TOYBOX_FLOAT && t->type == 6) { - // TODO: floating point stuff + long double ld; + union {float f; double d; long double ld;} fdl; + + memcpy(&fdl, TT.buf+j, t->size); + j += t->size; + if (sizeof(float) == t->size) { + ld = fdl.f; + pad += (throw = 8)+7; + } else if (sizeof(double) == t->size) { + ld = fdl.d; + pad += (throw = 17)+8; + } else if (sizeof(long double) == t->size) { + ld = fdl.ld; + pad += (throw = 21)+9; + } else error_exit("bad -tf '%d'", t->size); + + sprintf(buf, "%.*Le", throw, ld); // Integer types } else { unsigned long long ll = 0, or; - int throw = 0; char *c[] = {"%*lld", "%*llu", "%0*llo", "%0*llx"}, *class = c[t->type-2]; -- cgit v1.2.3