diff options
| author | kano4 <[email protected]> | 2013-03-27 20:32:09 +0900 |
|---|---|---|
| committer | kano4 <[email protected]> | 2013-03-27 20:32:09 +0900 |
| commit | 5a22c6daf78a346ea2f176a9e13434a1ea7dd646 (patch) | |
| tree | a75e17e54e8c2b16ed061444cf0eec590e69f89e /tools | |
| parent | 6e48f272482a8fe407595c970e3102fdf49e471f (diff) | |
| download | mruby-5a22c6daf78a346ea2f176a9e13434a1ea7dd646.tar.gz mruby-5a22c6daf78a346ea2f176a9e13434a1ea7dd646.zip | |
Add simple usage message for mirb
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/mirb/mirb.c | 75 |
1 files changed, 72 insertions, 3 deletions
diff --git a/tools/mirb/mirb.c b/tools/mirb/mirb.c index 4151b9b13..660a00dad 100644 --- a/tools/mirb/mirb.c +++ b/tools/mirb/mirb.c @@ -132,6 +132,67 @@ is_code_block_open(struct mrb_parser_state *parser) return code_block_open; } +void mrb_show_version(mrb_state *); +void mrb_show_copyright(mrb_state *); + +struct _args { + int argc; + char** argv; +}; + +static void +usage(const char *name) +{ + static const char *const usage_msg[] = { + "switches:", + "--version print the version", + "--copyright print the copyright", + NULL + }; + const char *const *p = usage_msg; + + printf("Usage: %s [switches]\n", name); + while(*p) + printf(" %s\n", *p++); +} + +static int +parse_args(mrb_state *mrb, int argc, char **argv, struct _args *args) +{ + static const struct _args args_zero = { 0 }; + + *args = args_zero; + + for (argc--,argv++; argc > 0; argc--,argv++) { + char *item; + if (argv[0][0] != '-') break; + + item = argv[0] + 1; + switch (*item++) { + case '-': + if (strcmp((*argv) + 2, "version") == 0) { + mrb_show_version(mrb); + exit(0); + } + else if (strcmp((*argv) + 2, "copyright") == 0) { + mrb_show_copyright(mrb); + exit(0); + } + else return -3; + default: + return -4; + } + } + + return 0; +} + +static void +cleanup(mrb_state *mrb, struct _args *args) +{ + mrb_close(mrb); +} + /* Print a short remark for the user */ static void print_hint(void) @@ -154,7 +215,7 @@ print_cmdline(int code_block_open) } int -main(void) +main(int argc, char **argv) { char ruby_code[1024] = { 0 }; char last_code_line[1024] = { 0 }; @@ -166,12 +227,11 @@ main(void) struct mrb_parser_state *parser; mrb_state *mrb; mrb_value result; + struct _args args; int n; int code_block_open = FALSE; int ai; - print_hint(); - /* new interpreter instance */ mrb = mrb_open(); if (mrb == NULL) { @@ -179,6 +239,15 @@ main(void) return EXIT_FAILURE; } + n = parse_args(mrb, argc, argv, &args); + if (n < 0) { + cleanup(mrb, &args); + usage(argv[0]); + return n; + } + + print_hint(); + cxt = mrbc_context_new(mrb); cxt->capture_errors = 1; |
