brzeszczot

brzeszczot.git
git clone git://git.lenczewski.org/brzeszczot.git
Log | Files | Refs

commit 1a90e43cf4c4a6578c2888a7a023d88ce82261a6
parent 774b230afec7f578c881c868aea4888fda2b2462
Author: MikoĊ‚aj Lenczewski <mblenczewski@gmail.com>
Date:   Sun, 12 Feb 2023 17:39:47 +0000

Added primitive argument parsing to brzeszczot

Diffstat:
Abrzeszczot/include/brzeszczot/argparse.h | 27+++++++++++++++++++++++++++
Mbrzeszczot/makefile.mk | 3++-
Abrzeszczot/src/argparse.c | 35+++++++++++++++++++++++++++++++++++
3 files changed, 64 insertions(+), 1 deletion(-)

diff --git a/brzeszczot/include/brzeszczot/argparse.h b/brzeszczot/include/brzeszczot/argparse.h @@ -0,0 +1,27 @@ +#ifndef BRZESZCZOT_ARGPARSE_H +#define BRZESZCZOT_ARGPARSE_H + +#include "brzeszczot.h" + +#ifdef __cplusplus +extern "C" { +#endif /* __cplusplus */ + +enum brzeszczot_mode { + WAD_DUMP, + INIBIN_DUMP, +}; + +struct opts { + enum brzeszczot_mode mode; + char const *src, *dst; +}; + +extern b32 +argparse(s32 argc, char **argv, struct opts *out); + +#ifdef __cplusplus +}; +#endif /* __cplusplus */ + +#endif /* BRZESZCZOT_ARGPARSE_H */ diff --git a/brzeszczot/makefile.mk b/brzeszczot/makefile.mk @@ -18,7 +18,8 @@ BRZESZCZOT_FLAGS := \ $(BRZESZCZOT_CFLAGS) \ $(LDFLAGS) -lriot -BRZESZCZOT_SOURCES := brzeszczot/src/brzeszczot.c +BRZESZCZOT_SOURCES := brzeszczot/src/brzeszczot.c \ + brzeszczot/src/argparse.c BRZESZCZOT_OBJECTS := $(BRZESZCZOT_SOURCES:%.c=$(OBJ)/%.c.o) BRZESZCZOT_OBJDEPS := $(BRZESZCZOT_OBJECTS:%.o=%.d) diff --git a/brzeszczot/src/argparse.c b/brzeszczot/src/argparse.c @@ -0,0 +1,35 @@ +#include "brzeszczot/argparse.h" + +void +usage(s32 argc, char **argv) { + (void) argc; + + fprintf(stderr, "Usage: %s <src-file> <dst-file> <wad|inibin>\n", argv[0]); +} + +b32 +argparse(s32 argc, char **argv, struct opts *out) { + assert(out); + + (void) argc; + (void) argv; + + if (argc < 4) { + usage(argc, argv); + return false; + } + + out->src = argv[1]; + out->dst = argv[2]; + + if (strcmp(argv[3], "wad") == 0) { + out->mode = WAD_DUMP; + } else if (strcmp(argv[3], "inibin") == 0) { + out->mode = INIBIN_DUMP; + } else { + usage(argc, argv); + return false; + } + + return true; +}