summaryrefslogtreecommitdiffhomepage
path: root/src/driver/ptyc_amain.c
diff options
context:
space:
mode:
authormidipix <writeonce@midipix.org>2016-07-04 00:50:42 -0400
committermidipix <writeonce@midipix.org>2016-07-21 03:47:24 -0400
commit0efa8cf1d20712cbfaa549d31a8ebc11a23f78ec (patch)
tree784e6b7220f8f7b75fddf4e95776e3e9f9f1642a /src/driver/ptyc_amain.c
parent9afa0dab7afbc1f86c0c3ee656c6c92c872734b7 (diff)
downloadptycon-0efa8cf1d20712cbfaa549d31a8ebc11a23f78ec.tar.bz2
ptycon-0efa8cf1d20712cbfaa549d31a8ebc11a23f78ec.tar.xz
created free-standing project skeleton.
Diffstat (limited to 'src/driver/ptyc_amain.c')
-rw-r--r--src/driver/ptyc_amain.c74
1 files changed, 74 insertions, 0 deletions
diff --git a/src/driver/ptyc_amain.c b/src/driver/ptyc_amain.c
new file mode 100644
index 0000000..4762d3a
--- /dev/null
+++ b/src/driver/ptyc_amain.c
@@ -0,0 +1,74 @@
+/*********************************************************/
+/* ptycon: a pty-console bridge */
+/* Copyright (C) 2016 Z. Gilboa */
+/* Released under GPLv2 and GPLv3; see COPYING.PTYCON. */
+/*********************************************************/
+
+#include <ntapi/ntapi.h>
+#include <stdio.h>
+#include <unistd.h>
+
+#include <ptycon/ptycon.h>
+#include "ptycon_init_impl.h"
+#include "ptycon_driver_impl.h"
+#include "ptycon_nolibc_impl.h"
+
+#ifndef PTYC_DRIVER_FLAGS
+#define PTYC_DRIVER_FLAGS PTYC_DRIVER_VERBOSITY_ERRORS \
+ | PTYC_DRIVER_VERBOSITY_USAGE
+#endif
+
+static const char vermsg[] = "%s%s%s (git://midipix.org/ptycon): "
+ "version %s%d.%d.%d%s.\n"
+ "[commit reference: %s%s%s]\n";
+
+static const char * const ptyc_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 ptyc_ver_plain[6] = {
+ "","",
+ "","",
+ "",""
+};
+
+static ssize_t ptyc_version(struct ptyc_driver_ctx * dctx)
+{
+ const struct ptyc_source_version * verinfo;
+ const char * const * verclr;
+
+ verinfo = ptyc_source_version();
+ verclr = isatty(STDOUT_FILENO) ? ptyc_ver_color : ptyc_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 ptyc_exit(struct ptyc_driver_ctx * dctx, int nerrors)
+{
+ ptyc_free_driver_ctx(dctx);
+ return nerrors ? 2 : 0;
+}
+
+int ptyc_main(int argc, char ** argv, char ** envp)
+{
+ int ret;
+ struct ptyc_driver_ctx * dctx;
+
+ if ((ret = ptyc_init()))
+ return ret;
+
+ if ((ret = ptyc_get_driver_ctx(argv,envp,PTYC_DRIVER_FLAGS,&dctx)))
+ return (ret == PTYC_USAGE) ? !--argc : 2;
+
+ if (dctx->cctx->drvflags & PTYC_DRIVER_VERSION)
+ if ((ptyc_version(dctx)) < 0)
+ return ptyc_exit(dctx,2);
+
+ return ptyc_exit(dctx,ret);
+}