-static const char *progname = "cdecl99";
-static const char sopts[] = "qbif:e:VH";
-#define RAW_LOPTS \
- { PN_("longopt", "quiet"), 0, NULL, 'q' }, \
- { PN_("longopt", "batch"), 0, NULL, 'b' }, \
- { PN_("longopt", "interactive"), 0, NULL, 'i' }, \
- { PN_("longopt", "file"), 1, NULL, 'f' }, \
- { PN_("longopt", "execute"), 1, NULL, 'e' }, \
- { PN_("longopt", "version"), 0, NULL, 'V' }, \
- { PN_("longopt", "help"), 0, NULL, 'H' }
-
-/*
- * With NLS, we need a buffer big enough to store the translated options.
- * The translations will be filled in at program startup.
- */
-enum { NOPTS = sizeof (struct option[]){RAW_LOPTS} / sizeof (struct option) };
-static struct option lopts[NOPTS + !!ENABLE_NLS * NOPTS + 1] = { RAW_LOPTS };
-
-static void print_version(void)
+#include "cdecl99.h"
+#include "cdecl.h"
+#include "help.h"
+#include "xtra.h"
+#include "options.h"
+#include "version.h"
+
+#if HAVE_READLINE_READLINE_H
+# include <readline/readline.h>
+#endif
+#if HAVE_RL_ADD_HISTORY && HAVE_READLINE_HISTORY_H
+# include <readline/history.h>
+
+/* call add_history only if the line is non-blank */
+static void do_add_history(const char *line)