iproperly implemented printf formatter hack - 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 ff9c6cc5c4e2b4e824f133564213ae493780d1bc /scm/ploot/commit/ff9c6cc5c4e2b4e824f133564213ae493780d1bc.gph bitreich.org 70
1parent 5aea0f435467bfbc052e1635ee3106a84f13372e /scm/ploot/commit/5aea0f435467bfbc052e1635ee3106a84f13372e.gph bitreich.org 70
hAuthor: Josuah Demangeon <mail@josuah.net> URL:mailto:mail@josuah.net bitreich.org 70
iDate: Fri, 2 Feb 2018 23:37:54 +0100 Err bitreich.org 70
i Err bitreich.org 70
iproperly implemented printf formatter hack Err bitreich.org 70
i Err bitreich.org 70
iDiffstat: Err bitreich.org 70
i D ploot | 0 Err bitreich.org 70
i M ploot.c | 82 +++++++++++++++++++++---------- Err bitreich.org 70
i Err bitreich.org 70
i2 files changed, 55 insertions(+), 27 deletions(-) Err bitreich.org 70
i--- 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@@ -1,9 +1,12 @@ Err bitreich.org 70
i #include <stdio.h> Err bitreich.org 70
i #include <string.h> Err bitreich.org 70
i+#include <sys/time.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+#define MAX_VAL 80 Err bitreich.org 70
i+#define MARGIN 7 Err bitreich.org 70
i+#define HEIGHT 20 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@@ -16,18 +19,16 @@ 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+ int exp, precision; Err bitreich.org 70
i+ char *label = "\0kMGTE"; 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+ precision = (ABS(val) < 10) ? 3 : (ABS(val) < 100) ? 2 : 1; Err bitreich.org 70
i+ if (exp == 0) Err bitreich.org 70
i+ precision++; Err bitreich.org 70
i+ snprintf(str, 8, "%+.*f%c", precision, 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@@ -70,9 +71,9 @@ vaxis(double val, int pos) 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+ printf("%*s -", MARGIN, label); Err bitreich.org 70
i } else { Err bitreich.org 70
i- printf(" "); Err bitreich.org 70
i+ printf("%*c ", MARGIN, ' '); Err bitreich.org 70
i } Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i@@ -82,7 +83,7 @@ vaxis(double val, int pos) 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+ printf("%*d -+", MARGIN, 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@@ -125,26 +126,53 @@ plot(int height, double *beg, double *end, char *str) 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+ * Read a simple format with one double per line and save the last `MAX_WIDTH' Err bitreich.org 70
i+ * values into `buf' which must be at least MAX_VAL wide and return a pointer Err bitreich.org 70
i+ * to the last element or NULL if the input contains error. Err bitreich.org 70
i+ */ Err bitreich.org 70
i+double * Err bitreich.org 70
i+read_simple(double buf[MAX_VAL]) Err bitreich.org 70
i { Err bitreich.org 70
i- ; Err bitreich.org 70
i+ /* ring buffer to read input continuously */ Err bitreich.org 70
i+ double val_rbuf[MAX_VAL]; Err bitreich.org 70
i+ Err bitreich.org 70
i+ (void)val_rbuf; Err bitreich.org 70
i+ Err bitreich.org 70
i+ return buf; Err bitreich.org 70
i+} Err bitreich.org 70
i+ Err bitreich.org 70
i+/* Err bitreich.org 70
i+ * Read a format with blank-separated time_t-double pairs, one per line and save Err bitreich.org 70
i+ * the last `MAX_WIDTH' values into `timev' and `valv' which must both be at Err bitreich.org 70
i+ * least MAX_VAL wide and return a pointer to the last element or NULL if the Err bitreich.org 70
i+ * input contains error. Err bitreich.org 70
i+ */ Err bitreich.org 70
i+double * Err bitreich.org 70
i+read_time_series(double *valv, time_t *timev) Err bitreich.org 70
i+{ Err bitreich.org 70
i+ /* ring buffers to read input continuously */ Err bitreich.org 70
i+ time_t time_rbuf[MAX_VAL]; Err bitreich.org 70
i+ double val_rbuf[MAX_VAL]; Err bitreich.org 70
i+ Err bitreich.org 70
i+ (void)time_rbuf; Err bitreich.org 70
i+ (void)val_rbuf; Err bitreich.org 70
i+ (void)timev; Err bitreich.org 70
i+ Err bitreich.org 70
i+ return valv; 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), "Sample data entered by hand"); Err bitreich.org 70
i+ double val[] = { 55, 55, 1, 72, 53, 73, 6, 45, 7, 71, 18, 100, 78, 56, Err bitreich.org 70
i+ 53, 24, 99, 99, 37, 91, 67, 68, 9, 16, 83, 30, 68, 51, 38, 47, 91, Err bitreich.org 70
i+ 35, 73, 36, 52, 99, 19, 91, 89, 7, 40, 88, 75, 50, 92, 91, 23, 54, Err bitreich.org 70
i+ 90, 98, 91, 94, 10, 39, 55, 71, 44, 77, 48, 74, 66, 53, 81, 85, 44, Err bitreich.org 70
i+ 71, 84, 93, 8, 50, 77, 16, 57, 68, 52, 82, 36, 7, 13, 10, 7, 95, 64, Err bitreich.org 70
i+ 71, 61, 12, 29, 63, 85, 72, 98, 59, 96, 91, 67, 24, 48, 4, 90, 1, Err bitreich.org 70
i+ 15, 57, 11, 93, 18, 18, 78, 85, 36, 35, 15, 7, 85, 31, 73, 57, 70 }; Err bitreich.org 70
i+ Err bitreich.org 70
i+ plot(HEIGHT, val, val + LEN(val), "Sample data generated with jot"); Err bitreich.org 70
i return 0; Err bitreich.org 70
i } Err bitreich.org 70
.
Response:
text/plain