#include "argparser.h" #include #include #include #include void print_usage(); bool strequals(const char *str1, const char *str2); ParseResult parse_args(i32 argc, char *argv[]) { GeneratorArgs args = {}; if (argc < 2) { print_usage(); return {PARSE_STATUS_FAILED, args}; } bool seeded = false; bool positional_complete = false; for (i32 i = 1; i < argc; ++i) { if (strequals(argv[i], "-h") || strequals(argv[i], "--help")) { print_usage(); return {PARSE_STATUS_HELP, {}}; } else if (strequals(argv[i], "--seed")) { if (i + 1 < argc) { args.seed = strtoul(argv[++i], NULL, 10); seeded = true; } } else if (strequals(argv[i], "--cluster")) { args.clustered = true; } else { args.count = strtoull(argv[i], NULL, 10); positional_complete = true; } } if (!seeded) { args.seed = time(NULL); } if (!positional_complete) { print_usage(); return {PARSE_STATUS_FAILED, args}; } return {PARSE_STATUS_SUCCEEDED, args}; } void print_usage() { printf("Usage: main [-h] [--seed SEED] [--cluster] COUNT\n"); } bool strequals(const char *str1, const char *str2) { return strcmp(str1, str2) == 0; }