From 1757afbe44a8a4511995645db369d17a964fdf6d Mon Sep 17 00:00:00 2001 From: Starnakin Date: Wed, 12 Nov 2025 01:18:35 +0100 Subject: [PATCH] init: parsing --- src/parsing.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/parsing.h | 13 ++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 src/parsing.c create mode 100644 src/parsing.h diff --git a/src/parsing.c b/src/parsing.c new file mode 100644 index 0000000..3016686 --- /dev/null +++ b/src/parsing.c @@ -0,0 +1,59 @@ +#include "parsing.h" +#include "print.h" + +#include +#include +#include +#include + +static struct param parameters[] = { + {NULL, "?", OPTION, false}, + {NULL, "v", OPTION, false}, + {NULL, "f", OPTION, false}, + {NULL, "n", OPTION, false}, + {NULL, "w", ARGUMENT, NULL}, + {NULL, "W",ARGUMENT, NULL}, + {"ttl", NULL, ARGUMENT, "116"}, + {NULL, NULL, NULL, NULL}, +}; + +static struct param *get_parameter(struct param parameters[], const char *str) +{ + size_t count = str[0] == '-' + str[1] == '-'; + for (size_t i = 0; parameters[i].name || parameters[i].alias; i++) + { + if (count == 2 && !strcmp(parameters[i].name, str + count)) + return parameters + i; + else if (count == 1 && !strcmp(parameters[i].alias, str + count)) + return parameters + i; + } + return NULL; +} + +int parsing(const char * const *av) +{ + char *host; + for (size_t i = 0; av[i]; i++) + { + struct param *parameter = get_parameter(parameters, av[i]); + if (parameter) + { + if (parameter->type == OPTION) + parameter->value = (void*)true; + else + { + if (av[i] == NULL) + { + print_err("%s: requirement argument", av[i]); + return NULL; + } + parameter->value = (char*) av[++i]; + } + } + else + { + host = (char*) av[i]; + } + } + return 0; +} \ No newline at end of file diff --git a/src/parsing.h b/src/parsing.h new file mode 100644 index 0000000..f3d86ef --- /dev/null +++ b/src/parsing.h @@ -0,0 +1,13 @@ +#pragma once + +typedef enum { + OPTION, + ARGUMENT, +} e_type; + +struct param { + const char *name; + const char *alias; + e_type type; + void *value; +};