aboutsummaryrefslogtreecommitdiff
path: root/src/lib/arg.c
diff options
context:
space:
mode:
authorShav Kinderlehrer <[email protected]>2023-04-12 23:46:53 -0400
committerShav Kinderlehrer <[email protected]>2023-04-12 23:46:53 -0400
commit58e0d435c38c0b4e6c59244436556dba6ed96abf (patch)
tree8876d6c5d2d7bdbb4e0bfef1eda33e49bf1f1da3 /src/lib/arg.c
parentc760493f48e4f8c6fd9f3effb5082d263128548c (diff)
downloadlat-58e0d435c38c0b4e6c59244436556dba6ed96abf.tar.gz
lat-58e0d435c38c0b4e6c59244436556dba6ed96abf.zip
Add argsv0.4.0
- add color arg - add lines arg
Diffstat (limited to 'src/lib/arg.c')
-rw-r--r--src/lib/arg.c64
1 files changed, 64 insertions, 0 deletions
diff --git a/src/lib/arg.c b/src/lib/arg.c
new file mode 100644
index 0000000..6178156
--- /dev/null
+++ b/src/lib/arg.c
@@ -0,0 +1,64 @@
+#include "arg.h"
+#include "util.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+struct config conf;
+void argerr(char *r, char *arg) {
+ fprintf(stderr, "lat: %s '%s'\n", r, arg);
+ exit(EXIT_FAILURE);
+}
+
+void parselongarg(char *arg) {
+ if (strcmp(arg, "--color") == 0) {
+ conf.color = !conf.color;
+ return;
+ }
+
+ if (strcmp(arg, "--lines") == 0) {
+ conf.lines = !conf.lines;
+ return;
+ }
+
+ argerr("unrecognized arg", arg);
+}
+
+void parseshortarg(char *arg) {
+ size_t i = 1;
+ while (arg[i] != '\0') {
+ char c = arg[i];
+ switch (c) {
+ case 'c':
+ conf.color = !conf.color;
+ break;
+ case 'n':
+ conf.lines = !conf.lines;
+ break;
+ default:
+ argerr("unrecognized flag", &c);
+ break;
+ }
+ i++;
+ }
+}
+
+int parseargs(int argc, char *argv[]) {
+ int i;
+ for (i = 1; i < argc; i++) { // offset for argv[0]
+ char *arg = argv[i];
+
+ if (arg[0] == '-') {
+ if (arg[1] == '-') {
+ parselongarg(arg);
+ continue;
+ }
+
+ parseshortarg(arg);
+ } else {
+ return i;
+ }
+ }
+
+ return i;
+}