+#include <config.h>
#include <stdio.h>
#include <stdlib.h>
+#include <getopt.h>
+#include "readline.h"
#include "cdecl.h"
-int main(int argc, char **argv)
+static const char *progname = "cdecl99";
+static const char sopts[] = "VH";
+static const struct option lopts[] = {
+ { "version", 0, NULL, 'V' },
+ { "help", 0, NULL, 'H' },
+ { 0 }
+};
+
+static void print_version(void)
+{
+ puts(PACKAGE_STRING);
+ puts("Copyright (C) 2011 Nick Bowler.");
+ puts("License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.");
+ puts("This is free software: you are free to change and redistribute it.");
+ puts("There is NO WARRANTY, to the extent permitted by law.");
+}
+
+static void print_usage(FILE *f)
+{
+ fprintf(f, "Usage: %s [options]\n", progname);
+}
+
+static void print_help(void)
+{
+ print_usage(stdout);
+ puts("Detailed help coming soon.");
+}
+
+static int repl(void)
{
struct cdecl *decl;
+ print_version();
- if (argc < 2) {
- fprintf(stderr, "usage: cdecl99 decl\n");
- return EXIT_FAILURE;
+ for (char *line; (line = readline("> ")); free(line)) {
+ decl = cdecl_parse_decl(line);
+ cdecl_free(decl);
}
- decl = cdecl_parse_decl(argv[1]);
- if (!decl) {
- return EXIT_FAILURE;
+ return 0;
+}
+
+int main(int argc, char **argv)
+{
+ int opt;
+
+ if (argc > 0)
+ progname = argv[0];
+
+ while ((opt = getopt_long(argc, argv, sopts, lopts, NULL)) != -1) {
+ switch (opt) {
+ case 'V':
+ print_version();
+ return EXIT_SUCCESS;
+ case 'H':
+ print_help();
+ return EXIT_SUCCESS;
+ default:
+ print_usage(stderr);
+ return EXIT_FAILURE;
+ }
}
- cdecl_free(decl);
- return 0;
+ if (repl() != 0)
+ return EXIT_FAILURE;
+
+ return EXIT_SUCCESS;
}