iadjust vaxis - 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 ebc69990bb78af4e042f28bff9198d6f9445f657 /scm/ploot/commit/ebc69990bb78af4e042f28bff9198d6f9445f657.gph bitreich.org 70
1parent 8112f382b3e9104289ade9cae2d777ab4d68ea1b /scm/ploot/commit/8112f382b3e9104289ade9cae2d777ab4d68ea1b.gph bitreich.org 70
hAuthor: Josuah Demangeon <mail@josuah.net> URL:mailto:mail@josuah.net bitreich.org 70
iDate: Fri, 2 Feb 2018 22:55:31 +0100 Err bitreich.org 70
i Err bitreich.org 70
iadjust vaxis Err bitreich.org 70
i Err bitreich.org 70
iDiffstat: Err bitreich.org 70
i M Makefile | 4 ++-- Err bitreich.org 70
i A ploot | 0 Err bitreich.org 70
i A ploot.c | 150 +++++++++++++++++++++++++++++++ Err bitreich.org 70
i D plot | 0 Err bitreich.org 70
i D plot.c | 89 ------------------------------- Err bitreich.org 70
i Err bitreich.org 70
i5 files changed, 152 insertions(+), 91 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 config.h Err bitreich.org 70
i- ${CC} -o plot plot.o Err bitreich.org 70
i+all: ploot.o config.h Err bitreich.org 70
i+ ${CC} -o ploot ploot.o Err bitreich.org 70
1diff --git a/ploot b/ploot /scm/ploot/file/ploot.gph bitreich.org 70
iBinary files differ. Err bitreich.org 70
1diff --git a/ploot.c b/ploot.c /scm/ploot/file/ploot.c.gph bitreich.org 70
i@@ -0,0 +1,150 @@ Err bitreich.org 70
i+#include <stdio.h> Err bitreich.org 70
i+#include <string.h> Err bitreich.org 70
i+ Err bitreich.org 70
i+#include "config.h" Err bitreich.org 70
i+ Err bitreich.org 70
i+#define MARGIN 9 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 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(char *str, double val) 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(val) > 1000; exp++) Err bitreich.org 70
i+ val /= 1000; Err bitreich.org 70
i+ Err bitreich.org 70
i+ fmt[3] = (ABS(val) < 10) ? '3' : (ABS(val) < 100) ? '2' : '1'; Err bitreich.org 70
i+ if (exp == 0) { 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, 8, fmt, val, label[exp]); Err bitreich.org 70
i+ if (val >= 0) Err bitreich.org 70
i+ str[0] = ' '; 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+ double *val, max; Err bitreich.org 70
i+ 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+ * If not null, print the title `str' centered on width. Err bitreich.org 70
i+ */ Err bitreich.org 70
i+void Err bitreich.org 70
i+title(char *str, int width) Err bitreich.org 70
i+{ Err bitreich.org 70
i+ if (str == NULL) Err bitreich.org 70
i+ return; Err bitreich.org 70
i+ printf("%*s\n\n", (int)(width - strlen(str)) / 2 + MARGIN, str); Err bitreich.org 70
i+} Err bitreich.org 70
i+ Err bitreich.org 70
i+/* Err bitreich.org 70
i+ * Print vertical axis with humanized number from time to time, with occurences Err bitreich.org 70
i+ * determined after the position on the vertical axis from the bottom `pos'. Err bitreich.org 70
i+ */ Err bitreich.org 70
i+void Err bitreich.org 70
i+vaxis(double val, int pos) Err bitreich.org 70
i+{ Err bitreich.org 70
i+ char label[8]; Err bitreich.org 70
i+ Err bitreich.org 70
i+ if (pos % 4 == 0) { Err bitreich.org 70
i+ humanize(label, val); Err bitreich.org 70
i+ printf("%s -", label); Err bitreich.org 70
i+ } else { Err bitreich.org 70
i+ printf(" "); Err bitreich.org 70
i+ } Err bitreich.org 70
i+} Err bitreich.org 70
i+ Err bitreich.org 70
i+/* Err bitreich.org 70
i+ * Print horizontal axis for up to `col' values. Err bitreich.org 70
i+ */ Err bitreich.org 70
i+void Err bitreich.org 70
i+haxis(int col) Err bitreich.org 70
i+{ Err bitreich.org 70
i+ printf("%*d -+", MARGIN - 2, 0); Err bitreich.org 70
i+ while (col-- > 0) Err bitreich.org 70
i+ putchar('-'); 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+ * 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+ putchar('|'); 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+ putchar('\n'); 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+ * If `str' is not NULL, it is set as a title above the graph. Err bitreich.org 70
i+ */ Err bitreich.org 70
i+void Err bitreich.org 70
i+plot(int height, double *beg, double *end, char *str) 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+ title(str, end - beg); Err bitreich.org 70
i+ Err bitreich.org 70
i+ max = maxdv(beg, end); 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+ Err bitreich.org 70
i+ vaxis(top, h); Err bitreich.org 70
i+ line(beg, end, top, bot); Err bitreich.org 70
i+ } Err bitreich.org 70
i+ haxis(end - beg); Err bitreich.org 70
i+} Err bitreich.org 70
i+ Err bitreich.org 70
i+void Err bitreich.org 70
i+read_simple() Err bitreich.org 70
i+{ 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[] = { 1000, 3030, 3000, 2456, 3005, 3000, 1031, 2000, 3345, Err bitreich.org 70
i+ 1000, 1833, 2452, 432, 1456, 435, 1646, 435, 1345, 554, 5245, 3456, Err bitreich.org 70
i+ 1000, 1833, 2452, 432, 1456, 435, 1646, 435, 1345, 554, 5245, 3456, Err bitreich.org 70
i+ 1000, 1833, 2452, 432, 1456, 435, 1646, 435, 1345, 554, 5245, 3456, Err bitreich.org 70
i+ 5000, 3444, 1034, 1833, 2452, 2555, 432, 2456, 435, 1646, 435, 346, Err bitreich.org 70
i+ 1000, 1833, 2452, 432, 1456, 435, 1646, 435, 1345, 554, 5245, 3456, Err bitreich.org 70
i+ 1000, 1833, 2452, 432, 1456, 435, 1646, 435, 1345, 554, 5245, 3456, Err bitreich.org 70
i+ 1833, 2452, 1456, 435, 435, 554, 5456, 1034, 2452, 432, 1435, 1646, Err bitreich.org 70
i+ 1000, 1833, 2452, 432, 1456, 435, 1646, 435, 1345, 554, 5245, 3456, Err bitreich.org 70
i+ 1456, 3498, 834, 834, 804, 234, 544, 3456, 2984, 983, 2583, 2583 }; Err bitreich.org 70
i+ Err bitreich.org 70
i+ plot(30, val, val + LEN(val), "title"); Err bitreich.org 70
i+ return 0; Err bitreich.org 70
i+} 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,89 +0,0 @@ Err bitreich.org 70
i-#include <stdio.h> Err bitreich.org 70
i-#include <string.h> 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 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(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++) 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- if (exp == 0) { 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, 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-/* 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- double *val, max; Err bitreich.org 70
i- 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
.
Response:
text/plain