SMOLNET PORTAL home about changes
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
Original URLgopher://bitreich.org/0/scm/ploot/commit/ff9c6cc5c4e2b4e8...
Content-Typetext/plain; charset=utf-8