idrawing dots - ploot - simple plotting tools Err bitreich.org 70 hgit clone git://bitreich.org/ploot git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/ploot URL:git://bitreich.org/ploot git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/ploot bitreich.org 70 1Log /scm/ploot/log.gph bitreich.org 70 1Files /scm/ploot/files.gph bitreich.org 70 1Refs /scm/ploot/refs.gph bitreich.org 70 1Tags /scm/ploot/tag bitreich.org 70 1README /scm/ploot/file/README.md.gph bitreich.org 70 1LICENSE /scm/ploot/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 1commit 8112f382b3e9104289ade9cae2d777ab4d68ea1b /scm/ploot/commit/8112f382b3e9104289ade9cae2d777ab4d68ea1b.gph bitreich.org 70 1parent 04a8bcf172e92e0f70bc889b5181bc3cbdb8f381 /scm/ploot/commit/04a8bcf172e92e0f70bc889b5181bc3cbdb8f381.gph bitreich.org 70 hAuthor: Josuah Demangeon URL:mailto:mail@josuah.net bitreich.org 70 iDate: Fri, 2 Feb 2018 21:05:01 +0100 Err bitreich.org 70 i Err bitreich.org 70 idrawing dots Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M Makefile | 2 +- Err bitreich.org 70 i A config.h | 2 ++ Err bitreich.org 70 i M plot | 0 Err bitreich.org 70 i M plot.c | 74 ++++++++++++++++++++++++++----- Err bitreich.org 70 i Err bitreich.org 70 i4 files changed, 66 insertions(+), 12 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/Makefile b/Makefile /scm/ploot/file/Makefile.gph bitreich.org 70 i@@ -1,4 +1,4 @@ Err bitreich.org 70 i CFLAGS = -Wall -Wextra -Werror -std=c89 -pedantic Err bitreich.org 70 i Err bitreich.org 70 i-all: plot.o Err bitreich.org 70 i+all: plot.o config.h Err bitreich.org 70 i ${CC} -o plot plot.o Err bitreich.org 70 1diff --git a/config.h b/config.h /scm/ploot/file/config.h.gph bitreich.org 70 i@@ -0,0 +1,2 @@ Err bitreich.org 70 i+#define MAX_WIDTH 80 Err bitreich.org 70 i+#define MAX_HEIGHT 20 Err bitreich.org 70 1diff --git a/plot b/plot /scm/ploot/file/plot.gph bitreich.org 70 iBinary files differ. Err bitreich.org 70 1diff --git a/plot.c b/plot.c /scm/ploot/file/plot.c.gph bitreich.org 70 i@@ -1,18 +1,23 @@ Err bitreich.org 70 i #include Err bitreich.org 70 i+#include Err bitreich.org 70 i+ Err bitreich.org 70 i+#include "config.h" Err bitreich.org 70 i Err bitreich.org 70 i #define ABS(x) ((x) < 0 ? -(x) : (x)) Err bitreich.org 70 i+#define LEN(x) (sizeof(x) / sizeof(*x)) Err bitreich.org 70 i Err bitreich.org 70 i /* Err bitreich.org 70 i- * Set `str' to a human-readable form of `num' with always a width of 8 Err bitreich.org 70 i- * (including '\0' terminator). Err bitreich.org 70 i+ * Set `str' to a human-readable form of `num' with always a width of 7 (+ 1 Err bitreich.org 70 i+ * the '\0' terminator). Buffer overflow is ensured not to happen due to the Err bitreich.org 70 i+ * max size of a double. Err bitreich.org 70 i */ Err bitreich.org 70 i void Err bitreich.org 70 i-humanize(double num, char *str, size_t len) Err bitreich.org 70 i+humanize(char *str, double num) Err bitreich.org 70 i { Err bitreich.org 70 i int exp; Err bitreich.org 70 i char *label = " kMGTE", fmt[] = "%+.?f%c"; Err bitreich.org 70 i Err bitreich.org 70 i- for (exp = 0; ABS(num) > 1000; exp += 3) Err bitreich.org 70 i+ for (exp = 0; ABS(num) > 1000; exp++) Err bitreich.org 70 i num /= 1000; Err bitreich.org 70 i Err bitreich.org 70 i fmt[3] = (ABS(num) < 10) ? '3' : (ABS(num) < 100) ? '2' : '1'; Err bitreich.org 70 i@@ -20,18 +25,65 @@ humanize(double num, char *str, size_t len) Err bitreich.org 70 i fmt[5] = '\0'; Err bitreich.org 70 i fmt[3]++; Err bitreich.org 70 i } Err bitreich.org 70 i- snprintf(str, len, fmt, num, label[exp / 3]); Err bitreich.org 70 i- if (num > 0) Err bitreich.org 70 i+ snprintf(str, 8, fmt, num, label[exp]); Err bitreich.org 70 i+ if (num >= 0) Err bitreich.org 70 i str[0] = ' '; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i-int Err bitreich.org 70 i-main() Err bitreich.org 70 i+/* Err bitreich.org 70 i+ * Print two rows of a plot into a single line using ' ', '.' and ':'. Err bitreich.org 70 i+ */ Err bitreich.org 70 i+void Err bitreich.org 70 i+line(double *beg, double *end, double top, double bot) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ double *val; Err bitreich.org 70 i+ Err bitreich.org 70 i+ for (val = beg; val <= end; val++) Err bitreich.org 70 i+ putchar((*val < bot) ? ' ' : (*val < top) ? '.' : ':'); Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i+/* Err bitreich.org 70 i+ * Returns the maximal double of values between `beg' and `end'. Err bitreich.org 70 i+ */ Err bitreich.org 70 i+double Err bitreich.org 70 i+maxdv(double *beg, double *end) Err bitreich.org 70 i { Err bitreich.org 70 i- char str[8]; Err bitreich.org 70 i+ double *val, max; Err bitreich.org 70 i Err bitreich.org 70 i- humanize(-1 << 18, str, sizeof(str)); Err bitreich.org 70 i- printf("%s\n", str); Err bitreich.org 70 i+ max = *beg; Err bitreich.org 70 i+ for (val = beg; val < end; val++) { Err bitreich.org 70 i+ if (*val > max) Err bitreich.org 70 i+ max = *val; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ return max; Err bitreich.org 70 i+} Err bitreich.org 70 i Err bitreich.org 70 i+/* Err bitreich.org 70 i+ * Plot values between `beg' and `end' in a plot of height `height'. Err bitreich.org 70 i+ */ Err bitreich.org 70 i+void Err bitreich.org 70 i+plot(int height, double *beg, double *end) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ double top, bot, max; Err bitreich.org 70 i+ int h; Err bitreich.org 70 i+/* Err bitreich.org 70 i+ char label[8]; Err bitreich.org 70 i+*/ Err bitreich.org 70 i+ Err bitreich.org 70 i+ max = maxdv(beg, end); Err bitreich.org 70 i+ Err bitreich.org 70 i+ for (h = height + height % 2; h > 0; h -= 2) { Err bitreich.org 70 i+ top = h * max / height; Err bitreich.org 70 i+ bot = (h - 1) * max / height; Err bitreich.org 70 i+ line(beg, end, top, bot); Err bitreich.org 70 i+ putchar('\n'); Err bitreich.org 70 i+ } Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i+int Err bitreich.org 70 i+main() Err bitreich.org 70 i+{ Err bitreich.org 70 i+ double val[] = { 0.0, 0.4, 3.4, 2.1, 3.5, 3.0, 1.1, 2.0 } ; Err bitreich.org 70 i+ plot(10, val, val + LEN(val)); Err bitreich.org 70 i return 0; Err bitreich.org 70 i } Err bitreich.org 70 .