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  | 
