switch back to arg.h - ploot - simple plotting tools
(HTM) git clone git://bitreich.org/ploot git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/ploot
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) Tags
(DIR) README
(DIR) LICENSE
---
(DIR) commit dd70db86b2270b2a539f863664d2af0c5c7f1040
(DIR) parent 5bf25770fadc2327ef217388561e203217b1870e
(HTM) Author: Josuah Demangeon <mail@josuah.net>
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(-)
---
(DIR) diff --git a/Makefile b/Makefile
@@ -1,15 +1,17 @@
CFLAGS = -Wall -Wextra -Werror -std=c89 -pedantic -D_POSIX_C_SOURCE=200809L
+.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
(DIR) 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
(DIR) 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;
}