imove from CSV to TSV - 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 98d0cb5aa9d2adb27b2a992e90debce8b3843c5b /scm/ploot/commit/98d0cb5aa9d2adb27b2a992e90debce8b3843c5b.gph bitreich.org 70
1parent 8836c19534760f2ce037c39bde9dc5591011ed07 /scm/ploot/commit/8836c19534760f2ce037c39bde9dc5591011ed07.gph bitreich.org 70
hAuthor: Josuah Demangeon <me@josuah.net> URL:mailto:me@josuah.net bitreich.org 70
iDate: Sun, 27 Jun 2021 04:57:00 +0200 Err bitreich.org 70
i Err bitreich.org 70
imove from CSV to TSV Err bitreich.org 70
i Err bitreich.org 70
iDiffstat: Err bitreich.org 70
i M Makefile | 6 +++--- Err bitreich.org 70
i M README.md | 6 +++--- Err bitreich.org 70
i D csv.c | 154 ------------------------------- Err bitreich.org 70
i D csv.h | 22 ---------------------- Err bitreich.org 70
i D example.csv | 114 ------------------------------- Err bitreich.org 70
i M example.png | 0 Err bitreich.org 70
i A example.tsv | 114 +++++++++++++++++++++++++++++++ Err bitreich.org 70
i M ploot-braille.c | 14 +++++++------- Err bitreich.org 70
i D ploot-csv.5 | 77 ------------------------------- Err bitreich.org 70
i M ploot-farbfeld.1 | 10 +++++----- Err bitreich.org 70
i M ploot-farbfeld.c | 18 +++++++++--------- Err bitreich.org 70
i M ploot-feed.1 | 6 +++--- Err bitreich.org 70
i M ploot-feed.c | 10 +++++----- Err bitreich.org 70
i A ploot-tsv.5 | 77 +++++++++++++++++++++++++++++++ Err bitreich.org 70
i A tsv.c | 154 +++++++++++++++++++++++++++++++ Err bitreich.org 70
i A tsv.h | 22 ++++++++++++++++++++++ Err bitreich.org 70
i Err bitreich.org 70
i16 files changed, 402 insertions(+), 402 deletions(-) Err bitreich.org 70
i--- Err bitreich.org 70
1diff --git a/Makefile b/Makefile /scm/ploot/file/Makefile.gph bitreich.org 70
i@@ -7,9 +7,9 @@ LFLAGS = -static -lm Err bitreich.org 70
i PREFIX = /usr/local Err bitreich.org 70
i MANOREFIX = $(PREFIX)/share/man Err bitreich.org 70
i Err bitreich.org 70
i-SRC = csv.c drawille.c font.c font13.c font8.c util.c Err bitreich.org 70
i-INC = csv.h drawille.h font.h util.h Err bitreich.org 70
i-BIN = ploot-feed ploot-braille ploot-text ploot-farbfeld Err bitreich.org 70
i+SRC = tsv.c drawille.c font.c font13.c font8.c util.c Err bitreich.org 70
i+INC = tsv.h drawille.h font.h util.h Err bitreich.org 70
i+BIN = ploot-farbfeld ploot-feed ploot-braille ploot-text Err bitreich.org 70
i OBJ = ${SRC:.c=.o} Err bitreich.org 70
i Err bitreich.org 70
i all: ${BIN} Err bitreich.org 70
1diff --git a/README.md b/README.md /scm/ploot/file/README.md.gph bitreich.org 70
i@@ -3,7 +3,7 @@ ploot Err bitreich.org 70
i Err bitreich.org 70
i ploot-ffplot Err bitreich.org 70
i -------------- Err bitreich.org 70
i-*ploot-ffplot* reads collectd-style comma separated values (CSV) and produces a plot Err bitreich.org 70
i+*ploot-ffplot* reads collectd-style comma separated values (TSV) and produces a plot Err bitreich.org 70
i in the ffplot [1] image format (pipe it to ff2png). It is an alternative to Err bitreich.org 70
i RRDtool [2]. Err bitreich.org 70
i Err bitreich.org 70
i@@ -16,12 +16,12 @@ name of the curves. Err bitreich.org 70
i Err bitreich.org 70
i ploot-feed Err bitreich.org 70
i ---------- Err bitreich.org 70
i-*ploot-feed* also reads collectd-style comma separated values (CSV) but produces Err bitreich.org 70
i+*ploot-feed* also reads collectd-style comma separated values (TSV) but produces Err bitreich.org 70
i a plain text continuous waterfall chart for live monitoring in the terminal. it Err bitreich.org 70
i is an alternative to grafana [1]. Err bitreich.org 70
i Err bitreich.org 70
i ``` Err bitreich.org 70
i-% plootxt 1 1 1 <load-average.csv Err bitreich.org 70
i+% plootxt 1 1 1 <load-average.tsv Err bitreich.org 70
i │shortterm │midterm │longterm │ Err bitreich.org 70
i 17:34:00 _│⣦⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀│⣯⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀│⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀│ Err bitreich.org 70
i 18/05/01 │⣟⡁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀│⣿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀│⣿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀│ Err bitreich.org 70
1diff --git a/csv.c b/csv.c /scm/ploot/file/csv.c.gph bitreich.org 70
i@@ -1,154 +0,0 @@ Err bitreich.org 70
i-#include "csv.h" Err bitreich.org 70
i-#include <errno.h> Err bitreich.org 70
i-#include <assert.h> Err bitreich.org 70
i-#include <string.h> Err bitreich.org 70
i-#include <time.h> Err bitreich.org 70
i-#include <stdlib.h> Err bitreich.org 70
i-#include <limits.h> Err bitreich.org 70
i-#include <time.h> Err bitreich.org 70
i-#include "util.h" Err bitreich.org 70
i- Err bitreich.org 70
i-/* Err bitreich.org 70
i- * Read CSV data onto a set of (struct csv) and some utilities to work on these data. Err bitreich.org 70
i- */ Err bitreich.org 70
i- Err bitreich.org 70
i-int Err bitreich.org 70
i-csv_min_max(struct csv *vl, int ncol, Err bitreich.org 70
i- time_t *tmin, time_t *tmax, Err bitreich.org 70
i- double *vmin, double *vmax) Err bitreich.org 70
i-{ Err bitreich.org 70
i- double *v; Err bitreich.org 70
i- time_t *t; Err bitreich.org 70
i- size_t n; Err bitreich.org 70
i- Err bitreich.org 70
i- *vmin = *vmax = 0; /* always show 0 on the scale */ Err bitreich.org 70
i- *tmin = *tmax = *vl->t; Err bitreich.org 70
i- Err bitreich.org 70
i- for (; ncol > 0; ncol--, vl++) { Err bitreich.org 70
i- for (t = vl->t, v = vl->v, n = vl->n; n > 0; t++, v++, n--) { Err bitreich.org 70
i- if (*v < *vmin) *vmin = *v; Err bitreich.org 70
i- if (*v > *vmax) *vmax = *v; Err bitreich.org 70
i- if (*t < *tmin) *tmin = *t; Err bitreich.org 70
i- if (*t > *tmax) *tmax = *t; Err bitreich.org 70
i- } Err bitreich.org 70
i- } Err bitreich.org 70
i- if (*tmin == *tmax) Err bitreich.org 70
i- return -1; Err bitreich.org 70
i- return 0; Err bitreich.org 70
i-} Err bitreich.org 70
i- Err bitreich.org 70
i-static void Err bitreich.org 70
i-csv_add_time(struct csv *vl, time_t epoch) Err bitreich.org 70
i-{ Err bitreich.org 70
i- void *mem; Err bitreich.org 70
i- Err bitreich.org 70
i- if ((mem = realloc(vl->t, (vl->n + 1) * sizeof *vl->t)) == NULL) Err bitreich.org 70
i- err(1, "realloc: %s", strerror(errno)); Err bitreich.org 70
i- vl->t = mem; Err bitreich.org 70
i- vl->t[vl->n] = epoch; Err bitreich.org 70
i-} Err bitreich.org 70
i- Err bitreich.org 70
i-static void Err bitreich.org 70
i-csv_add_val(struct csv *vl, double field) Err bitreich.org 70
i-{ Err bitreich.org 70
i- void *mem; Err bitreich.org 70
i- Err bitreich.org 70
i- if ((mem = realloc(vl->v, (vl->n + 1) * sizeof *vl->v)) == NULL) Err bitreich.org 70
i- err(1, "", strerror(errno)); Err bitreich.org 70
i- vl->v = mem; Err bitreich.org 70
i- vl->v[vl->n] = 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. The time_t Err bitreich.org 70
i- * buffer is shared among all fields. Err bitreich.org 70
i- */ Err bitreich.org 70
i-static void Err bitreich.org 70
i-csv_add_row(struct csv *vl, size_t ncol, char *line) Err bitreich.org 70
i-{ Err bitreich.org 70
i- char *field; Err bitreich.org 70
i- time_t *tbuf; Err bitreich.org 70
i- long l; Err bitreich.org 70
i- double d; Err bitreich.org 70
i- Err bitreich.org 70
i- if ((field = strsep(&line, ",")) == NULL) Err bitreich.org 70
i- err(1, "missing epoch at row %zu", vl->n); Err bitreich.org 70
i- Err bitreich.org 70
i- l = strtol(field, NULL, 10); Err bitreich.org 70
i- if (errno) Err bitreich.org 70
i- err(100, "parsing number '%s'", field); Err bitreich.org 70
i- Err bitreich.org 70
i- csv_add_time(vl, l); Err bitreich.org 70
i- tbuf = vl[0].t; Err bitreich.org 70
i- for (; (field = strsep(&line, ",")); ncol--, vl->n++, vl++) { Err bitreich.org 70
i- if (ncol == 0) Err bitreich.org 70
i- err(1, "too many fields at line %zu", vl->n); Err bitreich.org 70
i- d = strtod(field, NULL); Err bitreich.org 70
i- if (errno) Err bitreich.org 70
i- err(100, "parsing double '%s'", field); Err bitreich.org 70
i- csv_add_val(vl, d); Err bitreich.org 70
i- vl->t = tbuf; Err bitreich.org 70
i- } Err bitreich.org 70
i- if (ncol > 0) Err bitreich.org 70
i- err(1, "too few fields at line %zu", vl->n); 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- * label1,label2,label3 Err bitreich.org 70
i- */ Err bitreich.org 70
i-void Err bitreich.org 70
i-csv_labels(FILE *fp, struct csv **vlp, size_t *ncol) Err bitreich.org 70
i-{ Err bitreich.org 70
i- char *field, *line, *cp; Err bitreich.org 70
i- struct csv *vl, *col; Err bitreich.org 70
i- size_t sz; Err bitreich.org 70
i- ssize_t r; Err bitreich.org 70
i- Err bitreich.org 70
i- sz = 0, line = NULL; Err bitreich.org 70
i- r = getline(&line, &sz, fp); Err bitreich.org 70
i- if (ferror(fp)) Err bitreich.org 70
i- err(111, "error while reading from file"); Err bitreich.org 70
i- if (feof(fp)) Err bitreich.org 70
i- err(100, "missing label line"); Err bitreich.org 70
i- strchomp(line); Err bitreich.org 70
i- Err bitreich.org 70
i- cp = line; Err bitreich.org 70
i- if (strcmp(strsep(&cp, ","), "epoch") != 0) Err bitreich.org 70
i- err(1, "first label must be 'epoch'"); Err bitreich.org 70
i- Err bitreich.org 70
i- sz = 0, vl = NULL, *ncol = 0; Err bitreich.org 70
i- while ((field = strsep(&cp, ","))) { Err bitreich.org 70
i- if ((vl = realloc(vl, sz += sizeof *vl)) == NULL) Err bitreich.org 70
i- err(1, "realloc: %s", strerror(errno)); Err bitreich.org 70
i- col = vl + (*ncol)++; Err bitreich.org 70
i- memset(col, 0, sizeof *vl); Err bitreich.org 70
i- strlcpy(col->label, field, sizeof col->label); Err bitreich.org 70
i- } Err bitreich.org 70
i- free(line); Err bitreich.org 70
i- *vlp = vl; 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- * val1a,val1b,val1c ^ Err bitreich.org 70
i- * val2a,val2b,val2c | Err bitreich.org 70
i- * val3a,val3b,val3c (vl->n) Err bitreich.org 70
i- * val4a,val4b,val4c | Err bitreich.org 70
i- * val5a,val5b,val5c v Err bitreich.org 70
i- */ Err bitreich.org 70
i-void Err bitreich.org 70
i-csv_values(FILE *fp, struct csv *vl, size_t ncol) Err bitreich.org 70
i-{ Err bitreich.org 70
i- char *line; Err bitreich.org 70
i- size_t sz; Err bitreich.org 70
i- Err bitreich.org 70
i- sz = 0, line = NULL; Err bitreich.org 70
i- while (getline(&line, &sz, fp) > -1) Err bitreich.org 70
i- csv_add_row(vl, ncol, line); Err bitreich.org 70
i- if (vl->n == 0) Err bitreich.org 70
i- err(1, "no value could be read"); Err bitreich.org 70
i- if (vl->n == 1) Err bitreich.org 70
i- err(1, "only one value could be read"); Err bitreich.org 70
i- free(line); Err bitreich.org 70
i-} Err bitreich.org 70
1diff --git a/csv.h b/csv.h /scm/ploot/file/csv.h.gph bitreich.org 70
i@@ -1,22 +0,0 @@ Err bitreich.org 70
i-#ifndef CSV_H Err bitreich.org 70
i-#define CSV_H Err bitreich.org 70
i- Err bitreich.org 70
i-#include <stdio.h> Err bitreich.org 70
i-#include <time.h> Err bitreich.org 70
i- Err bitreich.org 70
i-/* Err bitreich.org 70
i- * List of values and timestamps. Both have their dedicated buffer Err bitreich.org 70
i- * so that the timestamp buffer can be shared across csv objects. Err bitreich.org 70
i- */ Err bitreich.org 70
i-struct csv { 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- size_t n; /* number of values */ Err bitreich.org 70
i- char label[64]; /* for the legend */ Err bitreich.org 70
i-}; Err bitreich.org 70
i- Err bitreich.org 70
i-void csv_labels(FILE *, struct csv **, size_t *); Err bitreich.org 70
i-void csv_values(FILE *, struct csv *, size_t); Err bitreich.org 70
i-int csv_min_max(struct csv *, int, time_t *, time_t *, double *, double *); Err bitreich.org 70
i- Err bitreich.org 70
i-#endif Err bitreich.org 70
1diff --git a/example.csv b/example.csv /scm/ploot/file/example.csv.gph bitreich.org 70
i@@ -1,114 +0,0 @@ Err bitreich.org 70
i-epoch,shortterm,midterm,longterm Err bitreich.org 70
i-1525186140,0.023804,0.056885,0.049561 Err bitreich.org 70
i-1525187040,0.035767,0.047485,0.043701 Err bitreich.org 70
i-1525187940,0.057861,0.050293,0.042480 Err bitreich.org 70
i-1525188840,0.098267,0.099609,0.072266 Err bitreich.org 70
i-1525189740,0.083618,0.091187,0.079468 Err bitreich.org 70
i-1525190640,0.055298,0.063843,0.063354 Err bitreich.org 70
i-1525191540,0.046875,0.056152,0.058960 Err bitreich.org 70
i-1525192440,0.091187,0.062622,0.058716 Err bitreich.org 70
i-1525193340,0.067871,0.060303,0.059937 Err bitreich.org 70
i-1525194240,0.085571,0.056763,0.052612 Err bitreich.org 70
i-1525195140,0.020874,0.054810,0.055176 Err bitreich.org 70
i-1525196040,0.125122,0.062500,0.048096 Err bitreich.org 70
i-1525196940,0.040649,0.041870,0.040649 Err bitreich.org 70
i-1525197840,0.032471,0.049194,0.042114 Err bitreich.org 70
i-1525198740,0.073853,0.088501,0.071045 Err bitreich.org 70
i-1525199640,0.119995,0.072998,0.064697 Err bitreich.org 70
i-1525200540,0.030518,0.043335,0.046265 Err bitreich.org 70
i-1525201440,0.037842,0.042969,0.040894 Err bitreich.org 70
i-1525202340,0.054810,0.049927,0.042358 Err bitreich.org 70
i-1525203240,0.120728,0.077271,0.053589 Err bitreich.org 70
i-1525204140,0.068970,0.086670,0.074585 Err bitreich.org 70
i-1525205040,0.071289,0.083496,0.079834 Err bitreich.org 70
i-1525205940,0.046265,0.059326,0.068848 Err bitreich.org 70
i-1525206840,0.064209,0.083374,0.069214 Err bitreich.org 70
i-1525207740,0.055054,0.046753,0.051758 Err bitreich.org 70
i-1525208640,0.170410,0.088867,0.064575 Err bitreich.org 70
i-1525209540,0.067627,0.092407,0.092163 Err bitreich.org 70
i-1525210440,0.078003,0.087646,0.083130 Err bitreich.org 70
i-1525211340,0.032959,0.043457,0.059204 Err bitreich.org 70
i-1525212240,0.036377,0.054810,0.057861 Err bitreich.org 70
i-1525213140,0.054565,0.078369,0.071655 Err bitreich.org 70
i-1525214040,0.026611,0.041138,0.051514 Err bitreich.org 70
i-1525214940,0.065186,0.067505,0.061768 Err bitreich.org 70
i-1525215840,0.071411,0.055298,0.055176 Err bitreich.org 70
i-1525229081,0.041260,0.045044,0.045654 Err bitreich.org 70
i-1525229081,0.041260,0.045044,0.045654 Err bitreich.org 70
i-1525229981,0.059692,0.102051,0.105835 Err bitreich.org 70
i-1525230881,0.077148,0.067017,0.073730 Err bitreich.org 70
i-1525231781,0.080200,0.074341,0.064575 Err bitreich.org 70
i-1525232681,0.122437,0.099487,0.075806 Err bitreich.org 70
i-1525233581,0.085815,0.076050,0.073486 Err bitreich.org 70
i-1525234481,0.074585,0.064087,0.062012 Err bitreich.org 70
i-1525235381,0.024902,0.047241,0.053345 Err bitreich.org 70
i-1525236281,0.107910,0.081543,0.065918 Err bitreich.org 70
i-1525237181,0.038696,0.075684,0.080688 Err bitreich.org 70
i-1525238081,0.204834,0.181152,0.130737 Err bitreich.org 70
i-1525238981,0.231445,0.158325,0.137695 Err bitreich.org 70
i-1525239881,0.067505,0.089355,0.109497 Err bitreich.org 70
i-1525240781,0.047852,0.088745,0.107910 Err bitreich.org 70
i-1525241681,0.094360,0.085693,0.083618 Err bitreich.org 70
i-1525242581,0.047363,0.043335,0.052856 Err bitreich.org 70
i-1525243481,0.047363,0.031982,0.036621 Err bitreich.org 70
i-1525244381,0.055054,0.042236,0.040039 Err bitreich.org 70
i-1525245281,0.034668,0.041626,0.040039 Err bitreich.org 70
i-1525246181,0.088867,0.065918,0.048706 Err bitreich.org 70
i-1525247081,0.049072,0.051880,0.042236 Err bitreich.org 70
i-1525247981,0.045166,0.048828,0.041382 Err bitreich.org 70
i-1525248881,0.067261,0.061768,0.047852 Err bitreich.org 70
i-1525249781,0.039917,0.056519,0.045654 Err bitreich.org 70
i-1525250681,0.017822,0.030273,0.033081 Err bitreich.org 70
i-1525251581,0.034668,0.033691,0.034546 Err bitreich.org 70
i-1525252481,0.053223,0.051880,0.045166 Err bitreich.org 70
i-1525253381,0.028687,0.050049,0.050659 Err bitreich.org 70
i-1525254281,0.021118,0.042358,0.040649 Err bitreich.org 70
i-1525255181,0.059204,0.047974,0.041870 Err bitreich.org 70
i-1525256081,0.206421,0.141968,0.086670 Err bitreich.org 70
i-1525256981,0.105713,0.087158,0.073486 Err bitreich.org 70
i-1525257881,0.048950,0.060913,0.068359 Err bitreich.org 70
i-1525258781,0.024414,0.036621,0.046753 Err bitreich.org 70
i-1525259681,0.245239,0.109619,0.071045 Err bitreich.org 70
i-1525260581,0.042236,0.063965,0.069092 Err bitreich.org 70
i-1525261481,0.016724,0.054077,0.059692 Err bitreich.org 70
i-1525262381,0.018433,0.078003,0.076660 Err bitreich.org 70
i-1525263281,0.042480,0.057617,0.061890 Err bitreich.org 70
i-1525264181,0.040161,0.041138,0.044189 Err bitreich.org 70
i-1525265081,0.059082,0.090698,0.064575 Err bitreich.org 70
i-1525265981,0.129272,0.080811,0.073486 Err bitreich.org 70
i-1525266881,0.228516,0.164551,0.112915 Err bitreich.org 70
i-1525267781,0.083130,0.058594,0.067627 Err bitreich.org 70
i-1525268681,0.062378,0.063965,0.061523 Err bitreich.org 70
i-1525269581,0.066895,0.069702,0.062500 Err bitreich.org 70
i-1525270481,0.061768,0.080322,0.065674 Err bitreich.org 70
i-1525271381,0.123657,0.089478,0.072021 Err bitreich.org 70
i-1525272281,0.056885,0.045532,0.051514 Err bitreich.org 70
i-1525273181,0.108887,0.056519,0.046387 Err bitreich.org 70
i-1525274081,0.072266,0.119629,0.080078 Err bitreich.org 70
i-1525274981,0.033447,0.058350,0.070190 Err bitreich.org 70
i-1525275881,0.028198,0.050781,0.058105 Err bitreich.org 70
i-1525276781,0.067261,0.059937,0.057495 Err bitreich.org 70
i-1525277681,0.024780,0.028809,0.038452 Err bitreich.org 70
i-1525278581,0.053955,0.049561,0.041748 Err bitreich.org 70
i-1525279481,0.086304,0.065308,0.048096 Err bitreich.org 70
i-1525281698,0.019165,0.047485,0.041870 Err bitreich.org 70
i-1525281698,0.019165,0.047485,0.041870 Err bitreich.org 70
i-1525282598,0.039551,0.034302,0.038086 Err bitreich.org 70
i-1525283498,0.017700,0.022827,0.026367 Err bitreich.org 70
i-1525284398,0.023560,0.034790,0.024292 Err bitreich.org 70
i-1525285298,0.093506,0.078857,0.053101 Err bitreich.org 70
i-1525286198,0.051025,0.066162,0.069458 Err bitreich.org 70
i-1525287098,0.054077,0.057861,0.059082 Err bitreich.org 70
i-1525287998,0.080200,0.071655,0.062744 Err bitreich.org 70
i-1525288898,0.478638,0.375122,0.247192 Err bitreich.org 70
i-1525289798,0.393066,0.390991,0.347046 Err bitreich.org 70
i-1525290698,0.368164,0.383545,0.365723 Err bitreich.org 70
i-1525291598,0.459229,0.463867,0.432129 Err bitreich.org 70
i-1525292498,0.286865,0.354980,0.381958 Err bitreich.org 70
i-1525293398,0.180786,0.178833,0.232910 Err bitreich.org 70
i-1525294298,0.278198,0.260864,0.242920 Err bitreich.org 70
i-1525295198,0.192505,0.183716,0.200806 Err bitreich.org 70
i-1525296098,0.109375,0.185669,0.207153 Err bitreich.org 70
i-1525296098,0.109375,0.185669,0.207153 Err bitreich.org 70
i-1525296998,0.137085,0.126221,0.138184 Err bitreich.org 70
i-1525297898,0.077881,0.092529,0.109619 Err bitreich.org 70
1diff --git a/example.png b/example.png /scm/ploot/file/example.png.gph bitreich.org 70
iBinary files differ. Err bitreich.org 70
1diff --git a/example.tsv b/example.tsv /scm/ploot/file/example.tsv.gph bitreich.org 70
i@@ -0,0 +1,114 @@ Err bitreich.org 70
i+epoch shortterm midterm longterm Err bitreich.org 70
i+1525186140 0.023804 0.056885 0.049561 Err bitreich.org 70
i+1525187040 0.035767 0.047485 0.043701 Err bitreich.org 70
i+1525187940 0.057861 0.050293 0.042480 Err bitreich.org 70
i+1525188840 0.098267 0.099609 0.072266 Err bitreich.org 70
i+1525189740 0.083618 0.091187 0.079468 Err bitreich.org 70
i+1525190640 0.055298 0.063843 0.063354 Err bitreich.org 70
i+1525191540 0.046875 0.056152 0.058960 Err bitreich.org 70
i+1525192440 0.091187 0.062622 0.058716 Err bitreich.org 70
i+1525193340 0.067871 0.060303 0.059937 Err bitreich.org 70
i+1525194240 0.085571 0.056763 0.052612 Err bitreich.org 70
i+1525195140 0.020874 0.054810 0.055176 Err bitreich.org 70
i+1525196040 0.125122 0.062500 0.048096 Err bitreich.org 70
i+1525196940 0.040649 0.041870 0.040649 Err bitreich.org 70
i+1525197840 0.032471 0.049194 0.042114 Err bitreich.org 70
i+1525198740 0.073853 0.088501 0.071045 Err bitreich.org 70
i+1525199640 0.119995 0.072998 0.064697 Err bitreich.org 70
i+1525200540 0.030518 0.043335 0.046265 Err bitreich.org 70
i+1525201440 0.037842 0.042969 0.040894 Err bitreich.org 70
i+1525202340 0.054810 0.049927 0.042358 Err bitreich.org 70
i+1525203240 0.120728 0.077271 0.053589 Err bitreich.org 70
i+1525204140 0.068970 0.086670 0.074585 Err bitreich.org 70
i+1525205040 0.071289 0.083496 0.079834 Err bitreich.org 70
i+1525205940 0.046265 0.059326 0.068848 Err bitreich.org 70
i+1525206840 0.064209 0.083374 0.069214 Err bitreich.org 70
i+1525207740 0.055054 0.046753 0.051758 Err bitreich.org 70
i+1525208640 0.170410 0.088867 0.064575 Err bitreich.org 70
i+1525209540 0.067627 0.092407 0.092163 Err bitreich.org 70
i+1525210440 0.078003 0.087646 0.083130 Err bitreich.org 70
i+1525211340 0.032959 0.043457 0.059204 Err bitreich.org 70
i+1525212240 0.036377 0.054810 0.057861 Err bitreich.org 70
i+1525213140 0.054565 0.078369 0.071655 Err bitreich.org 70
i+1525214040 0.026611 0.041138 0.051514 Err bitreich.org 70
i+1525214940 0.065186 0.067505 0.061768 Err bitreich.org 70
i+1525215840 0.071411 0.055298 0.055176 Err bitreich.org 70
i+1525229081 0.041260 0.045044 0.045654 Err bitreich.org 70
i+1525229081 0.041260 0.045044 0.045654 Err bitreich.org 70
i+1525229981 0.059692 0.102051 0.105835 Err bitreich.org 70
i+1525230881 0.077148 0.067017 0.073730 Err bitreich.org 70
i+1525231781 0.080200 0.074341 0.064575 Err bitreich.org 70
i+1525232681 0.122437 0.099487 0.075806 Err bitreich.org 70
i+1525233581 0.085815 0.076050 0.073486 Err bitreich.org 70
i+1525234481 0.074585 0.064087 0.062012 Err bitreich.org 70
i+1525235381 0.024902 0.047241 0.053345 Err bitreich.org 70
i+1525236281 0.107910 0.081543 0.065918 Err bitreich.org 70
i+1525237181 0.038696 0.075684 0.080688 Err bitreich.org 70
i+1525238081 0.204834 0.181152 0.130737 Err bitreich.org 70
i+1525238981 0.231445 0.158325 0.137695 Err bitreich.org 70
i+1525239881 0.067505 0.089355 0.109497 Err bitreich.org 70
i+1525240781 0.047852 0.088745 0.107910 Err bitreich.org 70
i+1525241681 0.094360 0.085693 0.083618 Err bitreich.org 70
i+1525242581 0.047363 0.043335 0.052856 Err bitreich.org 70
i+1525243481 0.047363 0.031982 0.036621 Err bitreich.org 70
i+1525244381 0.055054 0.042236 0.040039 Err bitreich.org 70
i+1525245281 0.034668 0.041626 0.040039 Err bitreich.org 70
i+1525246181 0.088867 0.065918 0.048706 Err bitreich.org 70
i+1525247081 0.049072 0.051880 0.042236 Err bitreich.org 70
i+1525247981 0.045166 0.048828 0.041382 Err bitreich.org 70
i+1525248881 0.067261 0.061768 0.047852 Err bitreich.org 70
i+1525249781 0.039917 0.056519 0.045654 Err bitreich.org 70
i+1525250681 0.017822 0.030273 0.033081 Err bitreich.org 70
i+1525251581 0.034668 0.033691 0.034546 Err bitreich.org 70
i+1525252481 0.053223 0.051880 0.045166 Err bitreich.org 70
i+1525253381 0.028687 0.050049 0.050659 Err bitreich.org 70
i+1525254281 0.021118 0.042358 0.040649 Err bitreich.org 70
i+1525255181 0.059204 0.047974 0.041870 Err bitreich.org 70
i+1525256081 0.206421 0.141968 0.086670 Err bitreich.org 70
i+1525256981 0.105713 0.087158 0.073486 Err bitreich.org 70
i+1525257881 0.048950 0.060913 0.068359 Err bitreich.org 70
i+1525258781 0.024414 0.036621 0.046753 Err bitreich.org 70
i+1525259681 0.245239 0.109619 0.071045 Err bitreich.org 70
i+1525260581 0.042236 0.063965 0.069092 Err bitreich.org 70
i+1525261481 0.016724 0.054077 0.059692 Err bitreich.org 70
i+1525262381 0.018433 0.078003 0.076660 Err bitreich.org 70
i+1525263281 0.042480 0.057617 0.061890 Err bitreich.org 70
i+1525264181 0.040161 0.041138 0.044189 Err bitreich.org 70
i+1525265081 0.059082 0.090698 0.064575 Err bitreich.org 70
i+1525265981 0.129272 0.080811 0.073486 Err bitreich.org 70
i+1525266881 0.228516 0.164551 0.112915 Err bitreich.org 70
i+1525267781 0.083130 0.058594 0.067627 Err bitreich.org 70
i+1525268681 0.062378 0.063965 0.061523 Err bitreich.org 70
i+1525269581 0.066895 0.069702 0.062500 Err bitreich.org 70
i+1525270481 0.061768 0.080322 0.065674 Err bitreich.org 70
i+1525271381 0.123657 0.089478 0.072021 Err bitreich.org 70
i+1525272281 0.056885 0.045532 0.051514 Err bitreich.org 70
i+1525273181 0.108887 0.056519 0.046387 Err bitreich.org 70
i+1525274081 0.072266 0.119629 0.080078 Err bitreich.org 70
i+1525274981 0.033447 0.058350 0.070190 Err bitreich.org 70
i+1525275881 0.028198 0.050781 0.058105 Err bitreich.org 70
i+1525276781 0.067261 0.059937 0.057495 Err bitreich.org 70
i+1525277681 0.024780 0.028809 0.038452 Err bitreich.org 70
i+1525278581 0.053955 0.049561 0.041748 Err bitreich.org 70
i+1525279481 0.086304 0.065308 0.048096 Err bitreich.org 70
i+1525281698 0.019165 0.047485 0.041870 Err bitreich.org 70
i+1525281698 0.019165 0.047485 0.041870 Err bitreich.org 70
i+1525282598 0.039551 0.034302 0.038086 Err bitreich.org 70
i+1525283498 0.017700 0.022827 0.026367 Err bitreich.org 70
i+1525284398 0.023560 0.034790 0.024292 Err bitreich.org 70
i+1525285298 0.093506 0.078857 0.053101 Err bitreich.org 70
i+1525286198 0.051025 0.066162 0.069458 Err bitreich.org 70
i+1525287098 0.054077 0.057861 0.059082 Err bitreich.org 70
i+1525287998 0.080200 0.071655 0.062744 Err bitreich.org 70
i+1525288898 0.478638 0.375122 0.247192 Err bitreich.org 70
i+1525289798 0.393066 0.390991 0.347046 Err bitreich.org 70
i+1525290698 0.368164 0.383545 0.365723 Err bitreich.org 70
i+1525291598 0.459229 0.463867 0.432129 Err bitreich.org 70
i+1525292498 0.286865 0.354980 0.381958 Err bitreich.org 70
i+1525293398 0.180786 0.178833 0.232910 Err bitreich.org 70
i+1525294298 0.278198 0.260864 0.242920 Err bitreich.org 70
i+1525295198 0.192505 0.183716 0.200806 Err bitreich.org 70
i+1525296098 0.109375 0.185669 0.207153 Err bitreich.org 70
i+1525296098 0.109375 0.185669 0.207153 Err bitreich.org 70
i+1525296998 0.137085 0.126221 0.138184 Err bitreich.org 70
i+1525297898 0.077881 0.092529 0.109619 Err bitreich.org 70
1diff --git a/ploot-braille.c b/ploot-braille.c /scm/ploot/file/ploot-braille.c.gph bitreich.org 70
i@@ -9,7 +9,7 @@ Err bitreich.org 70
i #include <unistd.h> Err bitreich.org 70
i #include "drawille.h" Err bitreich.org 70
i #include "util.h" Err bitreich.org 70
i-#include "csv.h" Err bitreich.org 70
i+#include "tsv.h" Err bitreich.org 70
i Err bitreich.org 70
i #ifndef __OpenBSD__ Err bitreich.org 70
i #define pledge(...) 0 Err bitreich.org 70
i@@ -20,7 +20,7 @@ Err bitreich.org 70
i * a vertical and horizontal axis. Err bitreich.org 70
i */ Err bitreich.org 70
i static int Err bitreich.org 70
i-braille_histogram(struct csv *vl, struct drawille *drw, Err bitreich.org 70
i+braille_histogram(struct tsv *vl, struct drawille *drw, Err bitreich.org 70
i time_t tmin, time_t tmax, double vmin, double vmax) Err bitreich.org 70
i { Err bitreich.org 70
i int x, xprev, y, yprev, zero; Err bitreich.org 70
i@@ -104,7 +104,7 @@ braille_render(struct drawille *drw, FILE *fp, double min, double max) Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i static void Err bitreich.org 70
i-plot(struct csv *vl, size_t ncol, int rows, int cols, FILE *fp) Err bitreich.org 70
i+plot(struct tsv *vl, size_t ncol, int rows, int cols, FILE *fp) Err bitreich.org 70
i { Err bitreich.org 70
i double vmin, vmax, vstep; Err bitreich.org 70
i time_t tmin, tmax, tstep; Err bitreich.org 70
i@@ -112,7 +112,7 @@ plot(struct csv *vl, size_t ncol, int rows, int cols, FILE *fp) Err bitreich.org 70
i Err bitreich.org 70
i rows = MAX(rows, 2); /* readable */ Err bitreich.org 70
i Err bitreich.org 70
i- if (csv_min_max(vl, ncol, &tmin, &tmax, &vmin, &vmax) < 0) Err bitreich.org 70
i+ if (tsv_min_max(vl, ncol, &tmin, &tmax, &vmin, &vmax) < 0) Err bitreich.org 70
i err(1, "invalid scale: tmin=%lld tmax=%lld vmin=%fd vmax=%fd", Err bitreich.org 70
i (long long)tmin, (long long)tmax, vmin, vmax); Err bitreich.org 70
i Err bitreich.org 70
i@@ -145,7 +145,7 @@ usage(void) 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- struct csv *vl; Err bitreich.org 70
i+ struct tsv *vl; Err bitreich.org 70
i size_t ncol; Err bitreich.org 70
i int c, rows, cols; Err bitreich.org 70
i Err bitreich.org 70
i@@ -181,8 +181,8 @@ main(int argc, char **argv) Err bitreich.org 70
i if (argc > 0) Err bitreich.org 70
i usage(); Err bitreich.org 70
i Err bitreich.org 70
i- csv_labels(stdin, &vl, &ncol); Err bitreich.org 70
i- csv_values(stdin, vl, ncol); Err bitreich.org 70
i+ tsv_labels(stdin, &vl, &ncol); Err bitreich.org 70
i+ tsv_values(stdin, vl, ncol); Err bitreich.org 70
i Err bitreich.org 70
i plot(vl, ncol, rows, cols, stdout); Err bitreich.org 70
i Err bitreich.org 70
1diff --git a/ploot-csv.5 b/ploot-csv.5 /scm/ploot/file/ploot-csv.5.gph bitreich.org 70
i@@ -1,77 +0,0 @@ Err bitreich.org 70
i-.Dd $Mdocdate: February 01 2020$ Err bitreich.org 70
i-.Dt PLOOT-CSV 5 Err bitreich.org 70
i-.Os Err bitreich.org 70
i-. Err bitreich.org 70
i-. Err bitreich.org 70
i-.Sh NAME Err bitreich.org 70
i-. Err bitreich.org 70
i-.Nm ploot-csv Err bitreich.org 70
i-.Nd input format used by the ploot set of programs Err bitreich.org 70
i-. Err bitreich.org 70
i-. Err bitreich.org 70
i-.Sh SYNOPSIS Err bitreich.org 70
i-. Err bitreich.org 70
i-.Bd -literal Err bitreich.org 70
i-epoch,column-name-1,column-name-2 Err bitreich.org 70
i-timestamp,value1,value2 Err bitreich.org 70
i-timestamp,value1,value2 Err bitreich.org 70
i-\&... Err bitreich.org 70
i-.Ed Err bitreich.org 70
i-. Err bitreich.org 70
i-. Err bitreich.org 70
i-.Sh DESCRIPTION Err bitreich.org 70
i-. Err bitreich.org 70
i-This is the simple coma-separated format used by the ploot-* programs. Err bitreich.org 70
i-. Err bitreich.org 70
i-. Err bitreich.org 70
i-.Sh INPUT FORMAT Err bitreich.org 70
i-. Err bitreich.org 70
i-.Nm Err bitreich.org 70
i-has a first header line, then zero or more data lines, both Err bitreich.org 70
i-coma-separated list of values. Err bitreich.org 70
i-. Err bitreich.org 70
i-. Err bitreich.org 70
i-.Ss Header line Err bitreich.org 70
i-. Err bitreich.org 70
i-The input must contain a first header line with the label of each column in order. Err bitreich.org 70
i-The first column is always Err bitreich.org 70
i-.Dq epoch . Err bitreich.org 70
i-Then there are the actual column names. Err bitreich.org 70
i-. Err bitreich.org 70
i-.Bd -literal -offset indent Err bitreich.org 70
i-epoch,free_memory,process_count Err bitreich.org 70
i-.Ed Err bitreich.org 70
i-. Err bitreich.org 70
i-. Err bitreich.org 70
i-.Ss Data lines Err bitreich.org 70
i-. Err bitreich.org 70
i-The following lines are the data. Err bitreich.org 70
i-The first column is always an unix timestamp as in Err bitreich.org 70
i-.Vt time_t . Err bitreich.org 70
i-The remaining columns are values parsed as floating point numbers by Err bitreich.org 70
i-.Xr strtod 3 : Err bitreich.org 70
i-. Err bitreich.org 70
i-.Bd -literal -offset indent Err bitreich.org 70
i-1533752053,16.3,45 Err bitreich.org 70
i-1533752054,18.7,42 Err bitreich.org 70
i-1533752055,40.1,39 Err bitreich.org 70
i-1533752056,40.1,39 Err bitreich.org 70
i-.Ed Err bitreich.org 70
i-. Err bitreich.org 70
i-. Err bitreich.org 70
i-.Sh SEE ALSO Err bitreich.org 70
i-. Err bitreich.org 70
i-.Xr ploot-feed 1 , Err bitreich.org 70
i-.Xr ploot-farbfeld 1 Err bitreich.org 70
i-. Err bitreich.org 70
i-.Sh HISTORY Err bitreich.org 70
i-. Err bitreich.org 70
i-.Nm Err bitreich.org 70
i-was defined at Err bitreich.org 70
i-.Lk gopher://bitreich.org/1/scm/ploot/ "Bitreich" Err bitreich.org 70
i-. Err bitreich.org 70
i-. Err bitreich.org 70
i-.Sh AUTHORS Err bitreich.org 70
i-. Err bitreich.org 70
i-.An Josuah Demangeon Err bitreich.org 70
i-.Aq Mt me@josuah.net Err bitreich.org 70
1diff --git a/ploot-farbfeld.1 b/ploot-farbfeld.1 /scm/ploot/file/ploot-farbfeld.1.gph bitreich.org 70
i@@ -6,7 +6,7 @@ Err bitreich.org 70
i .Sh NAME Err bitreich.org 70
i . Err bitreich.org 70
i .Nm ploot-ffplot Err bitreich.org 70
i-.Nd produce a ffplot image of csv input Err bitreich.org 70
i+.Nd produce a ffplot image of tsv input Err bitreich.org 70
i . Err bitreich.org 70
i . Err bitreich.org 70
i .Sh SYNOPSIS Err bitreich.org 70
i@@ -20,7 +20,7 @@ Err bitreich.org 70
i . Err bitreich.org 70
i The Err bitreich.org 70
i .Nm Err bitreich.org 70
i-utility plots an image in the ffplot format out of csv values coming from stdin. Err bitreich.org 70
i+utility plots an image in the ffplot format out of tsv values coming from stdin. Err bitreich.org 70
i . Err bitreich.org 70
i .Bl -tag -width 6n Err bitreich.org 70
i . Err bitreich.org 70
i@@ -29,7 +29,7 @@ Set the title of the plot printed at the top left corner. Err bitreich.org 70
i . Err bitreich.org 70
i .It Ar colors Err bitreich.org 70
i List of argument that specify the color for each column. Err bitreich.org 70
i-If the input csv have 5 columns in addition of the timestamp, there must Err bitreich.org 70
i+If the input tsv have 5 columns in addition of the timestamp, there must Err bitreich.org 70
i be 5 maxval arguments. Err bitreich.org 70
i color_ts available are red, orange, yellow, green, cyan and blue. Err bitreich.org 70
i . Err bitreich.org 70
i@@ -37,7 +37,7 @@ color_ts available are red, orange, yellow, green, cyan and blue. Err bitreich.org 70
i . Err bitreich.org 70
i .Pp Err bitreich.org 70
i The input format is documented in the Err bitreich.org 70
i-.Xr ploot-csv 7 Err bitreich.org 70
i+.Xr ploot-tsv 7 Err bitreich.org 70
i manual page. Err bitreich.org 70
i . Err bitreich.org 70
i . Err bitreich.org 70
i@@ -62,7 +62,7 @@ $ ploot-ffplot -t demo -u MB red yellow <sample.txt Err bitreich.org 70
i .Sh SEE ALSO Err bitreich.org 70
i . Err bitreich.org 70
i .Xr ploot-ffplot 1 , Err bitreich.org 70
i-.Xr ploot-csv 7 Err bitreich.org 70
i+.Xr ploot-tsv 7 Err bitreich.org 70
i . Err bitreich.org 70
i .Pp Err bitreich.org 70
i The Err bitreich.org 70
1diff --git a/ploot-farbfeld.c b/ploot-farbfeld.c /scm/ploot/file/ploot-farbfeld.c.gph bitreich.org 70
i@@ -11,7 +11,7 @@ Err bitreich.org 70
i #include <string.h> Err bitreich.org 70
i #include <time.h> Err bitreich.org 70
i #include <unistd.h> Err bitreich.org 70
i-#include "csv.h" Err bitreich.org 70
i+#include "tsv.h" Err bitreich.org 70
i #include "font.h" Err bitreich.org 70
i #include "util.h" Err bitreich.org 70
i Err bitreich.org 70
i@@ -287,7 +287,7 @@ ffplot_title(struct ffplot *plot, struct ffcolor *ct, char *title) Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i static void Err bitreich.org 70
i-ffplot_plot(struct ffplot *plot, struct csv *vl, struct ffcolor *color, Err bitreich.org 70
i+ffplot_plot(struct ffplot *plot, struct tsv *vl, struct ffcolor *color, Err bitreich.org 70
i double vmin, double vmax, Err bitreich.org 70
i time_t tmin, time_t tmax) Err bitreich.org 70
i { Err bitreich.org 70
i@@ -310,7 +310,7 @@ ffplot_plot(struct ffplot *plot, struct csv *vl, struct ffcolor *color, Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i static void Err bitreich.org 70
i-ffplot_values(struct ffplot *plot, struct csv *vl, struct ffcolor **cl, size_t ncol, Err bitreich.org 70
i+ffplot_values(struct ffplot *plot, struct tsv *vl, struct ffcolor **cl, size_t ncol, Err bitreich.org 70
i time_t tmin, time_t tmax, Err bitreich.org 70
i double vmin, double vmax) Err bitreich.org 70
i { Err bitreich.org 70
i@@ -319,7 +319,7 @@ ffplot_values(struct ffplot *plot, struct csv *vl, struct ffcolor **cl, size_t n Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i static void Err bitreich.org 70
i-ffplot_legend(struct ffplot *plot, struct ffcolor *fg, struct csv *vl, struct ffcolor **cl, size_t ncol) Err bitreich.org 70
i+ffplot_legend(struct ffplot *plot, struct ffcolor *fg, struct tsv *vl, struct ffcolor **cl, size_t ncol) Err bitreich.org 70
i { Err bitreich.org 70
i size_t x, y; Err bitreich.org 70
i Err bitreich.org 70
i@@ -342,7 +342,7 @@ ffplot_legend(struct ffplot *plot, struct ffcolor *fg, struct csv *vl, struct ff Err bitreich.org 70
i * x label here Err bitreich.org 70
i */ Err bitreich.org 70
i static void Err bitreich.org 70
i-plot(struct csv *vl, struct ffcolor **cl, size_t ncol, char *name) Err bitreich.org 70
i+plot(struct tsv *vl, struct ffcolor **cl, size_t ncol, char *name) Err bitreich.org 70
i { Err bitreich.org 70
i struct ffplot plot = { IMAGE_W, IMAGE_H, 0, 0, NULL }; Err bitreich.org 70
i struct ffcolor plot_bg = { 0x2222, 0x2222, 0x2222, 0xffff }; Err bitreich.org 70
i@@ -353,7 +353,7 @@ plot(struct csv *vl, struct ffcolor **cl, size_t ncol, char *name) Err bitreich.org 70
i double vmin, vmax, vstep; Err bitreich.org 70
i time_t tmin, tmax, tstep; Err bitreich.org 70
i Err bitreich.org 70
i- csv_min_max(vl, ncol, &tmin, &tmax, &vmin, &vmax); Err bitreich.org 70
i+ tsv_min_max(vl, ncol, &tmin, &tmax, &vmin, &vmax); Err bitreich.org 70
i tstep = scale_time_t(tmin, tmax, 7); Err bitreich.org 70
i vstep = scale_double(vmin, vmax, 7); Err bitreich.org 70
i Err bitreich.org 70
i@@ -424,7 +424,7 @@ usage(void) 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- struct csv *vl; Err bitreich.org 70
i+ struct tsv *vl; Err bitreich.org 70
i struct ffcolor **cl; Err bitreich.org 70
i size_t ncol; Err bitreich.org 70
i int c; Err bitreich.org 70
i@@ -451,12 +451,12 @@ main(int argc, char **argv) Err bitreich.org 70
i if ((cl = calloc(argc, sizeof *cl)) == NULL) Err bitreich.org 70
i err(1, "calloc: %s", strerror(errno)); Err bitreich.org 70
i Err bitreich.org 70
i- csv_labels(stdin, &vl, &ncol); Err bitreich.org 70
i+ tsv_labels(stdin, &vl, &ncol); Err bitreich.org 70
i if (ncol > (size_t)argc) Err bitreich.org 70
i err(1, "too many columns or not enough arguments"); Err bitreich.org 70
i else if (ncol < (size_t)argc) Err bitreich.org 70
i err(1, "too many arguments or not enough columns"); Err bitreich.org 70
i- csv_values(stdin, vl, ncol); Err bitreich.org 70
i+ tsv_values(stdin, vl, ncol); Err bitreich.org 70
i argv_to_color(cl, argv); Err bitreich.org 70
i Err bitreich.org 70
i plot(vl, cl, argc, flag_title); Err bitreich.org 70
1diff --git a/ploot-feed.1 b/ploot-feed.1 /scm/ploot/file/ploot-feed.1.gph bitreich.org 70
i@@ -20,7 +20,7 @@ Err bitreich.org 70
i . Err bitreich.org 70
i The Err bitreich.org 70
i .Nm Err bitreich.org 70
i-utility plots a text chart of csv values coming from stdin in real time. Err bitreich.org 70
i+utility plots a text chart of tsv values coming from stdin in real time. Err bitreich.org 70
i . Err bitreich.org 70
i .Bl -tag -width 6n Err bitreich.org 70
i . Err bitreich.org 70
i@@ -29,14 +29,14 @@ is the width of the plot in characters. Err bitreich.org 70
i . Err bitreich.org 70
i .It Ar maxval Err bitreich.org 70
i is a list of argument that specify the maximum value for each column. Err bitreich.org 70
i-If the input csv have 5 columns in addition of the timestamp, there must Err bitreich.org 70
i+If the input tsv have 5 columns in addition of the timestamp, there must Err bitreich.org 70
i be 5 maxval arguments. Err bitreich.org 70
i . Err bitreich.org 70
i .El Err bitreich.org 70
i . Err bitreich.org 70
i .Pp Err bitreich.org 70
i The input format is documented in the Err bitreich.org 70
i-.Xr ploot-csv 7 Err bitreich.org 70
i+.Xr ploot-tsv 7 Err bitreich.org 70
i manual page. Err bitreich.org 70
i . Err bitreich.org 70
i . Err bitreich.org 70
1diff --git a/ploot-feed.c b/ploot-feed.c /scm/ploot/file/ploot-feed.c.gph bitreich.org 70
i@@ -59,14 +59,14 @@ plot_row(long *out, char *line, double *max, int nrow, int ncol) Err bitreich.org 70
i int n; Err bitreich.org 70
i char *tok; Err bitreich.org 70
i Err bitreich.org 70
i- tok = strsep(&line, ","); Err bitreich.org 70
i+ tok = strsep(&line, "\t"); Err bitreich.org 70
i if (!tok) Err bitreich.org 70
i err(100, "*** missing epoch value"); Err bitreich.org 70
i epoch = strtol(tok, NULL, 10); Err bitreich.org 70
i if (errno) Err bitreich.org 70
i warn("*** parsing epoch '%s'", tok); Err bitreich.org 70
i Err bitreich.org 70
i- for (n = 0; (tok = strsep(&line, ",")) != NULL; n++) { Err bitreich.org 70
i+ for (n = 0; (tok = strsep(&line, "\t")) != NULL; n++) { Err bitreich.org 70
i if (n >= ncol) Err bitreich.org 70
i err(100, "too many values"); Err bitreich.org 70
i val = atof(tok); Err bitreich.org 70
i@@ -186,10 +186,10 @@ read_labels(char **labv) Err bitreich.org 70
i strchomp(line); Err bitreich.org 70
i cp = line; Err bitreich.org 70
i Err bitreich.org 70
i- if (strcmp(strsep(&cp, ","), "epoch") != 0) Err bitreich.org 70
i+ if (strcmp(strsep(&cp, "\t"), "epoch") != 0) Err bitreich.org 70
i err(100, "first label must be 'epoch'"); Err bitreich.org 70
i Err bitreich.org 70
i- for (ncol = 0; (tok = strsep(&cp, ",")) != NULL; ncol++, labv++) Err bitreich.org 70
i+ for (ncol = 0; (tok = strsep(&cp, "\t")) != NULL; ncol++, labv++) Err bitreich.org 70
i *labv = tok; Err bitreich.org 70
i *labv = NULL; Err bitreich.org 70
i Err bitreich.org 70
i@@ -212,7 +212,7 @@ fmt_labels(char out[4069], int ncol, char *labels[4069 / 2]) 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 [-w width] maxval... <csv\n", arg0); Err bitreich.org 70
i+ fprintf(stderr, "usage: %s [-w width] maxval... <tsv\n", arg0); Err bitreich.org 70
i exit(1); Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
1diff --git a/ploot-tsv.5 b/ploot-tsv.5 /scm/ploot/file/ploot-tsv.5.gph bitreich.org 70
i@@ -0,0 +1,77 @@ Err bitreich.org 70
i+.Dd $Mdocdate: February 01 2020$ Err bitreich.org 70
i+.Dt PLOOT-TSV 5 Err bitreich.org 70
i+.Os Err bitreich.org 70
i+. Err bitreich.org 70
i+. Err bitreich.org 70
i+.Sh NAME Err bitreich.org 70
i+. Err bitreich.org 70
i+.Nm ploot-tsv Err bitreich.org 70
i+.Nd input format used by the ploot set of programs Err bitreich.org 70
i+. Err bitreich.org 70
i+. Err bitreich.org 70
i+.Sh SYNOPSIS Err bitreich.org 70
i+. Err bitreich.org 70
i+.Bd -literal Err bitreich.org 70
i+epoch,column-name-1,column-name-2 Err bitreich.org 70
i+timestamp,value1,value2 Err bitreich.org 70
i+timestamp,value1,value2 Err bitreich.org 70
i+\&... Err bitreich.org 70
i+.Ed Err bitreich.org 70
i+. Err bitreich.org 70
i+. Err bitreich.org 70
i+.Sh DESCRIPTION Err bitreich.org 70
i+. Err bitreich.org 70
i+This is the simple coma-separated format used by the ploot-* programs. Err bitreich.org 70
i+. Err bitreich.org 70
i+. Err bitreich.org 70
i+.Sh INPUT FORMAT Err bitreich.org 70
i+. Err bitreich.org 70
i+.Nm Err bitreich.org 70
i+has a first header line, then zero or more data lines, both Err bitreich.org 70
i+coma-separated list of values. Err bitreich.org 70
i+. Err bitreich.org 70
i+. Err bitreich.org 70
i+.Ss Header line Err bitreich.org 70
i+. Err bitreich.org 70
i+The input must contain a first header line with the label of each column in order. Err bitreich.org 70
i+The first column is always Err bitreich.org 70
i+.Dq epoch . Err bitreich.org 70
i+Then there are the actual column names. Err bitreich.org 70
i+. Err bitreich.org 70
i+.Bd -literal -offset indent Err bitreich.org 70
i+epoch,free_memory,process_count Err bitreich.org 70
i+.Ed Err bitreich.org 70
i+. Err bitreich.org 70
i+. Err bitreich.org 70
i+.Ss Data lines Err bitreich.org 70
i+. Err bitreich.org 70
i+The following lines are the data. Err bitreich.org 70
i+The first column is always an unix timestamp as in Err bitreich.org 70
i+.Vt time_t . Err bitreich.org 70
i+The remaining columns are values parsed as floating point numbers by Err bitreich.org 70
i+.Xr strtod 3 : Err bitreich.org 70
i+. Err bitreich.org 70
i+.Bd -literal -offset indent Err bitreich.org 70
i+1533752053,16.3,45 Err bitreich.org 70
i+1533752054,18.7,42 Err bitreich.org 70
i+1533752055,40.1,39 Err bitreich.org 70
i+1533752056,40.1,39 Err bitreich.org 70
i+.Ed Err bitreich.org 70
i+. Err bitreich.org 70
i+. Err bitreich.org 70
i+.Sh SEE ALSO Err bitreich.org 70
i+. Err bitreich.org 70
i+.Xr ploot-feed 1 , Err bitreich.org 70
i+.Xr ploot-farbfeld 1 Err bitreich.org 70
i+. Err bitreich.org 70
i+.Sh HISTORY Err bitreich.org 70
i+. Err bitreich.org 70
i+.Nm Err bitreich.org 70
i+was defined at Err bitreich.org 70
i+.Lk gopher://bitreich.org/1/scm/ploot/ "Bitreich" Err bitreich.org 70
i+. Err bitreich.org 70
i+. Err bitreich.org 70
i+.Sh AUTHORS Err bitreich.org 70
i+. Err bitreich.org 70
i+.An Josuah Demangeon Err bitreich.org 70
i+.Aq Mt me@josuah.net Err bitreich.org 70
1diff --git a/tsv.c b/tsv.c /scm/ploot/file/tsv.c.gph bitreich.org 70
i@@ -0,0 +1,154 @@ Err bitreich.org 70
i+#include "tsv.h" Err bitreich.org 70
i+#include <errno.h> Err bitreich.org 70
i+#include <assert.h> Err bitreich.org 70
i+#include <string.h> Err bitreich.org 70
i+#include <time.h> Err bitreich.org 70
i+#include <stdlib.h> Err bitreich.org 70
i+#include <limits.h> Err bitreich.org 70
i+#include <time.h> Err bitreich.org 70
i+#include "util.h" Err bitreich.org 70
i+ Err bitreich.org 70
i+/* Err bitreich.org 70
i+ * Read TSV data onto a set of (struct tsv) and some utilities to work on these data. Err bitreich.org 70
i+ */ Err bitreich.org 70
i+ Err bitreich.org 70
i+int Err bitreich.org 70
i+tsv_min_max(struct tsv *vl, int ncol, Err bitreich.org 70
i+ time_t *tmin, time_t *tmax, Err bitreich.org 70
i+ double *vmin, double *vmax) Err bitreich.org 70
i+{ Err bitreich.org 70
i+ double *v; Err bitreich.org 70
i+ time_t *t; Err bitreich.org 70
i+ size_t n; Err bitreich.org 70
i+ Err bitreich.org 70
i+ *vmin = *vmax = 0; /* always show 0 on the scale */ Err bitreich.org 70
i+ *tmin = *tmax = *vl->t; Err bitreich.org 70
i+ Err bitreich.org 70
i+ for (; ncol > 0; ncol--, vl++) { Err bitreich.org 70
i+ for (t = vl->t, v = vl->v, n = vl->n; n > 0; t++, v++, n--) { Err bitreich.org 70
i+ if (*v < *vmin) *vmin = *v; Err bitreich.org 70
i+ if (*v > *vmax) *vmax = *v; Err bitreich.org 70
i+ if (*t < *tmin) *tmin = *t; Err bitreich.org 70
i+ if (*t > *tmax) *tmax = *t; Err bitreich.org 70
i+ } Err bitreich.org 70
i+ } Err bitreich.org 70
i+ if (*tmin == *tmax) Err bitreich.org 70
i+ return -1; Err bitreich.org 70
i+ return 0; Err bitreich.org 70
i+} Err bitreich.org 70
i+ Err bitreich.org 70
i+static void Err bitreich.org 70
i+tsv_add_time(struct tsv *vl, time_t epoch) Err bitreich.org 70
i+{ Err bitreich.org 70
i+ void *mem; Err bitreich.org 70
i+ Err bitreich.org 70
i+ if ((mem = realloc(vl->t, (vl->n + 1) * sizeof *vl->t)) == NULL) Err bitreich.org 70
i+ err(1, "realloc: %s", strerror(errno)); Err bitreich.org 70
i+ vl->t = mem; Err bitreich.org 70
i+ vl->t[vl->n] = epoch; Err bitreich.org 70
i+} Err bitreich.org 70
i+ Err bitreich.org 70
i+static void Err bitreich.org 70
i+tsv_add_val(struct tsv *vl, double field) Err bitreich.org 70
i+{ Err bitreich.org 70
i+ void *mem; Err bitreich.org 70
i+ Err bitreich.org 70
i+ if ((mem = realloc(vl->v, (vl->n + 1) * sizeof *vl->v)) == NULL) Err bitreich.org 70
i+ err(1, "", strerror(errno)); Err bitreich.org 70
i+ vl->v = mem; Err bitreich.org 70
i+ vl->v[vl->n] = 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. The time_t Err bitreich.org 70
i+ * buffer is shared among all fields. Err bitreich.org 70
i+ */ Err bitreich.org 70
i+static void Err bitreich.org 70
i+tsv_add_row(struct tsv *vl, size_t ncol, char *line) Err bitreich.org 70
i+{ Err bitreich.org 70
i+ char *field; Err bitreich.org 70
i+ time_t *tbuf; Err bitreich.org 70
i+ long l; Err bitreich.org 70
i+ double d; Err bitreich.org 70
i+ Err bitreich.org 70
i+ if ((field = strsep(&line, "\t")) == NULL) Err bitreich.org 70
i+ err(1, "missing epoch at row %zu", vl->n); Err bitreich.org 70
i+ Err bitreich.org 70
i+ l = strtol(field, NULL, 10); Err bitreich.org 70
i+ if (errno) Err bitreich.org 70
i+ err(100, "parsing number '%s'", field); Err bitreich.org 70
i+ Err bitreich.org 70
i+ tsv_add_time(vl, l); Err bitreich.org 70
i+ tbuf = vl[0].t; Err bitreich.org 70
i+ for (; (field = strsep(&line, "\t")); ncol--, vl->n++, vl++) { Err bitreich.org 70
i+ if (ncol == 0) Err bitreich.org 70
i+ err(1, "too many fields at line %zu", vl->n); Err bitreich.org 70
i+ d = strtod(field, NULL); Err bitreich.org 70
i+ if (errno) Err bitreich.org 70
i+ err(100, "parsing double '%s'", field); Err bitreich.org 70
i+ tsv_add_val(vl, d); Err bitreich.org 70
i+ vl->t = tbuf; Err bitreich.org 70
i+ } Err bitreich.org 70
i+ if (ncol > 0) Err bitreich.org 70
i+ err(1, "too few fields at line %zu", vl->n); 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+ * label1,label2,label3 Err bitreich.org 70
i+ */ Err bitreich.org 70
i+void Err bitreich.org 70
i+tsv_labels(FILE *fp, struct tsv **vlp, size_t *ncol) Err bitreich.org 70
i+{ Err bitreich.org 70
i+ char *field, *line, *cp; Err bitreich.org 70
i+ struct tsv *vl, *col; Err bitreich.org 70
i+ size_t sz; Err bitreich.org 70
i+ ssize_t r; Err bitreich.org 70
i+ Err bitreich.org 70
i+ sz = 0, line = NULL; Err bitreich.org 70
i+ r = getline(&line, &sz, fp); Err bitreich.org 70
i+ if (ferror(fp)) Err bitreich.org 70
i+ err(111, "error while reading from file"); Err bitreich.org 70
i+ if (feof(fp)) Err bitreich.org 70
i+ err(100, "missing label line"); Err bitreich.org 70
i+ strchomp(line); Err bitreich.org 70
i+ Err bitreich.org 70
i+ cp = line; Err bitreich.org 70
i+ if (strcmp(strsep(&cp, "\t"), "epoch") != 0) Err bitreich.org 70
i+ err(1, "first label must be 'epoch'"); Err bitreich.org 70
i+ Err bitreich.org 70
i+ sz = 0, vl = NULL, *ncol = 0; Err bitreich.org 70
i+ while ((field = strsep(&cp, "\t"))) { Err bitreich.org 70
i+ if ((vl = realloc(vl, sz += sizeof *vl)) == NULL) Err bitreich.org 70
i+ err(1, "realloc: %s", strerror(errno)); Err bitreich.org 70
i+ col = vl + (*ncol)++; Err bitreich.org 70
i+ memset(col, 0, sizeof *vl); Err bitreich.org 70
i+ strlcpy(col->label, field, sizeof col->label); Err bitreich.org 70
i+ } Err bitreich.org 70
i+ free(line); Err bitreich.org 70
i+ *vlp = vl; 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+ * val1a,val1b,val1c ^ Err bitreich.org 70
i+ * val2a,val2b,val2c | Err bitreich.org 70
i+ * val3a,val3b,val3c (vl->n) Err bitreich.org 70
i+ * val4a,val4b,val4c | Err bitreich.org 70
i+ * val5a,val5b,val5c v Err bitreich.org 70
i+ */ Err bitreich.org 70
i+void Err bitreich.org 70
i+tsv_values(FILE *fp, struct tsv *vl, size_t ncol) Err bitreich.org 70
i+{ Err bitreich.org 70
i+ char *line; Err bitreich.org 70
i+ size_t sz; Err bitreich.org 70
i+ Err bitreich.org 70
i+ sz = 0, line = NULL; Err bitreich.org 70
i+ while (getline(&line, &sz, fp) > -1) Err bitreich.org 70
i+ tsv_add_row(vl, ncol, line); Err bitreich.org 70
i+ if (vl->n == 0) Err bitreich.org 70
i+ err(1, "no value could be read"); Err bitreich.org 70
i+ if (vl->n == 1) Err bitreich.org 70
i+ err(1, "only one value could be read"); Err bitreich.org 70
i+ free(line); Err bitreich.org 70
i+} Err bitreich.org 70
1diff --git a/tsv.h b/tsv.h /scm/ploot/file/tsv.h.gph bitreich.org 70
i@@ -0,0 +1,22 @@ Err bitreich.org 70
i+#ifndef TSV_H Err bitreich.org 70
i+#define TSV_H Err bitreich.org 70
i+ Err bitreich.org 70
i+#include <stdio.h> Err bitreich.org 70
i+#include <time.h> Err bitreich.org 70
i+ Err bitreich.org 70
i+/* Err bitreich.org 70
i+ * List of values and timestamps. Both have their dedicated buffer Err bitreich.org 70
i+ * so that the timestamp buffer can be shared across tsv objects. Err bitreich.org 70
i+ */ Err bitreich.org 70
i+struct tsv { 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+ size_t n; /* number of values */ Err bitreich.org 70
i+ char label[64]; /* for the legend */ Err bitreich.org 70
i+}; Err bitreich.org 70
i+ Err bitreich.org 70
i+void tsv_labels(FILE *, struct tsv **, size_t *); Err bitreich.org 70
i+void tsv_values(FILE *, struct tsv *, size_t); Err bitreich.org 70
i+int tsv_min_max(struct tsv *, int, time_t *, time_t *, double *, double *); Err bitreich.org 70
i+ Err bitreich.org 70
i+#endif Err bitreich.org 70
.
Response:
text/plain