/**************************************************************************** * Included Files ****************************************************************************/ #undef _POSIX_SOURCE #define _POSIX_SOURCE 1 #undef _POSIX_C_SOURCE #define _POSIX_C_SOURCE 2 #include "config.h" #include #include #include #ifdef HAVE_GETTEXT # include # define _(String) gettext(String) #else # define _(String) String #endif #include #include #include #ifdef USE_DMALLOC # include "dmalloc.h" #endif #include "bas.h" /**************************************************************************** * Public Functions ****************************************************************************/ #ifdef CONFIG_BUILD_KERNEL int main(int argc, FAR char *argv[]) #else int bas_main(int argc, char *argv[]) #endif { /* variables *//* {{{ */ char *runFile = (char *)0; int usage = 0, o; const char *lp = "/dev/null"; int backslash_colon = 0; int uppercase = 0; int restricted = 0; int lpfd; /* }}} */ #ifdef HAVE_GETTEXT bindtextdomain("bas", LOCALEDIR); textdomain("bas"); #endif /* parse arguments */ while ((o = getopt(argc, argv, ":bl:ruVh")) != EOF) { switch (o) { case 'b': backslash_colon = 1; break; case 'l': lp = optarg; break; case 'u': uppercase = 1; break; case 'r': restricted = 1; break; case 'V': printf("bas %s\n", VERSION); exit(0); break; case 'h': usage = 2; break; default: usage = 1; break; } } if (optind < argc) { runFile = argv[optind++]; } if (usage == 1) { fputs(_("Usage: bas [-b] [-l file] [-r] [-u] [program [argument ...]]\n"), stderr); fputs(_(" bas [--backslash-colon] [--lp file] [--restricted] [--uppercase] [program [argument ...]]\n"), stderr); fputs(_(" bas -h|--help\n"), stderr); fputs(_(" bas --version\n"), stderr); fputs("\n", stderr); fputs(_("Try `bas -h' or `bas --help' for more information.\n"), stderr); exit(1); } if (usage == 2) { fputs(_("Usage: bas [-b] [-l file] [-u] [program [argument ...]]\n"), stdout); fputs(_(" bas [--backslash-colon] [--lp file] [--restricted] [--uppercase] [program [argument ...]]\n"), stdout); fputs(_(" bas -h|--help\n"), stdout); fputs(_(" bas --version\n"), stdout); fputs("\n", stdout); fputs(_("BASIC interpreter.\n"), stdout); fputs("\n", stdout); fputs(_("-b, --backslash-colon convert backslashs to colons\n"), stdout); fputs(_("-l, --lp write LPRINT output to file\n"), stdout); fputs(_("-r, --restricted forbid SHELL\n"), stdout); fputs(_("-u, --uppercase output all tokens in uppercase\n"), stdout); fputs(_("-h, --help display this help and exit\n"), stdout); fputs(_(" --version output version information and exit\n"), stdout); fputs("\n", stdout); fputs(_("Report bugs to .\n"), stdout); exit(0); } if ((lpfd = open(lp, O_WRONLY | O_CREAT | O_TRUNC, 0666)) == -1) { fprintf(stderr, _("bas: Opening `%s' for line printer output failed (%s).\n"), lp, strerror(errno)); exit(2); } bas_argc = argc - optind; bas_argv = &argv[optind]; bas_argv0 = runFile; bas_init(backslash_colon, restricted, uppercase, lpfd); if (runFile) { bas_runFile(runFile); } else { bas_interpreter(); } bas_exit(); return (0); }