SMOLNET PORTAL home about changes
ireading lines into a buffe - 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 b22b1b174646f828a28144c010961a9c57f54dbd	/scm/ploot/commit/b22b1b174646f828a28144c010961a9c57f54dbd.gph	bitreich.org	70
1parent 522bbe841ea86e232baf35ba638fe490cc763325	/scm/ploot/commit/522bbe841ea86e232baf35ba638fe490cc763325.gph	bitreich.org	70
hAuthor: Josuah Demangeon <mail@josuah.net>	URL:mailto:mail@josuah.net	bitreich.org	70
iDate:   Wed,  2 May 2018 01:12:56 +0200	Err	bitreich.org	70
i	Err	bitreich.org	70
ireading lines into a buffe	Err	bitreich.org	70
i	Err	bitreich.org	70
iDiffstat:	Err	bitreich.org	70
i  A config.h                            |       8 ++++++++	Err	bitreich.org	70
i  M ffplot.c                            |       2 +-	Err	bitreich.org	70
i  M main.c                              |     132 ++++++++++++++++++++++++++++---	Err	bitreich.org	70
i  M ploot.h                             |      11 ++++++++++-	Err	bitreich.org	70
i  A util.c                              |      21 +++++++++++++++++++++	Err	bitreich.org	70
i	Err	bitreich.org	70
i5 files changed, 162 insertions(+), 12 deletions(-)	Err	bitreich.org	70
i---	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,8 @@	Err	bitreich.org	70
i+ColorList colorlist[] = {	Err	bitreich.org	70
i+        { "red",    { 0xffff, 0x4444, 0x4444, 0xffff } },	Err	bitreich.org	70
i+        { "orange", { 0xffff, 0x9999, 0x4444, 0xffff } },	Err	bitreich.org	70
i+        { "yellow", { 0xffff, 0xffff, 0x4444, 0xffff } },	Err	bitreich.org	70
i+        { "green",  { 0x1111, 0xffff, 0x5555, 0xffff } },	Err	bitreich.org	70
i+        { "cyan",   { 0x0000, 0xffff, 0xdddd, 0xffff } },	Err	bitreich.org	70
i+        { NULL, { 0, 0, 0, 0 } }	Err	bitreich.org	70
i+};	Err	bitreich.org	70
1diff --git a/ffplot.c b/ffplot.c	/scm/ploot/file/ffplot.c.gph	bitreich.org	70
i@@ -193,7 +193,7 @@ legend(Canvas *can, Color *label_fg, Vlist *v, int n)	Err	bitreich.org	70
i                 ffdraw_str_left(can, &v->col, "\1", font, x, y);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i                 y += FONT_W * 2;	Err	bitreich.org	70
i-                ffdraw_str_left(can, label_fg, v->name, font, x, y);	Err	bitreich.org	70
i+                ffdraw_str_left(can, label_fg, v->label, font, x, y);	Err	bitreich.org	70
i         }	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
1diff --git a/main.c b/main.c	/scm/ploot/file/main.c.gph	bitreich.org	70
i@@ -2,9 +2,13 @@	Err	bitreich.org	70
i #include <stdlib.h>	Err	bitreich.org	70
i #include <stdio.h>	Err	bitreich.org	70
i #include <fcntl.h>	Err	bitreich.org	70
i+#include <limits.h>	Err	bitreich.org	70
i+#include <string.h>	Err	bitreich.org	70
i+#include <ctype.h>	Err	bitreich.org	70
i 	Err	bitreich.org	70
i #include "arg.h"	Err	bitreich.org	70
i #include "ploot.h"	Err	bitreich.org	70
i+#include "config.h"        /* after ploot.h for type definitions */	Err	bitreich.org	70
i 	Err	bitreich.org	70
i #define LEN(x) (sizeof(x) / sizeof(*x))	Err	bitreich.org	70
i 	Err	bitreich.org	70
i@@ -12,25 +16,132 @@ char *argv0;	Err	bitreich.org	70
i char *tflag = "";	Err	bitreich.org	70
i char *uflag = "";	Err	bitreich.org	70
i 	Err	bitreich.org	70
i+static int	Err	bitreich.org	70
i+color(Color *col, char *name)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        ColorList *c;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        for (c = colorlist; c->name != NULL; c++) {	Err	bitreich.org	70
i+                if (strcmp(name, c->name) == 0) {	Err	bitreich.org	70
i+                        memcpy(col, &c->col, sizeof(*col));	Err	bitreich.org	70
i+                        return 0;	Err	bitreich.org	70
i+                }	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        return -1;	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+void	Err	bitreich.org	70
i+estriplf(char *line)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        char *lf;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        if ((lf = strchr(line, '\n')) == NULL || lf[1] != '\0')	Err	bitreich.org	70
i+                fputs("invalid input\n", stderr), exit(1);	Err	bitreich.org	70
i+        *lf = '\0';	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i static void	Err	bitreich.org	70
i-usage(void)	Err	bitreich.org	70
i+read_labels(Vlist *v, char **argv, char *buf)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i-        fprintf(stderr, "usage: %s [-t title] [-u unit] label:color...\n", argv0);	Err	bitreich.org	70
i-        exit(1);	Err	bitreich.org	70
i+        if (fgets(buf, LINE_MAX, stdin) == NULL) {	Err	bitreich.org	70
i+                if (ferror(stdin))	Err	bitreich.org	70
i+                        perror("fread from stdin");	Err	bitreich.org	70
i+                else	Err	bitreich.org	70
i+                        fputs("missing label line\n", stderr);	Err	bitreich.org	70
i+                exit(1);	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+        estriplf(buf);	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        if (strcmp(strsep(&buf, ","), "epoch") != 0)	Err	bitreich.org	70
i+                fputs("first label must be \"epoch\"\n", stderr), exit(1);	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        for (; *argv != NULL; v++, argv++)	Err	bitreich.org	70
i+                if ((v->label = strsep(&buf, ",")) == NULL)	Err	bitreich.org	70
i+                        fputs("more arguments than columns\n", stderr), exit(1);	Err	bitreich.org	70
i+                else if (color(&v->col, *argv) == -1)	Err	bitreich.org	70
i+                        fprintf(stderr, "unknown color: %s\n", *argv), exit(1);	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        if (strsep(&buf, ",") != NULL)	Err	bitreich.org	70
i+                fputs("more columns than arguments\n", stderr), exit(1);	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+long	Err	bitreich.org	70
i+eatol(char *str)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        char *s;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        for (s = str; *s != '\0'; s++)	Err	bitreich.org	70
i+                if (!isdigit(*s))	Err	bitreich.org	70
i+                        fputs("invalid number format", stderr), exit(0);	Err	bitreich.org	70
i+        return atol(str);	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i void	Err	bitreich.org	70
i-read_labels(Vlist *v, int n)	Err	bitreich.org	70
i+add_value(double **v, int *bufsiz, int nval, char *field)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i-        (void)v;	Err	bitreich.org	70
i-        (void)n;	Err	bitreich.org	70
i+        if (nval >= *bufsiz) {	Err	bitreich.org	70
i+                *bufsiz *= 2;	Err	bitreich.org	70
i+                if ((*v = realloc(*v, *bufsiz)) == NULL)	Err	bitreich.org	70
i+                        perror("reallocating values buffer"), exit(1);	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+        (*v)[nval] = eatol(field);	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+/*	Err	bitreich.org	70
i+ * Add to each column the value on the current row.	Err	bitreich.org	70
i+ */	Err	bitreich.org	70
i+void	Err	bitreich.org	70
i+add_each_value(Vlist *v, int *bufsiz, int ncol, int nval, char *line)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        time_t epoch;	Err	bitreich.org	70
i+        int n;	Err	bitreich.org	70
i+        char *field;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        if ((field = strsep(&line, ",")) == NULL)	Err	bitreich.org	70
i+                fprintf(stderr, "%d: missing epoch\n", nval), exit(0);	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        epoch = eatol(field);	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        for (n = 0; (field = strsep(&line, ",")) != NULL; n++, v++) {	Err	bitreich.org	70
i+                if (n > ncol)	Err	bitreich.org	70
i+                        fprintf(stderr, "%d: too many fields\n", nval), exit(0);	Err	bitreich.org	70
i+                add_value(&v->v, bufsiz, nval, field);	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+        if (n < ncol)	Err	bitreich.org	70
i+                fprintf(stderr, "%d: too few fields\n", nval), exit(0);	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i+/*	Err	bitreich.org	70
i+ *       < ncol >	Err	bitreich.org	70
i+ * epoch,a1,b1,c1  ^	Err	bitreich.org	70
i+ * epoch,a2,b2,c2 nval	Err	bitreich.org	70
i+ * epoch,a3,b3,c3  v	Err	bitreich.org	70
i+ */	Err	bitreich.org	70
i void	Err	bitreich.org	70
i-read_values(Vlist *v, int n)	Err	bitreich.org	70
i+read_values(Vlist *v, int ncol)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i-        (void)v;	Err	bitreich.org	70
i-        (void)n;	Err	bitreich.org	70
i+        int n, nval, bufsiz;	Err	bitreich.org	70
i+        char line[LINE_MAX];	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        for (nval = 0; fgets(line, sizeof(line), stdin); nval++) {	Err	bitreich.org	70
i+                estriplf(line);	Err	bitreich.org	70
i+                add_each_value(v, &bufsiz, ncol, nval, line);	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+        for (n = 0; n < ncol; n++, v++)	Err	bitreich.org	70
i+                v->n = nval;	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+static void	Err	bitreich.org	70
i+usage(void)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        ColorList *c;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        fprintf(stderr, "usage: %s [-t title] [-u unit] color...\n"	Err	bitreich.org	70
i+                "available colors as defined by \"config.h\":\n", argv0);	Err	bitreich.org	70
i+        for (c = colorlist; c->name != NULL; c++)	Err	bitreich.org	70
i+                fprintf(stderr, "- %s\n", c->name);	Err	bitreich.org	70
i+        exit(1);	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i int	Err	bitreich.org	70
i@@ -39,6 +150,7 @@ main(int argc, char **argv)	Err	bitreich.org	70
i         Vlist *v;	Err	bitreich.org	70
i         double vmin, vmax, vstep;	Err	bitreich.org	70
i         time_t tmin, tmax, tstep;	Err	bitreich.org	70
i+        char labels[LINE_MAX];	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         ARGBEGIN {	Err	bitreich.org	70
i         case 't':	Err	bitreich.org	70
i@@ -55,7 +167,7 @@ main(int argc, char **argv)	Err	bitreich.org	70
i         vmin = -30; vmax =  700; vstep = 120;	Err	bitreich.org	70
i         tmin =   0; tmax = 2000; tstep = 300;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-        read_labels(v, argc);	Err	bitreich.org	70
i+        read_labels(v, argv, labels);	Err	bitreich.org	70
i         read_values(v, argc);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         ffdraw(tflag, uflag, v, argc,	Err	bitreich.org	70
1diff --git a/ploot.h b/ploot.h	/scm/ploot/file/ploot.h.gph	bitreich.org	70
i@@ -25,9 +25,14 @@ typedef struct {	Err	bitreich.org	70
i         time_t *t;        /* array of timestamps */	Err	bitreich.org	70
i         double *v;        /* array of values */	Err	bitreich.org	70
i         int n;                /* number of values */	Err	bitreich.org	70
i-        char *name;        /* for the legend */	Err	bitreich.org	70
i+        char *label;        /* for the legend */	Err	bitreich.org	70
i } Vlist;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i+typedef struct {	Err	bitreich.org	70
i+        char *name;	Err	bitreich.org	70
i+        Color col;	Err	bitreich.org	70
i+} ColorList;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i /* ffdraw.c */	Err	bitreich.org	70
i void                 ffdraw_pixel        (Canvas *, Color *, int, int);	Err	bitreich.org	70
i void                 ffdraw_rectangle(Canvas *, Color *, int, int, int, int);	Err	bitreich.org	70
i@@ -42,3 +47,7 @@ void                 ffdraw_print        (Canvas *);	Err	bitreich.org	70
i /* ffplot.c */	Err	bitreich.org	70
i void                 ffdraw                (char *, char *, Vlist *, int, double, double,	Err	bitreich.org	70
i                                  double, time_t, time_t, time_t);	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+/* util.c */	Err	bitreich.org	70
i+char                *strsep                (char **, const char *);	Err	bitreich.org	70
i+	Err	bitreich.org	70
1diff --git a/util.c b/util.c	/scm/ploot/file/util.c.gph	bitreich.org	70
i@@ -0,0 +1,21 @@	Err	bitreich.org	70
i+#include <string.h>	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+#include "ploot.h"	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+char *	Err	bitreich.org	70
i+strsep(char **strp, const char *sep)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        char        *s, *prev;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        if (*strp == NULL)	Err	bitreich.org	70
i+                return NULL;	Err	bitreich.org	70
i+        for (s = prev = *strp; strchr(sep, *s) == NULL; s++);	Err	bitreich.org	70
i+        if (*s == '\0') {	Err	bitreich.org	70
i+                *strp = NULL;	Err	bitreich.org	70
i+                return prev;	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+        *s = '\0';	Err	bitreich.org	70
i+        *strp = s + 1;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        return prev;	Err	bitreich.org	70
i+}	Err	bitreich.org	70
.
Response: text/plain
Original URLgopher://bitreich.org/0/scm/ploot/commit/b22b1b174646f828...
Content-Typetext/plain; charset=utf-8