#include #include #include #include void process_input(FILE *file) { // TODO: Implement. getchar(); (void)file; } #define REPL_PROMPT "bdl> " void run_repl(void) { printf("BDL REPL (Press Ctrl-C to exit)\n"); while (true) { printf(REPL_PROMPT); process_input(stdin); } } void run_file(char *file_name) { FILE *fd = fopen(file_name, "r"); if (!fd) { fprintf(stderr, "error: couldn't open input file: %s\n", file_name); exit(EXIT_FAILURE); } process_input(fd); fclose(fd); } #ifndef BIN_NAME #define BIN_NAME "bdl" #endif void print_usage(void) { printf("Usage: %s [options] \n", BIN_NAME); printf("\n"); printf("\t-i\tInteractive mode (REPL).\n"); printf("\n"); } int main(int argc, char *argv[]) { int option; while ((option = getopt(argc, argv, "i")) != -1) { switch (option) { case 'i': { // Interactive mode. run_repl(); return EXIT_SUCCESS; } break; default: { print_usage(); return EXIT_FAILURE; } break; } } // TODO: Run from stdin if no file is given. // Run from file. if (optind != argc - 1) { fprintf(stderr, "%s: No input file given.\n", BIN_NAME); print_usage(); return EXIT_FAILURE; } char *file_name = argv[optind]; run_file(file_name); return EXIT_SUCCESS; }