X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=progs%2Fdump_entry.c;h=dad3135f4fceec9ccca61e11c2de045ac8aaa138;hp=d48016e4813003f51f9494282dfcbec479612432;hb=d62b54c082a8564aa0c715cddadb1160498b057f;hpb=5e1e572b71ae31a6071daa24e2460a68a6f1003c diff --git a/progs/dump_entry.c b/progs/dump_entry.c index d48016e4..dad3135f 100644 --- a/progs/dump_entry.c +++ b/progs/dump_entry.c @@ -39,7 +39,7 @@ #include "termsort.c" /* this C file is generated */ #include /* so is this */ -MODULE_ID("$Id: dump_entry.c,v 1.150 2017/04/05 09:27:40 tom Exp $") +MODULE_ID("$Id: dump_entry.c,v 1.152 2017/05/06 18:56:15 tom Exp $") #define DISCARD(string) string = ABSENT_STRING #define PRINTF (void) printf @@ -796,6 +796,28 @@ fmt_complex(TERMTYPE2 *tterm, const char *capability, char *src, int level) return src; } +/* + * Make "large" numbers a little easier to read by showing them in hexadecimal + * if they are "close" to a power of two. + */ +static const char * +number_format(int value) +{ + const char *result = "%d"; + if ((outform != F_TERMCAP) && (value > 255)) { + unsigned long lv = (unsigned long) value; + unsigned long mm; + int nn; + for (nn = 8; (mm = (1UL << nn)) != 0; ++nn) { + if ((mm - 16) <= lv && (mm + 16) > lv) { + result = "%#x"; + break; + } + } + } + return result; +} + #define SAME_CAP(n,cap) (&tterm->Strings[n] == &cap) #define EXTRA_CAP 20 @@ -892,8 +914,13 @@ fmt_entry(TERMTYPE2 *tterm, _nc_SPRINTF(buffer, _nc_SLIMIT(sizeof(buffer)) "%s@", name); } else { + size_t nn; _nc_SPRINTF(buffer, _nc_SLIMIT(sizeof(buffer)) - "%s#%d", name, tterm->Numbers[i]); + "%s#", name); + nn = strlen(buffer); + _nc_SPRINTF(buffer + nn, _nc_SLIMIT(sizeof(buffer) - nn) + number_format(tterm->Numbers[i]), + tterm->Numbers[i]); if (i + 1 > num_values) num_values = i + 1; }