switch back to arg.h - ploot - simple plotting tools | |
git clone git://bitreich.org/ploot git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65… | |
Log | |
Files | |
Refs | |
Tags | |
README | |
LICENSE | |
--- | |
commit dd70db86b2270b2a539f863664d2af0c5c7f1040 | |
parent 5bf25770fadc2327ef217388561e203217b1870e | |
Author: Josuah Demangeon <[email protected]> | |
Date: Sat, 17 Mar 2018 16:33:30 +0100 | |
switch back to arg.h | |
Diffstat: | |
M Makefile | 8 +++++--- | |
A arg.h | 27 +++++++++++++++++++++++++++ | |
M ploot.c | 54 +++++++++++++++--------------… | |
3 files changed, 58 insertions(+), 31 deletions(-) | |
--- | |
diff --git a/Makefile b/Makefile | |
@@ -1,15 +1,17 @@ | |
CFLAGS = -Wall -Wextra -Werror -std=c89 -pedantic -D_POSIX_C_SOURCE=200… | |
+.PHONY: all | |
all:ploot | |
-ploot: ploot.o config.h | |
+ploot.o: config.h arg.h | |
+ploot: ploot.o | |
${CC} -static -o ploot ploot.o | |
+.PHONY: install | |
install: ploot | |
mkdir -p ${PREFIX}/bin | |
cp ploot ${PREFIX}/bin/ploot | |
+.PHONY: clean | |
clean: | |
rm -f *.o ploot | |
- | |
-.PHONY: all clean | |
diff --git a/arg.h b/arg.h | |
@@ -0,0 +1,27 @@ | |
+#ifndef ARG_H | |
+#define ARG_H | |
+ | |
+extern char *argv0; | |
+ | |
+#define ARGBEGIN(argc, argv) \ | |
+ for (argv0 = *argv, argv++, argc--; \ | |
+ argv[0] != NULL && argv[0][0] == '-' && argv[0][1] != '\0'; … | |
+ argc--, argv++) { \ | |
+ char **_argv, *_a; \ | |
+ if (argv[0][1] == '-' && argv[0][2] == '\0') { \ | |
+ argv++, argc--; … | |
+ break; \ | |
+ } \ | |
+ for (_argv = argv, _a = *argv + 1; *_a != '\0'; _a++) { … | |
+ switch (*_a) | |
+ | |
+#define ARGEND \ | |
+ if (_argv != argv) \ | |
+ break; \ | |
+ } \ | |
+ } | |
+ | |
+#define EARGF(x) … | |
+ ((argv[1] == NULL) ? ((x), (char *)0) : (argc--, argv++, argv[0])) | |
+ | |
+#endif | |
diff --git a/ploot.c b/ploot.c | |
@@ -6,6 +6,7 @@ | |
#include <unistd.h> | |
#include <time.h> | |
+#include "arg.h" | |
#include "config.h" | |
#define ABS(x) ((x) < 0 ? -(x) : (x)) | |
@@ -13,6 +14,8 @@ | |
#define MAX(x, y) ((x) > (y) ? (x) : (y)) | |
#define LEN(buf) (sizeof(buf) / sizeof(*(buf))) | |
+char *argv0; | |
+ | |
/* | |
** Add `val' at the current position `pos' of the `ring' buffer and set pos to | |
** the next postion. | |
@@ -36,9 +39,9 @@ do { … | |
#define MAX_VAL 80 | |
#define MARGIN 7 | |
-int flag_h = 20; | |
-char *flag_t = NULL; | |
-time_t flag_o = 0; | |
+int hflag = 20; | |
+char *tflag = NULL; | |
+time_t oflag = 0; | |
/* | |
** Set `str' to a human-readable form of `num' with always a width of 7 (+ 1 | |
@@ -121,13 +124,13 @@ haxis(double *beg, double *end, time_t time) | |
for (tp = beg; tp < end; tp++) | |
putchar((*tp < 0) ? ('x') : ('-')); | |
putchar('\n'); | |
- if (flag_o > 0) { | |
+ if (oflag > 0) { | |
printf("%*c", MARGIN - 1, ' '); | |
strftime(dbeg, sizeof(dbeg), "%Y/%m/%d", localtime(&time)); | |
for (tp = beg; tp < end; tp += 7) { | |
strftime(buf, sizeof(buf), " %H:%M", localtime(&time)… | |
fputs(buf, stdout); | |
- time += flag_o * 7; | |
+ time += oflag * 7; | |
} | |
strftime(dend, sizeof(dend), "%Y/%m/%d", localtime(&time)); | |
printf("\n %-*s %s\n", (int)(beg - end) + 4, dbeg, dend); | |
@@ -271,36 +274,31 @@ main(int argc, char **argv) | |
{ | |
time_t tbuf[MAX_VAL], *tend, start; | |
double vbuf[MAX_VAL], *vend; | |
- int c; | |
- | |
- while ((c = getopt(argc, argv, "h:t:o:")) != -1) { | |
- switch (c) { | |
- case -1: | |
- break; | |
- case 'h': | |
- if ((flag_h = atoi(optarg)) <= 0) | |
- usage(); | |
- break; | |
- case 't': | |
- flag_t = optarg; | |
- break; | |
- case 'o': | |
- flag_o = atol(optarg); | |
- break; | |
- default: | |
- usage(); | |
- } | |
- } | |
- if (flag_o == 0) { | |
+ ARGBEGIN(argc, argv) { | |
+ case 'h': | |
+ if ((hflag = atoi(EARGF(usage()))) <= 0) | |
+ usage(); | |
+ break; | |
+ case 't': | |
+ tflag = EARGF(usage()); | |
+ break; | |
+ case 'o': | |
+ oflag = atol(EARGF(usage())); | |
+ break; | |
+ default: | |
+ usage(); | |
+ } ARGEND | |
+ | |
+ if (oflag == 0) { | |
vend = read_simple(vbuf); | |
start = 0; | |
} else { | |
tend = read_time_series(vbuf, tbuf); | |
- vend = skip_gaps(tbuf, tend, vbuf, flag_o); | |
+ vend = skip_gaps(tbuf, tend, vbuf, oflag); | |
start = *tbuf; | |
} | |
- plot(vbuf, vend, flag_h, flag_t, start); | |
+ plot(vbuf, vend, hflag, tflag, start); | |
return 0; | |
} |