summaryrefslogtreecommitdiffhomepage
path: root/src/driver/ntux_amain.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/driver/ntux_amain.c')
-rw-r--r--src/driver/ntux_amain.c71
1 files changed, 71 insertions, 0 deletions
diff --git a/src/driver/ntux_amain.c b/src/driver/ntux_amain.c
new file mode 100644
index 0000000..709c73b
--- /dev/null
+++ b/src/driver/ntux_amain.c
@@ -0,0 +1,71 @@
+/***********************************************************/
+/* ntux: native translation und extension */
+/* Copyright (C) 2016 Z. Gilboa */
+/* Released under GPLv2 and GPLv3; see COPYING.NTUX. */
+/***********************************************************/
+
+#include <stdio.h>
+#include <unistd.h>
+
+#include <ntux/ntux.h>
+#include "ntux_driver_impl.h"
+#include "ntux_nolibc_impl.h"
+
+#ifndef NTUX_DRIVER_FLAGS
+#define NTUX_DRIVER_FLAGS NTUX_DRIVER_VERBOSITY_ERRORS \
+ | NTUX_DRIVER_VERBOSITY_USAGE
+#endif
+
+static const char vermsg[] = "%s%s%s (git://midipix.org/ntux): "
+ "version %s%d.%d.%d%s.\n"
+ "[commit reference: %s%s%s]\n";
+
+static const char * const ntux_ver_color[6] = {
+ "\x1b[1m\x1b[35m","\x1b[0m",
+ "\x1b[1m\x1b[32m","\x1b[0m",
+ "\x1b[1m\x1b[34m","\x1b[0m"
+};
+
+static const char * const ntux_ver_plain[6] = {
+ "","",
+ "","",
+ "",""
+};
+
+static ssize_t ntux_version(struct ntux_driver_ctx * dctx)
+{
+ const struct ntux_source_version * verinfo;
+ const char * const * verclr;
+
+ verinfo = ntux_source_version();
+ verclr = isatty(STDOUT_FILENO) ? ntux_ver_color : ntux_ver_plain;
+
+ return fprintf(stdout,vermsg,
+ verclr[0],dctx->program,verclr[1],
+ verclr[2],verinfo->major,verinfo->minor,
+ verinfo->revision,verclr[3],
+ verclr[4],verinfo->commit,verclr[5]);
+}
+
+static int ntux_exit(struct ntux_driver_ctx * dctx, int ret)
+{
+ ntux_free_driver_ctx(dctx);
+ return ret;
+}
+
+int ntux_main(int argc, char ** argv, char ** envp)
+{
+ int ret;
+ struct ntux_driver_ctx * dctx;
+
+ if ((ret = ntux_get_driver_ctx(argv,envp,NTUX_DRIVER_FLAGS,&dctx)))
+ return (ret == NTUX_USAGE)
+ ? !--argc
+ : NTUX_ERROR;
+
+ if (dctx->cctx->drvflags & NTUX_DRIVER_VERSION)
+ if ((ntux_version(dctx)) < 0)
+ return ntux_exit(dctx,NTUX_ERROR);
+
+ return ntux_exit(dctx,dctx->errv[0] ? NTUX_ERROR : NTUX_OK);
+}