61 lines
1.2 KiB
C++
61 lines
1.2 KiB
C++
#include "argparser.h"
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <time.h>
|
|
|
|
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;
|
|
}
|