ifix the horizontal scale - 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 26a6e01805dd158f9f97be0cc9bf43f3d5b6db37 /scm/ploot/commit/26a6e01805dd158f9f97be0cc9bf43f3d5b6db37.gph bitreich.org 70 1parent 1d056caf74acaf182318297e2911fa8595fbd45c /scm/ploot/commit/1d056caf74acaf182318297e2911fa8595fbd45c.gph bitreich.org 70 hAuthor: Josuah Demangeon URL:mailto:me@josuah.net bitreich.org 70 iDate: Tue, 3 Mar 2020 21:26:54 +0100 Err bitreich.org 70 i Err bitreich.org 70 ifix the horizontal scale Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M Makefile | 18 +++++++++--------- Err bitreich.org 70 i M ploot-braille.c | 26 +++++++++++++++----------- Err bitreich.org 70 i A ploot-csv.5 | 77 +++++++++++++++++++++++++++++++ Err bitreich.org 70 i D ploot-csv.7 | 77 ------------------------------- Err bitreich.org 70 i M ploot-farbfeld.c | 6 ++++-- Err bitreich.org 70 i M ploot-feed.c | 2 +- Err bitreich.org 70 i M ploot-text.c | 2 +- Err bitreich.org 70 i M src/csv.c | 2 +- Err bitreich.org 70 i M src/ffplot.c | 2 +- Err bitreich.org 70 i M src/scale.c | 84 +++++++------------------------ Err bitreich.org 70 i M src/scale.h | 8 +++----- Err bitreich.org 70 i D src/tool.c | 80 ------------------------------- Err bitreich.org 70 i A src/util.c | 80 +++++++++++++++++++++++++++++++ Err bitreich.org 70 i R src/tool.h -> src/util.h | 0 Err bitreich.org 70 i Err bitreich.org 70 i14 files changed, 211 insertions(+), 253 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@@ -1,27 +1,27 @@ Err bitreich.org 70 i include config.mk Err bitreich.org 70 i Err bitreich.org 70 i src = src/csv.c src/drawille.c src/ffplot.c src/font.c src/font13.c \ Err bitreich.org 70 i- src/font8.c src/log.c src/scale.c src/tool.c Err bitreich.org 70 i+ src/font8.c src/log.c src/scale.c src/util.c Err bitreich.org 70 i inc = src/csv.h src/drawille.h src/ffplot.h src/font.h src/log.h \ Err bitreich.org 70 i- src/scale.h src/tool.h Err bitreich.org 70 i+ src/scale.h src/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 lib = -lm Err bitreich.org 70 i Err bitreich.org 70 i-all: $(bin) Err bitreich.org 70 i+all: ${bin} Err bitreich.org 70 i Err bitreich.org 70 i .c.o: Err bitreich.org 70 i ${CC} -c ${CFLAGS} -o $@ $< Err bitreich.org 70 i Err bitreich.org 70 i ${obj} ${bin:=.o}: ${inc} Makefile Err bitreich.org 70 i ${bin}: ${obj} ${bin:=.o} Err bitreich.org 70 i- ${CC} $(LFLAGS) -o $@ $@.o ${obj} $(lib) Err bitreich.org 70 i+ ${CC} ${LFLAGS} -o $@ $@.o ${obj} ${lib} Err bitreich.org 70 i Err bitreich.org 70 i-install: $(bin) Err bitreich.org 70 i- mkdir -p ${PREFIX}/bin $(MANDIR)/man1 $(MANDIR)/man7 Err bitreich.org 70 i- cp $(bin) ${PREFIX}/bin Err bitreich.org 70 i- cp ploot-farbfeld.1 ploot-feed.1 $(MANDIR)/man1 Err bitreich.org 70 i- cp ploot-csv.7 $(MANDIR)/man7 Err bitreich.org 70 i+install: ${bin} Err bitreich.org 70 i+ mkdir -p ${PREFIX}/bin ${MANDIR}/man1 ${MANDIR}/man5 Err bitreich.org 70 i+ cp ${bin} ${PREFIX}/bin Err bitreich.org 70 i+ cp *.1 ${MANDIR}/man1 Err bitreich.org 70 i+ cp *.5 ${MANDIR}/man7 Err bitreich.org 70 i Err bitreich.org 70 i clean: Err bitreich.org 70 i rm -f *.o */*.o ${bin} 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@@ -10,7 +10,7 @@ Err bitreich.org 70 i Err bitreich.org 70 i #include "drawille.h" Err bitreich.org 70 i #include "scale.h" Err bitreich.org 70 i-#include "tool.h" Err bitreich.org 70 i+#include "util.h" Err bitreich.org 70 i #include "log.h" Err bitreich.org 70 i Err bitreich.org 70 i char const *arg0 = NULL; Err bitreich.org 70 i@@ -104,23 +104,26 @@ braille_render(struct drawille *drw, FILE *fp, double vmin, double vmax) 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, FILE *fp, size_t ncol, int row, int col) Err bitreich.org 70 i+plot(struct csv *vl, FILE *fp, size_t ncol, int rows, int cols) 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 struct drawille *drw; Err bitreich.org 70 i Err bitreich.org 70 i- col -= 8; Err bitreich.org 70 i+ cols -= 8; /* scale printed at the right */ Err bitreich.org 70 i Err bitreich.org 70 i- scale(vl, ncol, &tmin, &tmax, &tstep, &vmin, &vmax, &vstep); Err bitreich.org 70 i- row -= ncol - 1; /* room for the labels and the scale */ Err bitreich.org 70 i- row /= ncol; /* plot times */ Err bitreich.org 70 i- row = MAX(row, 3); /* readable */ Err bitreich.org 70 i+ scale_minmax(vl, ncol, &tmin, &tmax, &vmin, &vmax); Err bitreich.org 70 i+ tstep = scale_tstep(tmin, tmax, cols / 10); Err bitreich.org 70 i+ vstep = scale_vstep(vmin, vmax, rows / 10); Err bitreich.org 70 i Err bitreich.org 70 i- debug("vstep=%lf vstep=%ld ncol=%zu row=%zu", vstep, tstep, ncol, row); Err bitreich.org 70 i+ rows -= ncol - 1; /* room for the labels and the scale */ Err bitreich.org 70 i+ rows /= ncol; /* plot times */ Err bitreich.org 70 i+ rows = MAX(rows, 3); /* readable */ Err bitreich.org 70 i+ Err bitreich.org 70 i+ debug("vstep=%lf vstep=%ld ncol=%zu rows=%zu", vstep, tstep, ncol, rows); Err bitreich.org 70 i Err bitreich.org 70 i for (; ncol > 0; vl++, ncol--) { Err bitreich.org 70 i- assert(drw = drawille_new(row, col)); Err bitreich.org 70 i+ assert(drw = drawille_new(rows, cols)); Err bitreich.org 70 i fprintf(fp, " %s\n", vl->label); Err bitreich.org 70 i if (braille_histogram(vl, drw, tmin, tmax, vmin, vmax) == -1) Err bitreich.org 70 i die(1, "allocating drawille canvas"); Err bitreich.org 70 i@@ -128,7 +131,7 @@ plot(struct csv *vl, FILE *fp, size_t ncol, int row, int col) Err bitreich.org 70 i die(1, "rendering braille canvas"); Err bitreich.org 70 i free(drw); Err bitreich.org 70 i } Err bitreich.org 70 i- if (braille_axis_x(fp, tmin, tmax, tstep, col) == -1) Err bitreich.org 70 i+ if (braille_axis_x(fp, tmin, tmax, tstep, cols) == -1) Err bitreich.org 70 i die(1, "printing x axis");; Err bitreich.org 70 i Err bitreich.org 70 i } Err bitreich.org 70 i@@ -136,7 +139,7 @@ plot(struct csv *vl, FILE *fp, size_t ncol, int row, int col) 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\n", arg0); Err bitreich.org 70 i+ fprintf(stderr, "usage: %s [-r rows] [-c cols]\n", arg0); Err bitreich.org 70 i exit(1); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i@@ -148,6 +151,7 @@ main(int argc, char **argv) Err bitreich.org 70 i int c, rows, cols; Err bitreich.org 70 i Err bitreich.org 70 i rows = 20, cols = 80; Err bitreich.org 70 i+ arg0 = *argv; Err bitreich.org 70 i optind = 0; Err bitreich.org 70 i while ((c = getopt(argc, argv, "r:c:")) > -1) { Err bitreich.org 70 i switch (c) { 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@@ -0,0 +1,77 @@ 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 comma-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+comma-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-csv.7 b/ploot-csv.7 /scm/ploot/file/ploot-csv.7.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 7 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 comma-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-comma-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.c b/ploot-farbfeld.c /scm/ploot/file/ploot-farbfeld.c.gph bitreich.org 70 i@@ -15,7 +15,7 @@ Err bitreich.org 70 i #include "ffplot.h" Err bitreich.org 70 i #include "font.h" Err bitreich.org 70 i #include "log.h" Err bitreich.org 70 i-#include "tool.h" Err bitreich.org 70 i+#include "util.h" Err bitreich.org 70 i #include "scale.h" Err bitreich.org 70 i Err bitreich.org 70 i #define MARGIN 4 Err bitreich.org 70 i@@ -211,7 +211,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(vl, ncol, &tmin, &tmax, &tstep, &vmin, &vmax, &vstep); 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 Err bitreich.org 70 i assert(plot.buf = calloc(IMAGE_H * IMAGE_W, sizeof *plot.buf)); 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@@ -9,7 +9,7 @@ Err bitreich.org 70 i #include Err bitreich.org 70 i #include Err bitreich.org 70 i Err bitreich.org 70 i-#include "tool.h" Err bitreich.org 70 i+#include "util.h" Err bitreich.org 70 i #include "log.h" Err bitreich.org 70 i Err bitreich.org 70 i #define WIDTH_MAX 1024 Err bitreich.org 70 1diff --git a/ploot-text.c b/ploot-text.c /scm/ploot/file/ploot-text.c.gph bitreich.org 70 i@@ -5,7 +5,7 @@ Err bitreich.org 70 i Err bitreich.org 70 i #include "drawille.h" Err bitreich.org 70 i #include "font.h" Err bitreich.org 70 i-#include "tool.h" Err bitreich.org 70 i+#include "util.h" Err bitreich.org 70 i Err bitreich.org 70 i char *arg0 = NULL; Err bitreich.org 70 i Err bitreich.org 70 1diff --git a/src/csv.c b/src/csv.c /scm/ploot/file/src/csv.c.gph bitreich.org 70 i@@ -9,7 +9,7 @@ Err bitreich.org 70 i #include Err bitreich.org 70 i Err bitreich.org 70 i #include "log.h" Err bitreich.org 70 i-#include "tool.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). Err bitreich.org 70 1diff --git a/src/ffplot.c b/src/ffplot.c /scm/ploot/file/src/ffplot.c.gph bitreich.org 70 i@@ -7,7 +7,7 @@ Err bitreich.org 70 i #include Err bitreich.org 70 i Err bitreich.org 70 i #include "font.h" Err bitreich.org 70 i-#include "tool.h" Err bitreich.org 70 i+#include "util.h" Err bitreich.org 70 i Err bitreich.org 70 i /* Err bitreich.org 70 i * Convert (x,y) coordinates to (row,col) for printing into the buffer. Err bitreich.org 70 1diff --git a/src/scale.c b/src/scale.c /scm/ploot/file/src/scale.c.gph bitreich.org 70 i@@ -3,7 +3,7 @@ Err bitreich.org 70 i #include Err bitreich.org 70 i #include Err bitreich.org 70 i Err bitreich.org 70 i-#include "tool.h" Err bitreich.org 70 i+#include "util.h" Err bitreich.org 70 i #include "log.h" Err bitreich.org 70 i Err bitreich.org 70 i /* Err bitreich.org 70 i@@ -31,7 +31,7 @@ scale_xpos(time_t t, time_t t1, time_t t2, int szx) Err bitreich.org 70 i return szx * (t - t1) / (t2 - t1); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i-static void Err bitreich.org 70 i+void Err bitreich.org 70 i scale_minmax(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@@ -56,10 +56,10 @@ scale_minmax(struct csv *vl, int ncol, Err bitreich.org 70 i die(1, "invalid time scale: min=%lld max=%lld", *tmin, *tmax); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i-static time_t Err bitreich.org 70 i-scale_tstep(time_t min, time_t max, int density) Err bitreich.org 70 i+time_t Err bitreich.org 70 i+scale_tstep(time_t min, time_t max, int nval) Err bitreich.org 70 i { Err bitreich.org 70 i- time_t dt, *s, scale[] = { Err bitreich.org 70 i+ time_t dt, *sc, 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*5, 3600*10, 3600*18, 3600*24, 3600*24*2, Err bitreich.org 70 i 3600*24*5, 3600*24*10, 3600*24*20, 3600*24*30, 3600*24*50, Err bitreich.org 70 i@@ -67,75 +67,29 @@ scale_tstep(time_t min, time_t max, int density) Err bitreich.org 70 i }; Err bitreich.org 70 i Err bitreich.org 70 i dt = max - min; Err bitreich.org 70 i- for (s = scale; s < scale + LEN(scale); s++) Err bitreich.org 70 i- if (dt < *s * density) Err bitreich.org 70 i- return *s; Err bitreich.org 70 i- return 0; Err bitreich.org 70 i+ Err bitreich.org 70 i+ for (sc = scale; *sc > 0; sc++) Err bitreich.org 70 i+ if (dt < *sc * nval) Err bitreich.org 70 i+ return *sc; Err bitreich.org 70 i+ return dt / nval; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i-static double Err bitreich.org 70 i-scale_vstep(double min, double max, int density) Err bitreich.org 70 i+double Err bitreich.org 70 i+scale_vstep(double min, double max, int nval) Err bitreich.org 70 i { Err bitreich.org 70 i- double dv, d, *s, scale[] = { 1, 2, 3, 5 }; Err bitreich.org 70 i+ double dv, d, *sc, scale[] = { 1, 2, 3, 5 }; Err bitreich.org 70 i Err bitreich.org 70 i dv = max - min; Err bitreich.org 70 i Err bitreich.org 70 i if (dv > 1) Err bitreich.org 70 i for (d = 1; d != 0; d *= 10) Err bitreich.org 70 i- for (s = scale; s < scale + LEN(scale); s++) Err bitreich.org 70 i- if (dv < *s * d * density) Err bitreich.org 70 i- return *s * d; Err bitreich.org 70 i+ for (sc = scale; sc < scale + LEN(scale); sc++) Err bitreich.org 70 i+ if (dv < *sc * d * nval) Err bitreich.org 70 i+ return *sc * d; Err bitreich.org 70 i if (dv < 1) Err bitreich.org 70 i for (d = 1; d != 0; d *= 10) Err bitreich.org 70 i- for (s = scale + LEN(scale) - 1; s >= scale; s--) Err bitreich.org 70 i- if (dv > *s / d * density / 2) Err bitreich.org 70 i- return *s / d; Err bitreich.org 70 i+ for (sc = scale + LEN(scale) - 1; sc >= scale; sc--) Err bitreich.org 70 i+ if (dv > *sc / d * nval / 2) Err bitreich.org 70 i+ return *sc / d; Err bitreich.org 70 i return 0; Err bitreich.org 70 i } Err bitreich.org 70 i- Err bitreich.org 70 i-/* Err bitreich.org 70 i- * Adjust the vertical scale so that everything fits, with nice Err bitreich.org 70 i- * scale values. Err bitreich.org 70 i- */ Err bitreich.org 70 i-void Err bitreich.org 70 i-scale_vminmax(double *min, double *max, int row) Err bitreich.org 70 i-{ Err bitreich.org 70 i- double unit, range, mi; Err bitreich.org 70 i- Err bitreich.org 70 i- range = *max - *min; Err bitreich.org 70 i- unit = 1; Err bitreich.org 70 i- Err bitreich.org 70 i- /* Zoom until it fills the canvas. */ Err bitreich.org 70 i- for (; (row - 1) * unit > range; unit /= 10) Err bitreich.org 70 i- continue; Err bitreich.org 70 i- Err bitreich.org 70 i- /* Dezoom until it fits the canvas. */ Err bitreich.org 70 i- for (; (row - 1) * unit < range; unit *= 10) Err bitreich.org 70 i- continue; Err bitreich.org 70 i- Err bitreich.org 70 i- /* Fine tune. */ Err bitreich.org 70 i- if ((row - 1) * unit / 5 > range) Err bitreich.org 70 i- unit /= 5; Err bitreich.org 70 i- if ((row - 1) * unit / 4 > range) Err bitreich.org 70 i- unit /= 4; Err bitreich.org 70 i- if ((row - 1) * unit / 2 > range) Err bitreich.org 70 i- unit /= 2; Err bitreich.org 70 i- Err bitreich.org 70 i- /* Align the minimum (and the zero). */ Err bitreich.org 70 i- for (mi = 0; mi > *min - unit; mi -= unit) Err bitreich.org 70 i- continue; Err bitreich.org 70 i- Err bitreich.org 70 i- /* Update the displayed minimal and maximal. */ Err bitreich.org 70 i- *min = mi; Err bitreich.org 70 i- *max = mi + unit * row; Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-void Err bitreich.org 70 i-scale(struct csv *vl, int ncol, Err bitreich.org 70 i- time_t *tmin, time_t *tmax, time_t *tstep, Err bitreich.org 70 i- double *vmin, double *vmax, double *vstep) 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, SCALE_X); Err bitreich.org 70 i- *vstep = scale_vstep(*vmin, *vmax, SCALE_Y); Err bitreich.org 70 i-} Err bitreich.org 70 1diff --git a/src/scale.h b/src/scale.h /scm/ploot/file/src/scale.h.gph bitreich.org 70 i@@ -6,13 +6,11 @@ Err bitreich.org 70 i Err bitreich.org 70 i #include "csv.h" Err bitreich.org 70 i Err bitreich.org 70 i-#define SCALE_X 7 /* nb of values on x axis */ Err bitreich.org 70 i-#define SCALE_Y 7 /* nb of values on y axis */ Err bitreich.org 70 i- Err bitreich.org 70 i /**/ Err bitreich.org 70 i int scale_ypos (double, double, double, int); Err bitreich.org 70 i int scale_xpos (time_t, time_t, time_t, int); Err bitreich.org 70 i-void scale_vminmax (double *, double *, int); Err bitreich.org 70 i-void scale (struct csv *, int, time_t *, time_t *, time_t *, double *, double *, double *); Err bitreich.org 70 i+void scale_minmax (struct csv *, int, time_t *, time_t *, double *, double *); Err bitreich.org 70 i+time_t scale_tstep (time_t, time_t, int); Err bitreich.org 70 i+double scale_vstep (double, double, int); Err bitreich.org 70 i Err bitreich.org 70 i #endif Err bitreich.org 70 1diff --git a/src/tool.c b/src/tool.c /scm/ploot/file/src/tool.c.gph bitreich.org 70 i@@ -1,80 +0,0 @@ Err bitreich.org 70 i-#include "tool.h" Err bitreich.org 70 i- Err bitreich.org 70 i-#include Err bitreich.org 70 i-#include Err bitreich.org 70 i-#include Err bitreich.org 70 i-#include Err bitreich.org 70 i-#include Err bitreich.org 70 i-#include Err bitreich.org 70 i-#include Err bitreich.org 70 i- Err bitreich.org 70 i-size_t Err bitreich.org 70 i-strlcpy(char *buf, const char *str, size_t sz) Err bitreich.org 70 i-{ Err bitreich.org 70 i- size_t len, cpy; Err bitreich.org 70 i- Err bitreich.org 70 i- cpy = ((len = strlen(str)) > sz) ? (sz) : (len); Err bitreich.org 70 i- memcpy(buf, str, cpy); Err bitreich.org 70 i- buf[sz - 1] = '\0'; Err bitreich.org 70 i- return len; Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-void Err bitreich.org 70 i-put3utf(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-char * Err bitreich.org 70 i-strsep(char **strp, const char *sep) Err bitreich.org 70 i-{ Err bitreich.org 70 i- char *s, *prev; Err bitreich.org 70 i- Err bitreich.org 70 i- if (*strp == NULL) Err bitreich.org 70 i- return NULL; Err bitreich.org 70 i- for (s = prev = *strp; strchr(sep, *s) == NULL; s++); Err bitreich.org 70 i- if (*s == '\0') { Err bitreich.org 70 i- *strp = NULL; Err bitreich.org 70 i- return prev; Err bitreich.org 70 i- } Err bitreich.org 70 i- *s = '\0'; Err bitreich.org 70 i- *strp = s + 1; Err bitreich.org 70 i- Err bitreich.org 70 i- return prev; Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-void Err bitreich.org 70 i-strchomp(char *s) Err bitreich.org 70 i-{ Err bitreich.org 70 i- char *x = s + strlen(s); Err bitreich.org 70 i- Err bitreich.org 70 i- while (--x >= s && (*x == '\r' || *x == '\n')) Err bitreich.org 70 i- *x = '\0'; Err bitreich.org 70 i-} Err bitreich.org 70 i- Err bitreich.org 70 i-/* Err bitreich.org 70 i- * Set 'str' to a human-readable form of 'num' with always a width of 8 (+1 for Err bitreich.org 70 i- * the '\0' terminator). Buffer overflow is ensured not to happen due to the Err bitreich.org 70 i- * max size of a double. Return the exponent. Err bitreich.org 70 i- */ Err bitreich.org 70 i-int Err bitreich.org 70 i-humanize(char *str, double val) Err bitreich.org 70 i-{ Err bitreich.org 70 i- int exp, precision; Err bitreich.org 70 i- char label[] = { '\0', 'M', 'G', 'T', 'E' }; Err bitreich.org 70 i- Err bitreich.org 70 i- for (exp = 0; ABS(val) > 1000; exp++) Err bitreich.org 70 i- val /= 1000; Err bitreich.org 70 i- Err bitreich.org 70 i- precision = (ABS(val) < 10) ? 2 : (ABS(val) < 100) ? 1 : 0; Err bitreich.org 70 i- precision += (exp == 0); Err bitreich.org 70 i- Err bitreich.org 70 i- snprintf(str, 9, "%+.*f %c", precision, val, label[exp]); Err bitreich.org 70 i- str[8] = '\0'; Err bitreich.org 70 i- if (val >= 0) Err bitreich.org 70 i- str[0] = ' '; Err bitreich.org 70 i- Err bitreich.org 70 i- return exp * 3; Err bitreich.org 70 i-} Err bitreich.org 70 1diff --git a/src/util.c b/src/util.c /scm/ploot/file/src/util.c.gph bitreich.org 70 i@@ -0,0 +1,80 @@ Err bitreich.org 70 i+#include "util.h" Err bitreich.org 70 i+ Err bitreich.org 70 i+#include Err bitreich.org 70 i+#include Err bitreich.org 70 i+#include Err bitreich.org 70 i+#include Err bitreich.org 70 i+#include Err bitreich.org 70 i+#include Err bitreich.org 70 i+#include Err bitreich.org 70 i+ Err bitreich.org 70 i+size_t Err bitreich.org 70 i+strlcpy(char *buf, const char *str, size_t sz) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ size_t len, cpy; Err bitreich.org 70 i+ Err bitreich.org 70 i+ cpy = ((len = strlen(str)) > sz) ? (sz) : (len); Err bitreich.org 70 i+ memcpy(buf, str, cpy); Err bitreich.org 70 i+ buf[sz - 1] = '\0'; Err bitreich.org 70 i+ return len; Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i+void Err bitreich.org 70 i+put3utf(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+char * Err bitreich.org 70 i+strsep(char **strp, const char *sep) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ char *s, *prev; Err bitreich.org 70 i+ Err bitreich.org 70 i+ if (*strp == NULL) Err bitreich.org 70 i+ return NULL; Err bitreich.org 70 i+ for (s = prev = *strp; strchr(sep, *s) == NULL; s++); Err bitreich.org 70 i+ if (*s == '\0') { Err bitreich.org 70 i+ *strp = NULL; Err bitreich.org 70 i+ return prev; Err bitreich.org 70 i+ } Err bitreich.org 70 i+ *s = '\0'; Err bitreich.org 70 i+ *strp = s + 1; Err bitreich.org 70 i+ Err bitreich.org 70 i+ return prev; Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i+void Err bitreich.org 70 i+strchomp(char *s) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ char *x = s + strlen(s); Err bitreich.org 70 i+ Err bitreich.org 70 i+ while (--x >= s && (*x == '\r' || *x == '\n')) Err bitreich.org 70 i+ *x = '\0'; Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i+/* Err bitreich.org 70 i+ * Set 'str' to a human-readable form of 'num' with always a width of 8 (+1 for Err bitreich.org 70 i+ * the '\0' terminator). Buffer overflow is ensured not to happen due to the Err bitreich.org 70 i+ * max size of a double. Return the exponent. Err bitreich.org 70 i+ */ Err bitreich.org 70 i+int Err bitreich.org 70 i+humanize(char *str, double val) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ int exp, precision; Err bitreich.org 70 i+ char label[] = { '\0', 'M', 'G', 'T', 'E' }; Err bitreich.org 70 i+ Err bitreich.org 70 i+ for (exp = 0; ABS(val) > 1000; exp++) Err bitreich.org 70 i+ val /= 1000; Err bitreich.org 70 i+ Err bitreich.org 70 i+ precision = (ABS(val) < 10) ? 2 : (ABS(val) < 100) ? 1 : 0; Err bitreich.org 70 i+ precision += (exp == 0); Err bitreich.org 70 i+ Err bitreich.org 70 i+ snprintf(str, 9, "%+.*f %c", precision, val, label[exp]); Err bitreich.org 70 i+ str[8] = '\0'; Err bitreich.org 70 i+ if (val >= 0) Err bitreich.org 70 i+ str[0] = ' '; Err bitreich.org 70 i+ Err bitreich.org 70 i+ return exp * 3; Err bitreich.org 70 i+} Err bitreich.org 70 1diff --git a/src/tool.h b/src/util.h /scm/ploot/file/src/util.h.gph bitreich.org 70 .