SMOLNET PORTAL home about changes
iploot-farbfeld: comeback - 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 8836c19534760f2ce037c39bde9dc5591011ed07	/scm/ploot/commit/8836c19534760f2ce037c39bde9dc5591011ed07.gph	bitreich.org	70
1parent eb816ab512727f55665f05809c78563ff93a94cc	/scm/ploot/commit/eb816ab512727f55665f05809c78563ff93a94cc.gph	bitreich.org	70
hAuthor: Josuah Demangeon <me@josuah.net>	URL:mailto:me@josuah.net	bitreich.org	70
iDate:   Sun, 27 Jun 2021 04:51:38 +0200	Err	bitreich.org	70
i	Err	bitreich.org	70
iploot-farbfeld: comeback	Err	bitreich.org	70
i	Err	bitreich.org	70
iDiffstat:	Err	bitreich.org	70
i  M Makefile                            |       2 +-	Err	bitreich.org	70
i  M csv.c                               |      27 ++++++++++++++++++++++++++-	Err	bitreich.org	70
i  M csv.h                               |       1 +	Err	bitreich.org	70
i  A example.png                         |       0 	Err	bitreich.org	70
i  M ploot-braille.c                     |      90 +++----------------------------	Err	bitreich.org	70
i  M ploot-farbfeld.1                    |       4 ----	Err	bitreich.org	70
i  M ploot-farbfeld.c                    |      64 +++++++++++++------------------	Err	bitreich.org	70
i  M util.c                              |      53 ++++++++++++++++++++++++++++++	Err	bitreich.org	70
i  M util.h                              |       3 +++	Err	bitreich.org	70
i	Err	bitreich.org	70
i9 files changed, 118 insertions(+), 126 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@@ -9,7 +9,7 @@ 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+BIN = ploot-feed ploot-braille ploot-text  ploot-farbfeld	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/csv.c b/csv.c	/scm/ploot/file/csv.c.gph	bitreich.org	70
i@@ -9,9 +9,34 @@	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).	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
1diff --git a/csv.h b/csv.h	/scm/ploot/file/csv.h.gph	bitreich.org	70
i@@ -17,5 +17,6 @@ struct csv {	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.png b/example.png	/scm/ploot/file/example.png.gph	bitreich.org	70
iBinary files differ.	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@@ -15,85 +15,6 @@	Err	bitreich.org	70
i #define pledge(...) 0	Err	bitreich.org	70
i #endif	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-static int	Err	bitreich.org	70
i-get_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 time_t	Err	bitreich.org	70
i-time_mark_step(time_t min, time_t max, int dots)	Err	bitreich.org	70
i-{	Err	bitreich.org	70
i-        time_t dt, scale[] = {	Err	bitreich.org	70
i-                1, 5, 2, 10, 20, 30, 60, 60*2, 60*5, 60*10, 60*20, 60*30, 3600, 	Err	bitreich.org	70
i-                3600*2, 3600*6, 3600*12, 3600*24, 3600*24*2, 	Err	bitreich.org	70
i-                3600*24*7, 3600*24*14, 3600*24*20, 3600*24*21, 3600*24*28, 3600*24*50,	Err	bitreich.org	70
i-                3600*24*100, 3600*24*365, 0	Err	bitreich.org	70
i-        };	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        dt = max - min;	Err	bitreich.org	70
i-        for (time_t *sc = scale; *sc > 0; sc++)	Err	bitreich.org	70
i-                if (dt < *sc * dots)	Err	bitreich.org	70
i-                        return *sc;	Err	bitreich.org	70
i-        return dt / dots;	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-/*	Err	bitreich.org	70
i- * Make the value scale aligned with round values by changing the	Err	bitreich.org	70
i- * minimal and maximal values.	Err	bitreich.org	70
i- */	Err	bitreich.org	70
i-static void	Err	bitreich.org	70
i-adjust_scale(double *min, double *max, int rows)	Err	bitreich.org	70
i-{	Err	bitreich.org	70
i-        double dv, step, scale[] = { 1, 2, 2.5, 5, };	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        dv = *max - *min;	Err	bitreich.org	70
i-	Err	bitreich.org	70
i-        step = 1;	Err	bitreich.org	70
i-        if (dv > 1) {	Err	bitreich.org	70
i-                for (double mant = 1;; mant *= 10) {	Err	bitreich.org	70
i-                        double *sc = scale;	Err	bitreich.org	70
i-                        for (; sc < scale + LEN(scale); sc++) {	Err	bitreich.org	70
i-                                step = mant * *sc;	Err	bitreich.org	70
i-                                if (dv < rows * step)	Err	bitreich.org	70
i-                                        goto end;	Err	bitreich.org	70
i-                        }	Err	bitreich.org	70
i-                }	Err	bitreich.org	70
i-        } else {	Err	bitreich.org	70
i-                for (double mant = 1;; mant /= 10) {	Err	bitreich.org	70
i-                        double *sc = scale + LEN(scale) - 1;	Err	bitreich.org	70
i-                        for (; sc >= scale; sc--) {	Err	bitreich.org	70
i-                                double tmp = mant * *sc;	Err	bitreich.org	70
i-                                if (dv > rows * tmp)	Err	bitreich.org	70
i-                                        goto end;	Err	bitreich.org	70
i-                                step = tmp;	Err	bitreich.org	70
i-                        }	Err	bitreich.org	70
i-                }	Err	bitreich.org	70
i-        }	Err	bitreich.org	70
i-end:	Err	bitreich.org	70
i-        *min = (int)(*min / step) * step;	Err	bitreich.org	70
i-        *max = *min + step * rows;	Err	bitreich.org	70
i-}	Err	bitreich.org	70
i-	Err	bitreich.org	70
i /*	Err	bitreich.org	70
i  * Plot the body as an histogram interpolating the gaps and include	Err	bitreich.org	70
i  * a vertical and horizontal axis.	Err	bitreich.org	70
i@@ -185,17 +106,20 @@ braille_render(struct drawille *drw, FILE *fp, double min, double max)	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 {	Err	bitreich.org	70
i-        double vmin, vmax;	Err	bitreich.org	70
i+        double vmin, vmax, vstep;	Err	bitreich.org	70
i         time_t tmin, tmax, tstep;	Err	bitreich.org	70
i         struct drawille *drw;	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 (get_min_max(vl, ncol, &tmin, &tmax, &vmin, &vmax) < 0)	Err	bitreich.org	70
i+        if (csv_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-        adjust_scale(&vmin, &vmax, rows);	Err	bitreich.org	70
i-        tstep = time_mark_step(tmin, tmax, cols);	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        tstep = scale_time_t(tmin, tmax, cols);	Err	bitreich.org	70
i+        vstep = scale_double(vmin, vmax, rows);	Err	bitreich.org	70
i+        vmin = (int)(vmin / vstep) * vstep;	Err	bitreich.org	70
i+        vmax = vmin + vstep * rows;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         for (; ncol > 0; vl++, ncol--) {	Err	bitreich.org	70
i                 if ((drw = drawille_new(rows, cols)) == NULL)	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@@ -13,7 +13,6 @@	Err	bitreich.org	70
i .	Err	bitreich.org	70
i .Nm ploot-ffplot	Err	bitreich.org	70
i .Op Fl t Ar title	Err	bitreich.org	70
i-.Op Fl u Ar unit	Err	bitreich.org	70
i .Ar colors...	Err	bitreich.org	70
i .	Err	bitreich.org	70
i .	Err	bitreich.org	70
i@@ -28,9 +27,6 @@ utility plots an image in the ffplot format out of csv values coming from stdin.	Err	bitreich.org	70
i .It Fl t	Err	bitreich.org	70
i Set the title of the plot printed at the top left corner.	Err	bitreich.org	70
i .	Err	bitreich.org	70
i-.It Fl u	Err	bitreich.org	70
i-Set the unit description printed at the top right 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
1diff --git a/ploot-farbfeld.c b/ploot-farbfeld.c	/scm/ploot/file/ploot-farbfeld.c.gph	bitreich.org	70
i@@ -13,24 +13,23 @@	Err	bitreich.org	70
i #include <unistd.h>	Err	bitreich.org	70
i #include "csv.h"	Err	bitreich.org	70
i #include "font.h"	Err	bitreich.org	70
i-#include "scale.h"	Err	bitreich.org	70
i #include "util.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 #endif	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-#define MARGIN                4	Err	bitreich.org	70
i+#define MARGIN                8	Err	bitreich.org	70
i 	Err	bitreich.org	70
i #define IMAGE_H                (TITLE_H + PLOT_H + XLABEL_H)	Err	bitreich.org	70
i-#define IMAGE_W                (YLABEL_W + PLOT_W + LEGEND_W)	Err	bitreich.org	70
i+#define IMAGE_W                (MARGIN + YLABEL_W + PLOT_W + MARGIN)	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-#define TITLE_X                (YLABEL_W)	Err	bitreich.org	70
i-#define TITLE_Y                (IMAGE_H - TITLE_H)	Err	bitreich.org	70
i+#define TITLE_X                (MARGIN)	Err	bitreich.org	70
i+#define TITLE_Y                (IMAGE_H - TITLE_H / 2)	Err	bitreich.org	70
i #define TITLE_H                ((font)->height * 2)	Err	bitreich.org	70
i #define TITLE_W                (PLOT_W)	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-#define YLABEL_X        (0)	Err	bitreich.org	70
i+#define YLABEL_X        (MARGIN)	Err	bitreich.org	70
i #define YLABEL_Y        (PLOT_Y)	Err	bitreich.org	70
i #define YLABEL_H        (PLOT_H)	Err	bitreich.org	70
i #define YLABEL_W        (40 + MARGIN)	Err	bitreich.org	70
i@@ -40,14 +39,13 @@	Err	bitreich.org	70
i #define XLABEL_H        ((font)->height * 2)	Err	bitreich.org	70
i #define XLABEL_W        (PLOT_W)	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-#define PLOT_X                (YLABEL_W)	Err	bitreich.org	70
i+#define PLOT_X                (YLABEL_X + YLABEL_W)	Err	bitreich.org	70
i #define PLOT_Y                (XLABEL_H)	Err	bitreich.org	70
i #define PLOT_W                (700)	Err	bitreich.org	70
i #define PLOT_H                (160)	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-#define LEGEND_X        (IMAGE_W - LEGEND_W)	Err	bitreich.org	70
i-#define LEGEND_Y        (TITLE_H + PLOT_H - (font)->height)	Err	bitreich.org	70
i-#define LEGEND_W        (100)	Err	bitreich.org	70
i+#define LEGEND_X        (IMAGE_W / 2)	Err	bitreich.org	70
i+#define LEGEND_Y        (TITLE_Y)	Err	bitreich.org	70
i #define LEGEND_H        (PLOT_H)	Err	bitreich.org	70
i 	Err	bitreich.org	70
i struct ffcolor {	Err	bitreich.org	70
i@@ -76,8 +74,7 @@ static struct colorname {	Err	bitreich.org	70
i         { NULL, { 0, 0, 0, 0 } }	Err	bitreich.org	70
i };	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-static char *tflag = "";	Err	bitreich.org	70
i-static char *uflag = "";	Err	bitreich.org	70
i+static char *flag_title = "";	Err	bitreich.org	70
i static struct font *font = &font13;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i /*	Err	bitreich.org	70
i@@ -212,7 +209,7 @@ ffplot_print(FILE *fp, struct ffplot *plot)	Err	bitreich.org	70
i         w = htonl(plot->w);	Err	bitreich.org	70
i         h = htonl(plot->h);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-        fprintf(stdout, "ffplot");	Err	bitreich.org	70
i+        fprintf(stdout, "farbfeld");	Err	bitreich.org	70
i         fwrite(&w, sizeof(w), 1, fp);	Err	bitreich.org	70
i         fwrite(&h, sizeof(h), 1, fp);	Err	bitreich.org	70
i         fwrite(plot->buf, plot->w * plot->h, sizeof(*plot->buf), fp);	Err	bitreich.org	70
i@@ -284,12 +281,9 @@ ffplot_yaxis(struct ffplot *plot, struct ffcolor *label, struct ffcolor *grid,	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i static void	Err	bitreich.org	70
i-ffplot_title(struct ffplot *plot,	Err	bitreich.org	70
i-        struct ffcolor *ct, char *title,	Err	bitreich.org	70
i-        struct ffcolor *cu, char *unit)	Err	bitreich.org	70
i+ffplot_title(struct ffplot *plot, struct ffcolor *ct, char *title)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i         ffplot_text_left(plot, ct, font, title, TITLE_H / 2, 0);	Err	bitreich.org	70
i-        ffplot_text_right(plot, cu, font, unit, TITLE_H / 2, TITLE_W);	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i static void	Err	bitreich.org	70
i@@ -329,27 +323,26 @@ ffplot_legend(struct ffplot *plot, struct ffcolor *fg, struct csv *vl, struct ff	Err	bitreich.org	70
i {	Err	bitreich.org	70
i         size_t x, y;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i+        x = y = 0;	Err	bitreich.org	70
i         for (; ncol > 0; ncol--, vl++, cl++) {	Err	bitreich.org	70
i-                y = -(ncol - 1) * (font->height + MARGIN);	Err	bitreich.org	70
i-                x = MARGIN * 2;	Err	bitreich.org	70
i                 x = ffplot_text_left(plot, *cl, font, "-", x, y) + MARGIN;	Err	bitreich.org	70
i                 x = ffplot_text_left(plot, fg, font, vl->label, x, y);	Err	bitreich.org	70
i+                x = ffplot_text_left(plot, fg, font, "   ", x, y);	Err	bitreich.org	70
i         }	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i /*	Err	bitreich.org	70
i- * Plot the 'n' values list of the 'v' arrax with title 'name' and	Err	bitreich.org	70
i- * 'units' label.	Err	bitreich.org	70
i+ * Plot the 'n' values list of the 'v' arrax with title 'name' label.	Err	bitreich.org	70
i  *	Err	bitreich.org	70
i- *               Title       (units)	Err	bitreich.org	70
i- *             x ^                    Legend	Err	bitreich.org	70
i- *         label | - + - + - + - + -   ....	Err	bitreich.org	70
i- *          here | - + - + - + - + -   ....	Err	bitreich.org	70
i+ *               Title      Legend	Err	bitreich.org	70
i+ *             x ^                   	Err	bitreich.org	70
i+ *         label | - + - + - + - + -	Err	bitreich.org	70
i+ *          here | - + - + - + - + -	Err	bitreich.org	70
i  *               +---+---+---+---+-->	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, char *units)	Err	bitreich.org	70
i+plot(struct csv *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@@ -360,9 +353,9 @@ plot(struct csv *vl, struct ffcolor **cl, size_t ncol, char *name, char *units)	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-        scale_minmax(vl, ncol, &tmin, &tmax, &vmin, &vmax);	Err	bitreich.org	70
i-        tstep = scale_tstep(tmin, tmax, 7);	Err	bitreich.org	70
i-        vstep = scale_vstep(vmin, vmax, 7);	Err	bitreich.org	70
i+        csv_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         if ((plot.buf = calloc(IMAGE_H * IMAGE_W, sizeof *plot.buf)) == NULL)	Err	bitreich.org	70
i                 err(1, "calloc: %s", strerror(errno));	Err	bitreich.org	70
i@@ -385,7 +378,7 @@ plot(struct csv *vl, struct ffcolor **cl, size_t ncol, char *name, char *units)	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         plot.x = TITLE_X;	Err	bitreich.org	70
i         plot.y = TITLE_Y;	Err	bitreich.org	70
i-        ffplot_title(&plot, &title_fg, name, &label_fg, units);	Err	bitreich.org	70
i+        ffplot_title(&plot, &title_fg, name);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         plot.x = PLOT_X;	Err	bitreich.org	70
i         plot.y = PLOT_Y;	Err	bitreich.org	70
i@@ -420,7 +413,7 @@ argv_to_color(struct ffcolor **cl, char **argv)	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 [-t title] [-u unit] {", arg0);	Err	bitreich.org	70
i+        fprintf(stderr, "usage: %s [-t title] {", arg0);	Err	bitreich.org	70
i         fputs(colorname->name, stderr);	Err	bitreich.org	70
i         for (struct colorname *cn = colorname + 1; cn->name != NULL; cn++)	Err	bitreich.org	70
i                 fprintf(stderr, ",%s", cn->name);	Err	bitreich.org	70
i@@ -440,13 +433,10 @@ main(int argc, char **argv)	Err	bitreich.org	70
i                 err(1, "pledge: %s", strerror(errno));	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         arg0 = *argv;	Err	bitreich.org	70
i-        while ((c = getopt(argc, argv, "t:u:")) > -1) {	Err	bitreich.org	70
i+        while ((c = getopt(argc, argv, "t:")) > -1) {	Err	bitreich.org	70
i                 switch (c) {	Err	bitreich.org	70
i                 case 't':	Err	bitreich.org	70
i-                        tflag = optarg;	Err	bitreich.org	70
i-                        break;	Err	bitreich.org	70
i-                case 'u':	Err	bitreich.org	70
i-                        uflag = optarg;	Err	bitreich.org	70
i+                        flag_title = optarg;	Err	bitreich.org	70
i                         break;	Err	bitreich.org	70
i                 default:	Err	bitreich.org	70
i                         usage();	Err	bitreich.org	70
i@@ -469,7 +459,7 @@ main(int argc, char **argv)	Err	bitreich.org	70
i         csv_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, tflag, uflag);	Err	bitreich.org	70
i+        plot(vl, cl, argc, flag_title);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         free(vl);	Err	bitreich.org	70
i         free(cl);	Err	bitreich.org	70
1diff --git a/util.c b/util.c	/scm/ploot/file/util.c.gph	bitreich.org	70
i@@ -1,4 +1,5 @@	Err	bitreich.org	70
i #include "util.h"	Err	bitreich.org	70
i+#include <assert.h>	Err	bitreich.org	70
i #include <ctype.h>	Err	bitreich.org	70
i #include <errno.h>	Err	bitreich.org	70
i #include <limits.h>	Err	bitreich.org	70
i@@ -122,3 +123,55 @@ humanize(char *str, double val)	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         return exp * 3;	Err	bitreich.org	70
i }	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+time_t	Err	bitreich.org	70
i+scale_time_t(time_t min, time_t max, int dots)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        time_t dt, scale[] = {	Err	bitreich.org	70
i+                1, 5, 2, 10, 20, 30, 60, 60*2, 60*5, 60*10, 60*20, 60*30, 3600, 	Err	bitreich.org	70
i+                3600*2, 3600*6, 3600*12, 3600*24, 3600*24*2, 	Err	bitreich.org	70
i+                3600*24*7, 3600*24*14, 3600*24*20, 3600*24*21, 3600*24*28, 3600*24*50,	Err	bitreich.org	70
i+                3600*24*100, 3600*24*365, 0	Err	bitreich.org	70
i+        };	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        dt = max - min;	Err	bitreich.org	70
i+        for (time_t *sc = scale; *sc > 0; sc++)	Err	bitreich.org	70
i+                if (dt < *sc * dots)	Err	bitreich.org	70
i+                        return *sc;	Err	bitreich.org	70
i+        return dt / dots;	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+/*	Err	bitreich.org	70
i+ * Make the value scale aligned with round values by changing the	Err	bitreich.org	70
i+ * minimal and maximal values.	Err	bitreich.org	70
i+ */	Err	bitreich.org	70
i+double	Err	bitreich.org	70
i+scale_double(double min, double max, int rows)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        double dv, step, scale[] = { 1, 2, 2.5, 5, };	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        dv = max - min;	Err	bitreich.org	70
i+        step = 1;	Err	bitreich.org	70
i+        if (dv > 1) {	Err	bitreich.org	70
i+                for (double mant = 1;; mant *= 10) {	Err	bitreich.org	70
i+                        double *sc = scale;	Err	bitreich.org	70
i+                        for (; sc < scale + LEN(scale); sc++) {	Err	bitreich.org	70
i+                                step = mant * *sc;	Err	bitreich.org	70
i+                                if (dv < rows * step)	Err	bitreich.org	70
i+                                        return step;	Err	bitreich.org	70
i+                        }	Err	bitreich.org	70
i+                }	Err	bitreich.org	70
i+        } else {	Err	bitreich.org	70
i+                for (double mant = 1;; mant /= 10) {	Err	bitreich.org	70
i+                        double *sc = scale + LEN(scale) - 1;	Err	bitreich.org	70
i+                        for (; sc >= scale; sc--) {	Err	bitreich.org	70
i+                                double tmp = mant * *sc;	Err	bitreich.org	70
i+                                if (dv > rows * tmp)	Err	bitreich.org	70
i+                                        return step;	Err	bitreich.org	70
i+                                step = tmp;	Err	bitreich.org	70
i+                        }	Err	bitreich.org	70
i+                }	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+        assert(!"not reached");	Err	bitreich.org	70
i+        return 0;	Err	bitreich.org	70
i+}	Err	bitreich.org	70
1diff --git a/util.h b/util.h	/scm/ploot/file/util.h.gph	bitreich.org	70
i@@ -2,6 +2,7 @@	Err	bitreich.org	70
i #define TOOL_H	Err	bitreich.org	70
i 	Err	bitreich.org	70
i #include <stddef.h>	Err	bitreich.org	70
i+#include <time.h>	Err	bitreich.org	70
i 	Err	bitreich.org	70
i #define LEN(x) (sizeof(x) / sizeof(*x))	Err	bitreich.org	70
i #define MAX(x, y) ((x) > (y) ? (x) : (y))	Err	bitreich.org	70
i@@ -18,5 +19,7 @@ void         put3utf(long);	Err	bitreich.org	70
i char        *strsep(char **, const char *);	Err	bitreich.org	70
i void         strchomp(char *);	Err	bitreich.org	70
i int         humanize(char *, double);	Err	bitreich.org	70
i+time_t         scale_time_t(time_t, time_t, int);	Err	bitreich.org	70
i+double         scale_double(double, double, int);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i #endif	Err	bitreich.org	70
.
Response: text/plain
Original URLgopher://bitreich.org/0/scm/ploot/commit/8836c19534760f2c...
Content-Typetext/plain; charset=utf-8