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