21 #define p(mrb,obj) mrb_p(mrb,obj)
39 usage(
const char *name)
41 static const char *
const usage_msg[] = {
43 "-b load and execute RiteBinary (mrb) file",
44 "-c check syntax only",
45 "-e 'command' one line of script",
46 "-v print version number, then run in verbose mode",
47 "--verbose run in verbose mode",
48 "--version print the version",
49 "--copyright print the copyright",
52 const char *
const *p = usage_msg;
54 printf(
"Usage: %s [switches] programfile\n", name);
56 printf(
" %s\n", *p++);
60 parse_args(
mrb_state *mrb,
int argc,
char **argv,
struct _args *args)
62 char **origargv = argv;
63 static const struct _args args_zero = { 0 };
67 for (argc--,argv++; argc > 0; argc--,argv++) {
69 if (argv[0][0] !=
'-')
break;
71 if (strlen(*argv) <= 1) {
97 buflen = strlen(item) + 1;
99 memcpy(buf, item, buflen);
106 cmdlinelen = strlen(args->
cmdline);
107 itemlen = strlen(item);
110 args->
cmdline[cmdlinelen] =
'\n';
111 memcpy(args->
cmdline + cmdlinelen + 1, item, itemlen + 1);
115 printf(
"%s: No code specified for -e\n", *origargv);
124 if (strcmp((*argv) + 2,
"version") == 0) {
128 else if (strcmp((*argv) + 2,
"verbose") == 0) {
132 else if (strcmp((*argv) + 2,
"copyright") == 0) {
141 if (args->
rfp == NULL && args->
cmdline == NULL) {
142 if (*argv == NULL) args->
rfp = stdin;
144 args->
rfp = fopen(argv[0], args->
mrbfile ?
"rb" :
"r");
145 if (args->
rfp == NULL) {
146 printf(
"%s: Cannot open program file. (%s)\n", *origargv, *argv);
155 memcpy(args->
argv, argv, (argc+1) *
sizeof(
char*));
164 if (args->
rfp && args->
rfp != stdin)
183 fputs(
"Invalid mrb_state, exiting mruby\n", stderr);
187 n = parse_args(mrb, argc, argv, &args);
188 if (n == EXIT_FAILURE || (args.
cmdline == NULL && args.
rfp == NULL)) {
195 for (i = 0; i < args.
argc; i++) {
201 n = mrb_read_irep_file(mrb, args.
rfp);
203 fprintf(stderr,
"failed to load mrb file: %s\n", args.
cmdline);
229 v = mrb_load_file_cxt(mrb, args.
rfp, c);
245 printf(
"Syntax OK\n");
250 return n == 0 ? EXIT_SUCCESS : EXIT_FAILURE;