SMOLNET PORTAL home about changes
iplotting time series - 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 51d676a1197f90fba3e657a875ad3905b95646a2	/scm/ploot/commit/51d676a1197f90fba3e657a875ad3905b95646a2.gph	bitreich.org	70
1parent 413abf823787458e35396a700f9acf1af53ef239	/scm/ploot/commit/413abf823787458e35396a700f9acf1af53ef239.gph	bitreich.org	70
hAuthor: Josuah Demangeon <mail@josuah.net>	URL:mailto:mail@josuah.net	bitreich.org	70
iDate:   Tue,  6 Feb 2018 23:03:45 +0100	Err	bitreich.org	70
i	Err	bitreich.org	70
iplotting time series	Err	bitreich.org	70
i	Err	bitreich.org	70
iDiffstat:	Err	bitreich.org	70
i  M ploot.c                             |      77 +++++++++++++++++++++++--------	Err	bitreich.org	70
i	Err	bitreich.org	70
i1 file changed, 59 insertions(+), 18 deletions(-)	Err	bitreich.org	70
i---	Err	bitreich.org	70
1diff --git a/ploot.c b/ploot.c	/scm/ploot/file/ploot.c.gph	bitreich.org	70
i@@ -12,8 +12,8 @@	Err	bitreich.org	70
i 	Err	bitreich.org	70
i #define ABS(x)                ((x) < 0 ? -(x) : (x))	Err	bitreich.org	70
i #define MIN(x, y)        ((x) < (y) ? (x) : (y))	Err	bitreich.org	70
i-#define LEN(x)                (sizeof(x) / sizeof(*x))	Err	bitreich.org	70
i-	Err	bitreich.org	70
i+#define MAX(x, y)        ((x) > (y) ? (x) : (y))	Err	bitreich.org	70
i+#define LEN(buf)        (sizeof(buf) / sizeof(*(buf)))	Err	bitreich.org	70
i 	Err	bitreich.org	70
i /*	Err	bitreich.org	70
i  * Add `val' at the current position `pos' of the `ring' buffer and set pos to	Err	bitreich.org	70
i@@ -37,6 +37,7 @@ do {                                                                        \	Err	bitreich.org	70
i 	Err	bitreich.org	70
i int        flag_h = 20;	Err	bitreich.org	70
i char        *flag_t = NULL;	Err	bitreich.org	70
i+time_t        flag_o = 0;	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 7 (+ 1	Err	bitreich.org	70
i@@ -108,11 +109,13 @@ vaxis(double val, int pos)	Err	bitreich.org	70
i  * Print horizontal axis for up to `col' values.	Err	bitreich.org	70
i  */	Err	bitreich.org	70
i void	Err	bitreich.org	70
i-haxis(int col)	Err	bitreich.org	70
i+haxis(double *beg, double *end)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i+        double        *tp;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i         printf("%*d -+", MARGIN, 0);	Err	bitreich.org	70
i-        while (col-- > 0)	Err	bitreich.org	70
i-                putchar('-');	Err	bitreich.org	70
i+        for (tp = beg; tp < end; tp++)	Err	bitreich.org	70
i+                putchar((*tp < 0) ? ('x') : ('-'));	Err	bitreich.org	70
i         putchar('\n');	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i@@ -151,7 +154,7 @@ plot(int height, double *beg, double *end, char *str)	Err	bitreich.org	70
i                 vaxis(top, h);	Err	bitreich.org	70
i                 line(beg, end, top, bot);	Err	bitreich.org	70
i         }	Err	bitreich.org	70
i-        haxis(end - beg);	Err	bitreich.org	70
i+        haxis(beg, end);	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i /*	Err	bitreich.org	70
i@@ -169,7 +172,6 @@ read_simple(double buf[MAX_VAL])	Err	bitreich.org	70
i         for (p = pos = 0; scanf("%lf\n", &val) > 0; p++)	Err	bitreich.org	70
i                 RING_ADD(rbuf, len, pos, val);	Err	bitreich.org	70
i         len = MIN(len, p);	Err	bitreich.org	70
i-        pos = MIN(pos, p);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         RING_COPY(buf, rbuf, len, pos);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i@@ -182,43 +184,75 @@ read_simple(double buf[MAX_VAL])	Err	bitreich.org	70
i  * least MAX_VAL wide and return a pointer to the last element of `vbuf' or NULL if the	Err	bitreich.org	70
i  * input contains error.	Err	bitreich.org	70
i  */	Err	bitreich.org	70
i-double *	Err	bitreich.org	70
i+time_t *	Err	bitreich.org	70
i read_time_series(double *vbuf, time_t *tbuf)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i-        size_t        p, pos, len;	Err	bitreich.org	70
i+        size_t        p, pos, nul, len;	Err	bitreich.org	70
i         double        vrbuf[MAX_VAL], vval;	Err	bitreich.org	70
i         time_t        trbuf[MAX_VAL], tval;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         len = LEN(vrbuf);	Err	bitreich.org	70
i-        for (p = pos = 0; scanf("%zd %lf\n", &tval, &vval) > 0; p++)	Err	bitreich.org	70
i+        for (p = pos = 0; scanf("%zd %lf\n", &tval, &vval) > 0; p++) {	Err	bitreich.org	70
i                 RING_ADD(trbuf, len, pos, tval);	Err	bitreich.org	70
i-                RING_ADD(vrbuf, len, pos, vval);	Err	bitreich.org	70
i+                RING_ADD(vrbuf, len, nul, vval);	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i         len = MIN(len, p);	Err	bitreich.org	70
i-        pos = MIN(pos, p);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         RING_COPY(tbuf, trbuf, len, pos);	Err	bitreich.org	70
i         RING_COPY(vbuf, vrbuf, len, pos);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i+        return tbuf + len;	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+/*	Err	bitreich.org	70
i+ * Walk from `tbeg' and `tend' and add offset in `tbuf' every time there is no	Err	bitreich.org	70
i+ * value in `step' amount of time, by setting a value to -1.	Err	bitreich.org	70
i+ */	Err	bitreich.org	70
i+double *	Err	bitreich.org	70
i+fill_gaps(time_t *tbeg, time_t *tend, double *vbuf, time_t step)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        size_t        p, pos, len;	Err	bitreich.org	70
i+        time_t        *tp, toff;	Err	bitreich.org	70
i+        double        *vp, vrbuf[MAX_VAL];	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        /* Compute the average alignment of the timestamps values according to	Err	bitreich.org	70
i+         * the step size. */	Err	bitreich.org	70
i+        toff = 0;	Err	bitreich.org	70
i+        for (tp = tbeg; tp < tend; tp++)	Err	bitreich.org	70
i+                toff += *tp % step;	Err	bitreich.org	70
i+        toff = *tbeg + toff / (tend - tbeg) + step / 2;	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        /* Fill `vbuf' with gap added at each time gap using vrbuf as	Err	bitreich.org	70
i+         * intermediate ring buffer. */	Err	bitreich.org	70
i+        len = LEN(vrbuf);	Err	bitreich.org	70
i+        for (p = pos = 0, tp = tbeg, vp = vbuf; tp < tend; p++, vp++, tp++) {	Err	bitreich.org	70
i+                for (; toff < *tp; toff += step)	Err	bitreich.org	70
i+                        RING_ADD(vrbuf, len, pos, -1);	Err	bitreich.org	70
i+                RING_ADD(vrbuf, len, pos, *vp);	Err	bitreich.org	70
i+                toff += step;	Err	bitreich.org	70
i+        }	Err	bitreich.org	70
i+        len = MAX(MIN(p, len), pos);	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        RING_COPY(vbuf, vrbuf, len, pos);	Err	bitreich.org	70
i+	Err	bitreich.org	70
i         return vbuf + len;	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i void	Err	bitreich.org	70
i usage(void)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i-        printf("usage: ploot [-h <height>] [-t <title>]\n");	Err	bitreich.org	70
i+        printf("usage: ploot [-h <height>] [-t <title>] -o <offset>\n");	Err	bitreich.org	70
i         exit(1);	Err	bitreich.org	70
i }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i int	Err	bitreich.org	70
i main(int argc, char **argv)	Err	bitreich.org	70
i {	Err	bitreich.org	70
i-/*	Err	bitreich.org	70
i-        time_t        tbuf[MAX_VAL];	Err	bitreich.org	70
i-*/	Err	bitreich.org	70
i+        time_t        tbuf[MAX_VAL], *tend;	Err	bitreich.org	70
i         double        vbuf[MAX_VAL], *vend;	Err	bitreich.org	70
i         char        c;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-        while ((c = getopt(argc, argv, "h:t:")) != -1) {	Err	bitreich.org	70
i+        while ((c = getopt(argc, argv, "h:t:o:")) != -1) {	Err	bitreich.org	70
i                 switch (c) {	Err	bitreich.org	70
i                 case -1:	Err	bitreich.org	70
i                         break;	Err	bitreich.org	70
i@@ -229,12 +263,19 @@ main(int argc, char **argv)	Err	bitreich.org	70
i                 case 't':	Err	bitreich.org	70
i                         flag_t = optarg;	Err	bitreich.org	70
i                         break;	Err	bitreich.org	70
i+                case 'o':	Err	bitreich.org	70
i+                        flag_o = atol(optarg);	Err	bitreich.org	70
i+                        break;	Err	bitreich.org	70
i                 default:	Err	bitreich.org	70
i                         usage();	Err	bitreich.org	70
i                 }	Err	bitreich.org	70
i         }	Err	bitreich.org	70
i+        if (flag_o == 0)	Err	bitreich.org	70
i+                usage();	Err	bitreich.org	70
i+	Err	bitreich.org	70
i+        tend = read_time_series(vbuf, tbuf);	Err	bitreich.org	70
i+        vend = fill_gaps(tbuf, tend, vbuf, flag_o);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-        vend = read_simple(vbuf);	Err	bitreich.org	70
i         plot(flag_h, vbuf, vend, flag_t);	Err	bitreich.org	70
i         return 0;	Err	bitreich.org	70
i }	Err	bitreich.org	70
.
Response: text/plain
Original URLgopher://bitreich.org/0/scm/ploot/commit/51d676a1197f90fb...
Content-Typetext/plain; charset=utf-8