#include <errno.h>
#include <locale.h>
#include <assert.h>
-#include "history.h"
-#include "cdecl.h"
+#include <stdarg.h>
#include <getopt.h>
#include <gettext.h>
#include <mbswidth.h>
#include "cdecl99.h"
+#include "cdecl.h"
static const char *progname = "cdecl99";
+static bool interactive = true;
#include "options.h"
static const char sopts[] = SOPT_STRING;
{0}
};
+void print_error(const char *fmt, ...)
+{
+ va_list(ap);
+
+ if (!interactive)
+ fprintf(stderr, "%s: ", progname);
+ fprintf(stderr, "%s", _("error: "));
+
+ va_start(ap, fmt);
+ vfprintf(stderr, fmt, ap);
+ va_end(ap);
+
+ fprintf(stderr, "\n");
+}
+
static void print_version(void)
{
const char *copysign = "(C)";
puts(_("Options:"));
for (opt = lopts; opt->name; opt++) {
struct lopt_help help;
- const char *line;
int w;
if (!lopt_get_help(opt, &help))
for (; (line = readline("> ")); free(line)) {
if (!is_blank_line(line))
- cdecl_add_history(line);
+ add_history(line);
if (run_command(line, true) > 0)
break;
free(line);
if (ferror(stdin)) {
- errno = saved_errno;
- perror("read error");
+ print_error("%s", strerror(saved_errno));
return -1;
}
int main(int argc, char **argv)
{
- bool show_intro = true, interactive = true, execute = false;
+ bool show_intro = true, execute = false;
const char *filename = NULL;
int i, opt, rc;
}
if (optind < argc) {
- fprintf(stderr, _("%s: excess command-line arguments:"),
+ fprintf(stderr, "%s: ", progname);
+
+ fprintf(stderr, _("excess command-line arguments:"),
progname);
for (i = optind; i < argc; i++) {
fprintf(stderr, " %s", argv[i]);
/* --execute supersedes --filename */
if (filename && !execute) {
if (!freopen(filename, "r", stdin)) {
- perror(filename);
+ print_error("failed to open %s: %s\n", filename,
+ strerror(errno));
return EXIT_FAILURE;
}
}