ifix ring buffer - 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 413abf823787458e35396a700f9acf1af53ef239 /scm/ploot/commit/413abf823787458e35396a700f9acf1af53ef239.gph bitreich.org 70 1parent 30b3f9c326b35c196f98d905c6e57afbc057c63b /scm/ploot/commit/30b3f9c326b35c196f98d905c6e57afbc057c63b.gph bitreich.org 70 hAuthor: Josuah Demangeon URL:mailto:mail@josuah.net bitreich.org 70 iDate: Tue, 6 Feb 2018 11:36:00 +0100 Err bitreich.org 70 i Err bitreich.org 70 ifix ring buffer Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M ploot.c | 82 +++++++++++++++++-------------- Err bitreich.org 70 i D ploot.core | 0 Err bitreich.org 70 i Err bitreich.org 70 i2 files changed, 45 insertions(+), 37 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@@ -14,6 +14,27 @@ 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+ 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+ * the next postion. Err bitreich.org 70 i+ */ Err bitreich.org 70 i+#define RING_ADD(rbuf, len, pos, val) \ Err bitreich.org 70 i+do { \ Err bitreich.org 70 i+ rbuf[pos] = val; \ Err bitreich.org 70 i+ pos = (pos + 1 < len) ? (pos + 1) : (0); \ Err bitreich.org 70 i+} while (0) 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+#define RING_COPY(buf, rbuf, len, pos) \ Err bitreich.org 70 i+do { \ 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+} while (0) 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 Err bitreich.org 70 i@@ -134,29 +155,6 @@ 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 *rbuf, size_t len, size_t pos, double val) Err bitreich.org 70 i-{ Err bitreich.org 70 i- *rbuf = val; Err bitreich.org 70 i- Err bitreich.org 70 i- return (pos + 1 < 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@@ -169,32 +167,39 @@ read_simple(double buf[MAX_VAL]) Err bitreich.org 70 i 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 + pos, len, pos, val); 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+ RING_COPY(buf, rbuf, len, pos); Err bitreich.org 70 i Err bitreich.org 70 i return buf + len; Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i /* Err bitreich.org 70 i * Read a format with blank-separated time_t-double pairs, one per line and save Err bitreich.org 70 i- * the last `MAX_WIDTH' values into `timev' and `valv' which must both be at Err bitreich.org 70 i- * least MAX_VAL wide and return a pointer to the last element or NULL if the Err bitreich.org 70 i+ * the last `MAX_WIDTH' values into `tbuf' and `vbuf' which must both be at 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-read_time_series(double *valv, time_t *timev) Err bitreich.org 70 i+read_time_series(double *vbuf, time_t *tbuf) Err bitreich.org 70 i { 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+ size_t p, pos, 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- (void)time_rbuf; Err bitreich.org 70 i- (void)val_rbuf; Err bitreich.org 70 i- (void)timev; 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+ RING_ADD(trbuf, len, pos, tval); Err bitreich.org 70 i+ RING_ADD(vrbuf, len, pos, vval); 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 valv; 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@@ -207,7 +212,10 @@ 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[MAX_VAL], *end; 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+ 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@@ -226,7 +234,7 @@ main(int argc, char **argv) Err bitreich.org 70 i } Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i- end = read_simple(val); Err bitreich.org 70 i- plot(flag_h, val, end, flag_t); 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 1diff --git a/ploot.core b/ploot.core /scm/ploot/file/ploot.core.gph bitreich.org 70 iBinary files differ. Err bitreich.org 70 .