Commit 8f8c22ac authored by Yukihiro "Matz" Matsumoto's avatar Yukihiro "Matz" Matsumoto

Merge pull request #1084 from kano4/pr-add-simple-usage-message-for-mirb

Add simple usage message for mirb
parents 6e48f272 5a22c6da
...@@ -132,6 +132,67 @@ is_code_block_open(struct mrb_parser_state *parser) ...@@ -132,6 +132,67 @@ is_code_block_open(struct mrb_parser_state *parser)
return code_block_open; 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 */ /* Print a short remark for the user */
static void static void
print_hint(void) print_hint(void)
...@@ -154,7 +215,7 @@ print_cmdline(int code_block_open) ...@@ -154,7 +215,7 @@ print_cmdline(int code_block_open)
} }
int int
main(void) main(int argc, char **argv)
{ {
char ruby_code[1024] = { 0 }; char ruby_code[1024] = { 0 };
char last_code_line[1024] = { 0 }; char last_code_line[1024] = { 0 };
...@@ -166,12 +227,11 @@ main(void) ...@@ -166,12 +227,11 @@ main(void)
struct mrb_parser_state *parser; struct mrb_parser_state *parser;
mrb_state *mrb; mrb_state *mrb;
mrb_value result; mrb_value result;
struct _args args;
int n; int n;
int code_block_open = FALSE; int code_block_open = FALSE;
int ai; int ai;
print_hint();
/* new interpreter instance */ /* new interpreter instance */
mrb = mrb_open(); mrb = mrb_open();
if (mrb == NULL) { if (mrb == NULL) {
...@@ -179,6 +239,15 @@ main(void) ...@@ -179,6 +239,15 @@ main(void)
return EXIT_FAILURE; 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 = mrbc_context_new(mrb);
cxt->capture_errors = 1; cxt->capture_errors = 1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment