diff options
-rw-r--r-- | LICENSE | 2 | ||||
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | arg.h | 35 | ||||
-rw-r--r-- | mongoclock.c | 20 |
4 files changed, 57 insertions, 2 deletions
@@ -1,6 +1,6 @@ ISC License -© 2013, 2015, 2017 Mattias Andrée <maandree@kth.se> +© 2013, 2015, 2017, 2020 Mattias Andrée <maandree@kth.se> Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above @@ -13,7 +13,7 @@ all: mongoclock mongoclock: mongoclock.o $(CC) -o $@ $^ $(LDFLAGS) -mongoclock.o: mongoclock.c $(DIGITS) +mongoclock.o: mongoclock.c arg.h $(DIGITS) $(CC) -c -o $@ mongoclock.c $(CPPFLAGS) $(CFLAGS) mongo_0.h: digit.sh @@ -0,0 +1,35 @@ +/* + * Copy me if you can. + * by 20h + */ + +#ifndef ARG_H__ +#define ARG_H__ + +extern char *argv0; + +/* use main(int argc, char *argv[]) */ +#define ARGBEGIN for (argv0 = *argv, argv++, argc--;\ + argv[0] && argv[0][0] == '-'\ + && argv[0][1];\ + argc--, argv++) {\ + char argc_;\ + char **argv_;\ + int brk_;\ + if (argv[0][1] == '-' && argv[0][2] == '\0') {\ + argv++;\ + argc--;\ + break;\ + }\ + for (brk_ = 0, argv[0]++, argv_ = argv;\ + argv[0][0] && !brk_;\ + argv[0]++) {\ + if (argv_ != argv)\ + break;\ + argc_ = argv[0][0];\ + switch (argc_) + +#define ARGEND }\ + } + +#endif diff --git a/mongoclock.c b/mongoclock.c index e2d7e20..d94fd28 100644 --- a/mongoclock.c +++ b/mongoclock.c @@ -5,9 +5,12 @@ #include <signal.h> #include <stdint.h> #include <stdio.h> +#include <stdlib.h> #include <time.h> #include <unistd.h> +#include "arg.h" + #define DX 16 #define DY 12 #define DC 16 @@ -32,6 +35,15 @@ static const char **mongo_ds[] = { static volatile sig_atomic_t caught_sigterm = 0; static volatile sig_atomic_t caught_sigwinch = 1; +char *argv0; + +static void +usage(void) +{ + fprintf(stderr, "usage: %s\n", argv0); + exit(1); +} + static void sigterm(int signo) { @@ -77,6 +89,14 @@ main(int argc, char *argv[]) struct itimerspec itimerspec; uint64_t _overrun; + ARGBEGIN { + default: + usage(); + } ARGEND; + + if (argc) + usage(); + fprintf(stdout, "\033[?1049h\033[?25l"); if (clock_gettime(CLOCK_REALTIME, &itimerspec.it_value)) |