summaryrefslogtreecommitdiffhomepage
path: root/tools
diff options
context:
space:
mode:
authorkano4 <[email protected]>2013-03-27 20:32:09 +0900
committerkano4 <[email protected]>2013-03-27 20:32:09 +0900
commit5a22c6daf78a346ea2f176a9e13434a1ea7dd646 (patch)
treea75e17e54e8c2b16ed061444cf0eec590e69f89e /tools
parent6e48f272482a8fe407595c970e3102fdf49e471f (diff)
downloadmruby-5a22c6daf78a346ea2f176a9e13434a1ea7dd646.tar.gz
mruby-5a22c6daf78a346ea2f176a9e13434a1ea7dd646.zip
Add simple usage message for mirb
Diffstat (limited to 'tools')
-rw-r--r--tools/mirb/mirb.c75
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;