From 10288765588673645c1cc0a6e3d2245aff3f9080 Mon Sep 17 00:00:00 2001 From: sanine Date: Tue, 1 Mar 2022 22:42:10 -0600 Subject: add basic window functions, option parsing, and main loop --- src/options/honey_options.c | 55 +++++++++++++++++++++++++++++++++++++++++++++ src/options/honey_options.h | 14 ++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 src/options/honey_options.c create mode 100644 src/options/honey_options.h (limited to 'src/options') diff --git a/src/options/honey_options.c b/src/options/honey_options.c new file mode 100644 index 0000000..cf93588 --- /dev/null +++ b/src/options/honey_options.c @@ -0,0 +1,55 @@ +#include +#include /* todo: create windows-compatible alternative */ + +#include "options/honey_options.h" + + +static void print_usage(const char *program_name) +{ + printf("Usage: %s [OPTIONS]\n" + " -v Increase output verbosity (-vvv displays every log message)\n" + " -q Decrease output verbosity (-qqq suppresses even fatal errors)\n" + " -h Print this help message and exit\n" + " -s SCRIPT Load SCRIPT as the entry point instead of 'main.lua'\n", + program_name); +} + + +int parse_options(struct honey_options *opts, int argc, char **argv) +{ + opts->main_script = "main.lua"; + opts->log_level = WARN; + opts->display_help = 0; + + int opt; + const char *flags = "hqvs:"; + while ((opt = getopt(argc, argv, flags)) != -1) { + switch (opt) { + case 'q': + opts->log_level -= 1; + break; + + case 'v': + opts->log_level += 1; + break; + + case 'h': + print_usage(argv[0]); + opts->display_help = 1; + return 1; + + case 's': + opts->main_script = optarg; + break; + + default: + print_usage(argv[0]); + return 0; + } + } + + honey_log_set_level(opts->log_level); + honey_log_set_file(stderr); + + return 1; +} diff --git a/src/options/honey_options.h b/src/options/honey_options.h new file mode 100644 index 0000000..5f4aded --- /dev/null +++ b/src/options/honey_options.h @@ -0,0 +1,14 @@ +#ifndef HONEY_OPTIONS_H +#define HONEY_OPTIONS_H + +#include "logging/logging.h" + +struct honey_options { + const char *main_script; + enum honey_log_level_t log_level; + int display_help; +}; + +int parse_options(struct honey_options *opts, int argc, char **argv); + +#endif -- cgit v1.2.1