#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: "));
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;
return 1;
}
-static int do_readline(char **linebuf, size_t *n, int interactive)
+static int do_readline(char **linebuf, size_t *n, int 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);
#endif
}
-static int repl(int interactive)
+static int repl(int batch)
{
char *line = NULL;
int ret = 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;
+ ret = -batch;
}
free(line);
return ret;
}
+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], true);
+ if (rc < 0)
+ ret = -1;
+ else if (rc > 0)
+ break;
+ }
+
+ return ret;
+}
+
/* Initialize gettext */
static void init_i18n(void)
{
quiet = 1;
break;
case 'b':
- interactive = false;
+ batch_mode = true;
break;
case 'i':
- interactive = true;
+ batch_mode = false;
break;
case 'f':
filename = optarg;
/* --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 */
if (execute)
rc = repl_cmdline(execute, argv);
else
- rc = repl(interactive);
+ rc = repl(batch_mode);
if (rc != 0)
return EXIT_FAILURE;
return 0;
}
-int run_command(const char *line, int interactive)
+int run_command(const char *line, int batch)
{
const char *cmd = line + strspn(line, " \t");
const char *arg = cmd + strcspn(cmd, " \t");
c = in_word_set(cmd, arg-cmd);
if (!c) {
print_error(_("unknown command %.*s"), (int)(arg-cmd), cmd);
- if (interactive) {
+ if (!batch) {
fprintf(stderr, "%s\n",
_("Try \"help\" for a list of possible commands."));
}
[[explain int a b c
simplify int a b c
declare a as b c
+bad command
]])
AT_DATA([check.awk],
AT_CHECK([LC_ALL=C cdecl99 --file=input || exit 42], [42], [], [stderr])
AT_CHECK([$AWK -v progname="$progname" -f check.awk stderr])
+exec 3<input
+set x; shift
+while read line <&3; do
+ set x "$@" "--execute=$line"; shift;
+done
+AT_CHECK([LC_ALL=C cdecl99 "$@" || exit 42], [42], [], [stderr])
+AT_CHECK([$AWK -v progname="$progname" -f check.awk stderr])
+
AT_CLEANUP
AT_SETUP([cdecl99 invalid character error messages])