SMOLNET PORTAL home about changes
imake plootxt draw an empty grid - 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 97913fd518557ed58a07f52204fef1271af2bb32	/scm/ploot/commit/97913fd518557ed58a07f52204fef1271af2bb32.gph	bitreich.org	70
1parent 817580dbf249b75e747cc81f56f930d80600c59e	/scm/ploot/commit/817580dbf249b75e747cc81f56f930d80600c59e.gph	bitreich.org	70
hAuthor: Josuah Demangeon <mail@josuah.net>	URL:mailto:mail@josuah.net	bitreich.org	70
iDate:   Mon,  7 May 2018 01:10:39 +0200	Err	bitreich.org	70
i	Err	bitreich.org	70
imake plootxt draw an empty grid	Err	bitreich.org	70
i	Err	bitreich.org	70
iDiffstat:	Err	bitreich.org	70
i  M ploot.c                             |       2 ++	Err	bitreich.org	70
i  M plootxt.c                           |     199 +++++++++++++++++++------------	Err	bitreich.org	70
i  A test.csv                            |      30 ++++++++++++++++++++++++++++++	Err	bitreich.org	70
i	Err	bitreich.org	70
i3 files changed, 157 insertions(+), 74 deletions(-)	Err	bitreich.org	70
i---	Err	bitreich.org	70
1diff --git a/ploot.c b/ploot.c	/scm/ploot/file/ploot.c.gph	bitreich.org	70
i@@ -110,6 +110,8 @@ read_values(Vlist *v, int ncol)	Err	bitreich.org	70
i         bufsize = 0;	Err	bitreich.org	70
i         for (nval = 0; esfgets(line, sizeof(line), stdin) != NULL; nval++)	Err	bitreich.org	70
i                 bufsize = add_row(v, bufsize, ncol, nval, line);	Err	bitreich.org	70
i+        if (nval == 0)	Err	bitreich.org	70
i+                fputs("no value could be read\n", stderr), exit(1);	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i static void	Err	bitreich.org	70
1diff --git a/plootxt.c b/plootxt.c	/scm/ploot/file/plootxt.c.gph	bitreich.org	70
i@@ -12,72 +12,46 @@	Err	bitreich.org	70
i #define LEN(x) (sizeof(x) / sizeof(*x))	Err	bitreich.org	70
i 	Err	bitreich.org	70
i #define WIDTH_MAX 1024	Err	bitreich.org	70
i+#define BRAILLE_START        10240	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-int screenwidth = 80;	Err	bitreich.org	70
i+int wflag = 80;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i char *argv0;	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-        fprintf(stderr, "usage: %s <csv\n", argv0);	Err	bitreich.org	70
i-        exit(1);	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-void	Err	bitreich.org	70
i-fmt_labels(char out[LINE_MAX], int ncol, char *labels[LINE_MAX / 2])	Err	bitreich.org	70
i-{	Err	bitreich.org	70
i-        int i, w;	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        w = screenwidth / ncol;	Err	bitreich.org	70
i-        for (i = 0; i < ncol; labels++, i++)	Err	bitreich.org	70
i-                out += snprintf(out, w - 1, " %.*s", w - 1, *labels);	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i /*	Err	bitreich.org	70
i- * Label must be able to store all pointers to token buf has to	Err	bitreich.org	70
i- * offer: sizeof(*buf / 2).	Err	bitreich.org	70
i+ * Turn the bit at position (row, col) on in the .	Err	bitreich.org	70
i  */	Err	bitreich.org	70
i-static int	Err	bitreich.org	70
i-read_labels(char out[LINE_MAX])	Err	bitreich.org	70
i+static void	Err	bitreich.org	70
i+plot_dot(long *out, int row, int col)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i-        int ncol;	Err	bitreich.org	70
i-        char *l, line[LINE_MAX], *labels[LINE_MAX / 2], *tok;	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        l = line;	Err	bitreich.org	70
i-        if (esfgets(line, LINE_MAX, stdin) == NULL)	Err	bitreich.org	70
i-                fputs("missing label line\n", stderr), exit(1);	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        if (strcmp(strsep(&l, ","), "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 (ncol = 1; (tok = strsep(&l, ",")) != NULL; ncol++)	Err	bitreich.org	70
i-                *labels = tok;	Err	bitreich.org	70
i-        *labels = NULL;	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        if (ncol < 2)	Err	bitreich.org	70
i-                fputs("no label found\n", stderr), exit(1);	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        fmt_labels(out, ncol, labels);	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        return ncol;	Err	bitreich.org	70
i+        long flags[4][2] = {	Err	bitreich.org	70
i+                { 0x01, 0x08 },	Err	bitreich.org	70
i+                { 0x02, 0x10 },	Err	bitreich.org	70
i+                { 0x04, 0x20 },	Err	bitreich.org	70
i+                { 0x40, 0x80 },	Err	bitreich.org	70
i+        }, f;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        f = flags[row][col];	Err	bitreich.org	70
i+        puts("."), fflush(stdout);	Err	bitreich.org	70
i+        *out |= f;	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-void	Err	bitreich.org	70
i-plot_val(char *out, double val, int nrow, int width)	Err	bitreich.org	70
i+static void	Err	bitreich.org	70
i+plot_val(long *out, double val, double max, int row, int width)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i-        (void)val;	Err	bitreich.org	70
i-        (void)out;	Err	bitreich.org	70
i-        (void)nrow;	Err	bitreich.org	70
i-        (void)width;	Err	bitreich.org	70
i+        int col;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        col = (int)((double)(val * width * 2) / max);	Err	bitreich.org	70
i+        for (; col > 0; out++, col--)	Err	bitreich.org	70
i+                plot_dot(out + col / 2, row, col % 2);	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i /*	Err	bitreich.org	70
i  * Change the braille characters on a whole row, this for all the	Err	bitreich.org	70
i  * values line.	Err	bitreich.org	70
i  */	Err	bitreich.org	70
i-time_t	Err	bitreich.org	70
i-plot_row(char *out, char *line, int nrow, int ncol, int width)	Err	bitreich.org	70
i+static time_t	Err	bitreich.org	70
i+plot_row(long *out, char *line, double *max, int nrow, int ncol, int width)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i         time_t epoch;	Err	bitreich.org	70
i         double val;	Err	bitreich.org	70
i@@ -88,11 +62,11 @@ plot_row(char *out, char *line, int nrow, int ncol, int width)	Err	bitreich.org	70
i                 fputs("*** missing epoch value\n", stderr), exit(1);	Err	bitreich.org	70
i         epoch = eatol(tok);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-        for (n = 1; (tok = strsep(&line, ",")) != NULL; n++) {	Err	bitreich.org	70
i+        for (n = 0; (tok = strsep(&line, ",")) != NULL; n++) {	Err	bitreich.org	70
i                 if (n >= ncol)	Err	bitreich.org	70
i                         fputs("too many values\n", stderr), exit(1);	Err	bitreich.org	70
i                 val = eatof(tok);	Err	bitreich.org	70
i-                plot_val(out + n * width, nrow, val, width);	Err	bitreich.org	70
i+                plot_val(out + n * width, max[n - 1], nrow, val, width);	Err	bitreich.org	70
i         }	Err	bitreich.org	70
i         if (n < ncol)	Err	bitreich.org	70
i                 fputs("not enough values\n", stderr), exit(1);	Err	bitreich.org	70
i@@ -103,23 +77,27 @@ plot_row(char *out, char *line, int nrow, int ncol, int width)	Err	bitreich.org	70
i /*	Err	bitreich.org	70
i  * Read enough input in order to print one line and plot it into 'out'.	Err	bitreich.org	70
i  */	Err	bitreich.org	70
i-time_t	Err	bitreich.org	70
i-plot_line(char *out, int ncol, int width)	Err	bitreich.org	70
i+static time_t	Err	bitreich.org	70
i+plot_line(long *out, double *max, int ncol, int width)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i         time_t epoch;	Err	bitreich.org	70
i-        int nrow;	Err	bitreich.org	70
i+        int n, nrow;	Err	bitreich.org	70
i+        long *o, rune;	Err	bitreich.org	70
i         char line[LINE_MAX];	Err	bitreich.org	70
i 	Err	bitreich.org	70
i+        for (rune = BRAILLE_START, o = out, n = ncol * width; n > 0; o++, n--)	Err	bitreich.org	70
i+                memcpy(o, &rune, sizeof(rune));	Err	bitreich.org	70
i+        *o = '\0';	Err	bitreich.org	70
i         for (nrow = 0; nrow < 4; nrow++) {	Err	bitreich.org	70
i                 if ((esfgets(line, LINE_MAX, stdin)) == NULL)	Err	bitreich.org	70
i                         exit(0);	Err	bitreich.org	70
i-                epoch = plot_row(out, line, nrow, ncol, width);	Err	bitreich.org	70
i+                epoch = plot_row(out, line, max, nrow, ncol, width);	Err	bitreich.org	70
i         }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         return epoch;	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-void	Err	bitreich.org	70
i+static void	Err	bitreich.org	70
i put_time(time_t epoch, time_t last, int nline)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i         char *out, buf[sizeof("XXxXXxXX  |")];	Err	bitreich.org	70
i@@ -141,48 +119,121 @@ put_time(time_t epoch, time_t last, int nline)	Err	bitreich.org	70
i         fputs(out, stdout);	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-void	Err	bitreich.org	70
i-plot(char labels[LINE_MAX], int ncol)	Err	bitreich.org	70
i+static void	Err	bitreich.org	70
i+print_utf8_3bytes(long rune)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        putchar((char)(0xe0 | (0x0f & (rune >> 12))));        /* 1110xxxx */	Err	bitreich.org	70
i+        putchar((char)(0x80 | (0x3f & (rune >> 6))));        /* 10xxxxxx */	Err	bitreich.org	70
i+        putchar((char)(0x80 | (0x3f & (rune))));        /* 10xxxxxx */	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+static void	Err	bitreich.org	70
i+put_line(long *out)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        for (; *out != '\0'; out++)	Err	bitreich.org	70
i+                print_utf8_3bytes(*out);	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+static void	Err	bitreich.org	70
i+plot(char labels[LINE_MAX], double *max, int ncol)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i         time_t epoch, last_epoch;	Err	bitreich.org	70
i+        long out[WIDTH_MAX + 1];	Err	bitreich.org	70
i         int n, width;	Err	bitreich.org	70
i-        char out[WIDTH_MAX * 3 + 1];	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-        width = screenwidth / ncol;	Err	bitreich.org	70
i+        width = (wflag - sizeof("XXxXXxXX _|")) / ncol - sizeof("|");	Err	bitreich.org	70
i         last_epoch = epoch = 0;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-        for (n = 0;; n++) {	Err	bitreich.org	70
i-                if (n >= 20) {	Err	bitreich.org	70
i-                        puts(labels);	Err	bitreich.org	70
i-                        n = 0;	Err	bitreich.org	70
i-                }	Err	bitreich.org	70
i+        for (n = 0;; n = n == 20 ? 0 : n + 1) {	Err	bitreich.org	70
i+                if (n == 0)	Err	bitreich.org	70
i+                        put_time(0, 0, 2), puts(labels);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-                epoch = plot_line(out, ncol, width);	Err	bitreich.org	70
i+                epoch = plot_line(out, max, ncol, width);	Err	bitreich.org	70
i                 put_time(epoch, last_epoch, n);	Err	bitreich.org	70
i                 last_epoch = epoch;	Err	bitreich.org	70
i-                puts(out);	Err	bitreich.org	70
i+                put_line(out);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i                 fflush(stdout);	Err	bitreich.org	70
i         }	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-void	Err	bitreich.org	70
i-parse_args(int argc, char **argv)	Err	bitreich.org	70
i+static void	Err	bitreich.org	70
i+fmt_labels(char out[LINE_MAX], int ncol, char *labels[LINE_MAX / 2])	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        int i, w;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        w = wflag / ncol;	Err	bitreich.org	70
i+        for (i = 0; i < ncol; labels++, i++)	Err	bitreich.org	70
i+                out += snprintf(out, w - 1, " %.*s", w - 1, *labels);	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+/*	Err	bitreich.org	70
i+ * Label must be able to store all pointers to token buf has to	Err	bitreich.org	70
i+ * offer: sizeof(*buf / 2).	Err	bitreich.org	70
i+ */	Err	bitreich.org	70
i+static int	Err	bitreich.org	70
i+read_labels(char out[LINE_MAX])	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        int ncol;	Err	bitreich.org	70
i+        char *l, line[LINE_MAX], **lab, *labels[LINE_MAX / 2], *tok;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        if ((l = esfgets(line, LINE_MAX, stdin)) == NULL)	Err	bitreich.org	70
i+                fputs("missing label line\n", stderr), exit(1);	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        if (strcmp(strsep(&l, ","), "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+        lab = labels;	Err	bitreich.org	70
i+        for (ncol = 0; (tok = strsep(&l, ",")) != NULL; ncol++, lab++)	Err	bitreich.org	70
i+                *lab = tok;	Err	bitreich.org	70
i+        *lab = NULL;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        if (ncol < 1)	Err	bitreich.org	70
i+                fputs("no label found\n", stderr), exit(1);	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        fmt_labels(out, ncol, labels);	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        return ncol;	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+        fprintf(stderr, "usage: %s maxval... <csv\n", argv0);	Err	bitreich.org	70
i+        exit(1);	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+static int	Err	bitreich.org	70
i+parse_args(int argc, char **argv, double *max)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        int n;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i         argv0 = *argv;	Err	bitreich.org	70
i-        if (argc != 1)	Err	bitreich.org	70
i+        argv++, argc--;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        if (argc == 0)	Err	bitreich.org	70
i                 usage();	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        for (n = argc; n > 0; n--, argv++, max++)	Err	bitreich.org	70
i+                *max = eatof(*argv);	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        return argc;	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i int	Err	bitreich.org	70
i main(int argc, char **argv)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i+        double max[LINE_MAX / 2];	Err	bitreich.org	70
i+        int ncol, nmax;	Err	bitreich.org	70
i         char labels[LINE_MAX];	Err	bitreich.org	70
i-        int ncol;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-        parse_args(argc, argv);	Err	bitreich.org	70
i+        nmax = parse_args(argc, argv, max);	Err	bitreich.org	70
i         ncol = read_labels(labels);	Err	bitreich.org	70
i-        plot(labels, ncol);	Err	bitreich.org	70
i+        if (ncol != nmax)	Err	bitreich.org	70
i+                fputs("not as many labels and arguments\n", stderr), exit(0);	Err	bitreich.org	70
i+        plot(labels, max, ncol);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         return 0;	Err	bitreich.org	70
i }	Err	bitreich.org	70
1diff --git a/test.csv b/test.csv	/scm/ploot/file/test.csv.gph	bitreich.org	70
i@@ -0,0 +1,30 @@	Err	bitreich.org	70
i+epoch,value	Err	bitreich.org	70
i+1525186140,34.691934	Err	bitreich.org	70
i+1525187040,34.405857	Err	bitreich.org	70
i+1525187940,32.498299	Err	bitreich.org	70
i+1525188840,27.619718	Err	bitreich.org	70
i+1525189740,30.942743	Err	bitreich.org	70
i+1525190640,32.813887	Err	bitreich.org	70
i+1525191540,32.230595	Err	bitreich.org	70
i+1525192440,30.917799	Err	bitreich.org	70
i+1525193340,31.829373	Err	bitreich.org	70
i+1525194240,30.912565	Err	bitreich.org	70
i+1525195140,32.899966	Err	bitreich.org	70
i+1525196040,31.234834	Err	bitreich.org	70
i+1525196940,31.196973	Err	bitreich.org	70
i+1525197840,30.626265	Err	bitreich.org	70
i+1525198740,30.734170	Err	bitreich.org	70
i+1525199640,29.900881	Err	bitreich.org	70
i+1525200540,28.375837	Err	bitreich.org	70
i+1525201440,28.976500	Err	bitreich.org	70
i+1525202340,27.949893	Err	bitreich.org	70
i+1525203240,26.158816	Err	bitreich.org	70
i+1525204140,23.383114	Err	bitreich.org	70
i+1525205040,26.615605	Err	bitreich.org	70
i+1525205940,30.636621	Err	bitreich.org	70
i+1525206840,28.831401	Err	bitreich.org	70
i+1525207740,29.878943	Err	bitreich.org	70
i+1525208640,22.641583	Err	bitreich.org	70
i+1525209540,30.158785	Err	bitreich.org	70
i+1525210440,30.718469	Err	bitreich.org	70
i+1525211340,30.369028	Err	bitreich.org	70
.
Response: text/plain
Original URLgopher://bitreich.org/0/scm/ploot/commit/97913fd518557ed5...
Content-Typetext/plain; charset=utf-8