X-Git-Url: https://git.draconx.ca/gitweb/cdecl99.git/blobdiff_plain/4251b4bd0087752ceddbf95a6a8c928ab2207844..af1f874c4c58d0bd8becd52c892d0b358d08736e:/src/cdecl99.c diff --git a/src/cdecl99.c b/src/cdecl99.c index f7eed62..6eb00df 100644 --- a/src/cdecl99.c +++ b/src/cdecl99.c @@ -58,13 +58,13 @@ static void do_add_history(const char *line) #endif static const char *progname = "cdecl99"; -static bool interactive = true; +static bool batch_mode; void print_error(const char *fmt, ...) { va_list(ap); - if (!interactive) + if (batch_mode) fprintf(stderr, "%s: ", progname); fprintf(stderr, "%s", _("error: ")); @@ -124,22 +124,6 @@ static void print_help(const struct option *lopts) printf(_("Report bugs to <%s>.\n"), PACKAGE_BUGREPORT); } -static int repl_cmdline(unsigned count, char **commands) -{ - int ret = 0; - unsigned i; - - for (i = 0; i < count; i++) { - int rc = run_command(commands[i], false); - if (rc < 0) - ret = -1; - else if (rc > 0) - break; - } - - return ret; -} - static int do_getline(char **linebuf, size_t *n) { ssize_t rc; @@ -155,17 +139,17 @@ static int do_getline(char **linebuf, size_t *n) return 1; } -static int do_readline(char **linebuf, size_t *n, int interactive) +static int do_readline(char **linebuf, size_t *n, bool batch) { #if !HAVE_READLINE - if (interactive) { + if (!batch) { fputs("> ", stdout); fflush(stdout); } return do_getline(linebuf, n); #else - if (!interactive) + if (batch) return do_getline(linebuf, n); free(*linebuf); @@ -177,22 +161,38 @@ static int do_readline(char **linebuf, size_t *n, int interactive) #endif } -static int repl(int interactive) +static int repl(bool batch) { char *line = NULL; - int ret = 0; + bool fail = 0; size_t n; - while (do_readline(&line, &n, interactive)) { - int rc = run_command(line, interactive); + while (do_readline(&line, &n, batch)) { + int rc = run_command(line, batch); if (rc > 0) break; - else if (rc < 0) - ret = -!interactive; + if (rc < 0) + fail = batch; } free(line); - return ret; + return fail ? EXIT_FAILURE : 0; +} + +static int repl_cmdline(unsigned count, char **commands) +{ + bool fail = 0; + unsigned i; + + for (i = 0; i < count; i++) { + int rc = run_command(commands[i], true); + if (rc > 0) + break; + if (rc < 0) + fail = true; + } + + return fail ? EXIT_FAILURE : 0; } /* Initialize gettext */ @@ -229,10 +229,10 @@ static int initialize(int argc, char **argv) quiet = 1; break; case 'b': - interactive = false; + batch_mode = true; break; case 'i': - interactive = true; + batch_mode = false; break; case 'f': filename = optarg; @@ -265,10 +265,10 @@ static int initialize(int argc, char **argv) /* --filename and --execute imply --batch. */ if (filename || execute) - interactive = false; + batch_mode = true; /* --batch implies --quiet */ - if (interactive && !quiet) + if (!batch_mode && !quiet) print_version(); /* --execute supersedes --filename */ @@ -285,7 +285,7 @@ static int initialize(int argc, char **argv) int main(int argc, char **argv) { - int rc, execute; + int execute; switch ((execute = initialize(argc, argv))) { case INIT_EXIT_SUCCESS: return EXIT_SUCCESS; @@ -293,11 +293,7 @@ int main(int argc, char **argv) } if (execute) - rc = repl_cmdline(execute, argv); + return repl_cmdline(execute, argv); else - rc = repl(interactive); - - if (rc != 0) - return EXIT_FAILURE; - return EXIT_SUCCESS; + return repl(batch_mode); }