ireding from stdin with scanf, may still need to debug ring buffers - 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 3b39b0db61c4795ea3c0af49b0c2151585e502b6 /scm/ploot/commit/3b39b0db61c4795ea3c0af49b0c2151585e502b6.gph bitreich.org 70 1parent c529b0f871ecc44395506be3e5eb928caa4b63e0 /scm/ploot/commit/c529b0f871ecc44395506be3e5eb928caa4b63e0.gph bitreich.org 70 hAuthor: Josuah Demangeon URL:mailto:mail@josuah.net bitreich.org 70 iDate: Sat, 3 Feb 2018 03:13:14 +0100 Err bitreich.org 70 i Err bitreich.org 70 ireding from stdin with scanf, may still need to debug ring buffers Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M Makefile | 6 +++++- Err bitreich.org 70 i M ploot.c | 53 ++++++++++++++++++++++--------- Err bitreich.org 70 i A ploot.core | 0 Err bitreich.org 70 i Err bitreich.org 70 i3 files changed, 43 insertions(+), 16 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,7 +1,11 @@ Err bitreich.org 70 i CFLAGS = -Wall -Wextra -Werror -std=c89 -pedantic Err bitreich.org 70 i Err bitreich.org 70 i-all: ploot.o config.h Err bitreich.org 70 i+all:ploot Err bitreich.org 70 i+ Err bitreich.org 70 i+ploot: ploot.o config.h Err bitreich.org 70 i ${CC} -static -o ploot ploot.o Err bitreich.org 70 i Err bitreich.org 70 i clean: Err bitreich.org 70 i rm -f *.o ploot Err bitreich.org 70 i+ Err bitreich.org 70 i+.PHONY: all clean Err bitreich.org 70 1diff --git a/ploot.c b/ploot.c /scm/ploot/file/ploot.c.gph bitreich.org 70 i@@ -10,8 +10,9 @@ Err bitreich.org 70 i #define MAX_VAL 80 Err bitreich.org 70 i #define MARGIN 7 Err bitreich.org 70 i Err bitreich.org 70 i-#define ABS(x) ((x) < 0 ? -(x) : (x)) Err bitreich.org 70 i-#define LEN(x) (sizeof(x) / sizeof(*x)) 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 char *argv0; Err bitreich.org 70 i int flag_h = 20; Err bitreich.org 70 i@@ -132,6 +133,29 @@ plot(int height, double *beg, double *end, char *str) Err bitreich.org 70 i } 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 return the Err bitreich.org 70 i+ * next postion. Err bitreich.org 70 i+ */ Err bitreich.org 70 i+size_t Err bitreich.org 70 i+ring_add(double *ring, size_t len, size_t pos, double val) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ *ring = val; Err bitreich.org 70 i+ Err bitreich.org 70 i+ return (pos >= len) ? pos + 1 : 0; Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i+/* Err bitreich.org 70 i+ * Copy the ring buffer `rbuf' content with current position `pos' into the Err bitreich.org 70 i+ * buffer `buf'. Both buffer of length `len'. Err bitreich.org 70 i+ */ Err bitreich.org 70 i+void Err bitreich.org 70 i+ring_copy(double *buf, double *rbuf, size_t len, size_t pos) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ memcpy(buf, rbuf + pos, (len - pos) * sizeof(*rbuf)); Err bitreich.org 70 i+ memcpy(buf + (len - pos), rbuf, pos * sizeof(*rbuf)); Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i+/* Err bitreich.org 70 i * Read a simple format with one double per line and save the last `MAX_WIDTH' Err bitreich.org 70 i * values into `buf' which must be at least MAX_VAL wide and return a pointer Err bitreich.org 70 i * to the last element or NULL if the input contains error. Err bitreich.org 70 i@@ -139,12 +163,16 @@ plot(int height, double *beg, double *end, char *str) Err bitreich.org 70 i double * Err bitreich.org 70 i read_simple(double buf[MAX_VAL]) Err bitreich.org 70 i { Err bitreich.org 70 i- /* ring buffer to read input continuously */ Err bitreich.org 70 i- double val_rbuf[MAX_VAL]; Err bitreich.org 70 i+ /* ring buffer to keep the last `MAX_VAL' values */ Err bitreich.org 70 i+ double rbuf[MAX_VAL], val; Err bitreich.org 70 i+ size_t p, pos, len; Err bitreich.org 70 i Err bitreich.org 70 i- (void)val_rbuf; Err bitreich.org 70 i+ len = LEN(rbuf); Err bitreich.org 70 i+ for (p = pos = 0; scanf("%lf\n", &val) > 0; p++) Err bitreich.org 70 i+ pos = ring_add(rbuf, val, len, pos); Err bitreich.org 70 i+ ring_copy(buf, rbuf, len, pos); Err bitreich.org 70 i Err bitreich.org 70 i- return buf; Err bitreich.org 70 i+ return buf + MIN(p, len); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i /* Err bitreich.org 70 i@@ -156,7 +184,7 @@ read_simple(double buf[MAX_VAL]) Err bitreich.org 70 i double * Err bitreich.org 70 i read_time_series(double *valv, time_t *timev) Err bitreich.org 70 i { Err bitreich.org 70 i- /* ring buffers to read input continuously */ Err bitreich.org 70 i+ /* ring buffer to keep the last `MAX_VAL' values */ Err bitreich.org 70 i time_t time_rbuf[MAX_VAL]; Err bitreich.org 70 i double val_rbuf[MAX_VAL]; Err bitreich.org 70 i Err bitreich.org 70 i@@ -177,13 +205,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- double val[] = { 55, 55, 1, 72, 53, 73, 6, 45, 7, 71, 18, 100, 78, 56, Err bitreich.org 70 i- 53, 24, 99, 99, 37, 91, 67, 68, 9, 16, 83, 30, 68, 51, 38, 47, 91, Err bitreich.org 70 i- 35, 73, 36, 52, 99, 19, 91, 89, 7, 40, 88, 75, 50, 92, 91, 23, 54, Err bitreich.org 70 i- 90, 98, 91, 94, 10, 39, 55, 71, 44, 77, 48, 74, 66, 53, 81, 85, 44, Err bitreich.org 70 i- 71, 84, 93, 8, 50, 77, 16, 57, 68, 52, 82, 36, 7, 13, 10, 7, 95, 64, Err bitreich.org 70 i- 71, 61, 12, 29, 63, 85, 72, 98, 59, 96, 91, 67, 24, 48, 4, 90, 1, Err bitreich.org 70 i- 15, 57, 11, 93, 18, 18, 78, 85, 36, 35, 15, 7, 85, 31, 73, 57, 70 }; Err bitreich.org 70 i+ double val[MAX_VAL], *end; Err bitreich.org 70 i Err bitreich.org 70 i ARGBEGIN(argc, argv) { Err bitreich.org 70 i case 'h': Err bitreich.org 70 i@@ -193,6 +215,7 @@ main(int argc, char **argv) Err bitreich.org 70 i break; Err bitreich.org 70 i } ARGEND; Err bitreich.org 70 i Err bitreich.org 70 i- plot(flag_h, val, val + LEN(val), "Sample data generated with jot"); Err bitreich.org 70 i+ end = read_simple(val); Err bitreich.org 70 i+ plot(flag_h, val, end, "Sample data generated with jot"); Err bitreich.org 70 i return 0; Err bitreich.org 70 i } Err bitreich.org 70 1diff --git a/ploot.core b/ploot.core /scm/ploot/file/ploot.core.gph bitreich.org 70 iBinary files differ. Err bitreich.org 70 .