URI: 
       humanize a number for the scale - ploot - simple plotting tools
  HTML git clone git://bitreich.org/ploot git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/ploot
   DIR Log
   DIR Files
   DIR Refs
   DIR Tags
   DIR README
   DIR LICENSE
       ---
   DIR commit 04a8bcf172e92e0f70bc889b5181bc3cbdb8f381
  HTML Author: Josuah Demangeon <mail@josuah.net>
       Date:   Fri,  2 Feb 2018 02:16:15 +0100
       
       humanize a number for the scale
       
       Diffstat:
         A .gitignore                          |       2 ++
         A Makefile                            |       4 ++++
         A plot                                |       0 
         A plot.c                              |      37 +++++++++++++++++++++++++++++++
       
       4 files changed, 43 insertions(+), 0 deletions(-)
       ---
   DIR diff --git a/.gitignore b/.gitignore
       @@ -0,0 +1,2 @@
       +*.o
       +./plot
   DIR diff --git a/Makefile b/Makefile
       @@ -0,0 +1,4 @@
       +CFLAGS        = -Wall -Wextra -Werror -std=c89 -pedantic
       +
       +all: plot.o
       +        ${CC} -o plot plot.o
   DIR diff --git a/plot b/plot
       Binary files differ.
   DIR diff --git a/plot.c b/plot.c
       @@ -0,0 +1,37 @@
       +#include <stdio.h>
       +
       +#define ABS(x)        ((x) < 0 ? -(x) : (x))
       +
       +/*
       + * Set `str' to a human-readable form of `num' with always a width of 8
       + * (including '\0' terminator).
       + */
       +void
       +humanize(double num, char *str, size_t len)
       +{
       +        int        exp;
       +        char        *label = " kMGTE", fmt[] = "%+.?f%c";
       +
       +        for (exp = 0; ABS(num) > 1000; exp += 3)
       +                num /= 1000;
       +
       +        fmt[3] = (ABS(num) < 10) ? '3' : (ABS(num) < 100) ? '2' : '1';
       +        if (exp == 0) {
       +                fmt[5] = '\0';
       +                fmt[3]++;
       +        }
       +        snprintf(str, len, fmt, num, label[exp / 3]);
       +        if (num > 0)
       +                str[0] = ' ';
       +}
       +
       +int
       +main()
       +{
       +        char        str[8];
       +
       +        humanize(-1 << 18, str, sizeof(str));
       +        printf("%s\n", str);
       +
       +        return 0;
       +}