iusing getopt all the same - 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 453cb7f82c06a904e3b5aae5ee57d9a1fd91f460 /scm/ploot/commit/453cb7f82c06a904e3b5aae5ee57d9a1fd91f460.gph bitreich.org 70 1parent ebff9e927a35af076a55e62732001c860c883244 /scm/ploot/commit/ebff9e927a35af076a55e62732001c860c883244.gph bitreich.org 70 hAuthor: Josuah Demangeon URL:mailto:mail@josuah.net bitreich.org 70 iDate: Sun, 4 Feb 2018 23:31:58 +0100 Err bitreich.org 70 i Err bitreich.org 70 iusing getopt all the same Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i D arg.h | 25 ------------------------- Err bitreich.org 70 i M ploot.c | 58 ++++++++++++++++++++----------- Err bitreich.org 70 i Err bitreich.org 70 i2 files changed, 37 insertions(+), 46 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/arg.h b/arg.h /scm/ploot/file/arg.h.gph bitreich.org 70 i@@ -1,25 +0,0 @@ Err bitreich.org 70 i-#define USED(x) ((void)(x)) Err bitreich.org 70 i- Err bitreich.org 70 i-extern char *argv0; Err bitreich.org 70 i- Err bitreich.org 70 i-#define ARGBEGIN(argc, argv) \ Err bitreich.org 70 i- for (argv0 = *argv, argv++, argc--; \ Err bitreich.org 70 i- argv[0] != NULL && argv[0][0] == '-' && argv[0][1] != '\0'; \ Err bitreich.org 70 i- argc--, argv++) { \ Err bitreich.org 70 i- char **arg_v, *arg_s; \ Err bitreich.org 70 i- if (argv[0][1] == '-' && argv[0][2] == '\0') { \ Err bitreich.org 70 i- argv++, argc--; \ Err bitreich.org 70 i- break; \ Err bitreich.org 70 i- } \ Err bitreich.org 70 i- arg_v = argv; \ Err bitreich.org 70 i- for (arg_s = *argv; *arg_s != '\0'; arg_s++) { \ Err bitreich.org 70 i- if (arg_v != argv) \ Err bitreich.org 70 i- break; \ Err bitreich.org 70 i- switch (*arg_s) Err bitreich.org 70 i- Err bitreich.org 70 i-#define ARGEND \ Err bitreich.org 70 i- } \ Err bitreich.org 70 i- } Err bitreich.org 70 i- Err bitreich.org 70 i-#define EARGF(x) \ Err bitreich.org 70 i- ((argv[1] == NULL) ? ((x), NULL) : (argc--, argv++, argv[0])) Err bitreich.org 70 1diff --git a/ploot.c b/ploot.c /scm/ploot/file/ploot.c.gph bitreich.org 70 i@@ -3,8 +3,8 @@ 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-#include "arg.h" Err bitreich.org 70 i #include "config.h" Err bitreich.org 70 i Err bitreich.org 70 i #define MAX_VAL 80 Err bitreich.org 70 i@@ -14,9 +14,6 @@ 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- 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 * the '\0' terminator). Buffer overflow is ensured not to happen due to the Err bitreich.org 70 i@@ -63,7 +60,7 @@ title(char *str, int width) Err bitreich.org 70 i { Err bitreich.org 70 i if (str == NULL) Err bitreich.org 70 i return; Err bitreich.org 70 i- printf("%*s\n\n", (int)(width + strlen(str) + MARGIN) / 2, str); Err bitreich.org 70 i+ printf("%*s\n", (int)(width + strlen(str) + MARGIN) / 2, str); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i /* Err bitreich.org 70 i@@ -119,7 +116,8 @@ plot(int height, double *beg, double *end, char *str) Err bitreich.org 70 i double top, bot, max; Err bitreich.org 70 i int h; Err bitreich.org 70 i Err bitreich.org 70 i- title(str, end - beg); Err bitreich.org 70 i+ if (str != NULL) Err bitreich.org 70 i+ title(str, end - beg); Err bitreich.org 70 i Err bitreich.org 70 i max = maxdv(beg, end); Err bitreich.org 70 i for (h = height + height % 2; h > 0; h -= 2) { Err bitreich.org 70 i@@ -137,9 +135,9 @@ plot(int height, double *beg, double *end, char *str) 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+ring_add(double *rbuf, 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+ *rbuf = 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@@ -151,8 +149,13 @@ ring_add(double *ring, size_t len, size_t pos, double val) 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+ size_t i = 0; 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+ printf("len: %zd, pos: %zd\n", len, pos); Err bitreich.org 70 i+ for (i = 0; i < len; i++) Err bitreich.org 70 i+ printf("%03zd: %lf\n", i, buf[i]); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i /* Err bitreich.org 70 i@@ -163,16 +166,18 @@ ring_copy(double *buf, double *rbuf, size_t len, size_t pos) 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 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 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+ pos = 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- return buf + MIN(p, len); 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@@ -184,7 +189,6 @@ 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 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@@ -198,7 +202,7 @@ read_time_series(double *valv, time_t *timev) 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: %s [-h height]\n", argv0); Err bitreich.org 70 i+ printf("usage: ploot [-h height]\n"); Err bitreich.org 70 i exit(1); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i@@ -206,16 +210,28 @@ 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- ARGBEGIN(argc, argv) { Err bitreich.org 70 i- case 'h': Err bitreich.org 70 i- flag_h = atoi(EARGF(usage())); Err bitreich.org 70 i- if (flag_h <= 0) Err bitreich.org 70 i+ char c; 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+ while ((c = getopt(argc, argv, "h:t:")) != -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+ case 'h': Err bitreich.org 70 i+ if ((flag_h = atoi(optarg)) <= 0) Err bitreich.org 70 i+ usage(); Err bitreich.org 70 i+ break; 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+ default: Err bitreich.org 70 i usage(); Err bitreich.org 70 i- break; Err bitreich.org 70 i- } ARGEND; 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, "Sample data generated with jot"); Err bitreich.org 70 i+ plot(flag_h, val, end, flag_t); Err bitreich.org 70 i return 0; Err bitreich.org 70 i } Err bitreich.org 70 .