diff options
Diffstat (limited to 'src/options')
-rw-r--r-- | src/options/honey_options.c | 55 | ||||
-rw-r--r-- | src/options/honey_options.h | 14 |
2 files changed, 69 insertions, 0 deletions
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 <stdio.h> +#include <unistd.h> /* 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 |