+ const char *input = NULL;
+ const char *outname = NULL;
+ compile_mode_t mode = CompileAssembleLink;
+
+ for(int i = 1; i < argc; ++i) {
+ const char *arg = argv[i];
+ if(strcmp(arg, "-o") == 0) {
+ ++i;
+ if(i >= argc) {
+ usage(argv[0]);
+ return 1;
+ }
+ outname = argv[i];
+ } else if(strcmp(arg, "-c") == 0) {
+ mode = CompileAssemble;
+ } else if(strcmp(arg, "-S") == 0) {
+ mode = Compile;
+ } else if(strcmp(arg, "--lextest") == 0) {
+ mode = LexTest;
+ } else if(strcmp(arg, "--print-ast") == 0) {
+ mode = PrintAst;
+ } else if(strcmp(arg, "--print-fluffy") == 0) {
+ mode = PrintFluffy;
+ } else if(strcmp(arg, "-v") == 0) {
+ verbose = 1;
+ } else if(arg[0] == '-') {
+ if (arg[1] == 'D' ||
+ arg[1] == 'O' ||
+ arg[1] == 'f') {
+ fprintf(stderr, "Warning: Ignoring option '%s'\n", arg);
+ } else {
+ usage(argv[0]);
+ return 1;
+ }
+ } else {
+ if(input != NULL) {
+ fprintf(stderr, "Error: multiple input files specified\n");
+ usage(argv[0]);
+ return 1;
+ } else {
+ input = arg;
+ }
+ }
+ }
+
+ if(input == NULL) {
+ fprintf(stderr, "%s: no input files\n", argv[0]);
+ return 1;
+ }
+
+ if(mode == LexTest) {
+ lextest(input);