diff loadtools/ltexit.c @ 27:ae6294b8a015

loadtool: exit jump0 implemented
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Sat, 04 May 2013 06:22:09 +0000
parents
children 768a3d012931
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/loadtools/ltexit.c	Sat May 04 06:22:09 2013 +0000
@@ -0,0 +1,55 @@
+/*
+ * This module implements the loadtool exit command, along with its
+ * options for jump-reboot or eventual Iota power-off.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <strings.h>
+#include <stdlib.h>
+
+static void
+exit_bare()
+{
+	exit(0);
+}
+
+static void
+exit_jump0()
+{
+	static char *jump0_argv[3] = {"jump", "0", 0};
+
+	tpinterf_make_cmd(jump0_argv);
+	tpinterf_send_cmd();
+	exit(0);
+}
+
+void (*default_exit)() = exit_bare;
+
+static struct kwtab {
+	char *kw;
+	void (*func)();
+} exit_modes[] = {
+	{"bare", exit_bare},
+	{"jump0", exit_jump0},
+	{0, 0}
+};
+
+cmd_exit(argc, argv)
+	char **argv;
+{
+	struct kwtab *tp;
+
+	if (argc < 2)
+		default_exit();
+	for (tp = exit_modes; tp->kw; tp++)
+		if (!strcmp(tp->kw, argv[1]))
+			break;
+	if (!tp->func) {
+		fprintf(stderr,
+			"error: \"%s\" is not an understood exit mode\n",
+			argv[1]);
+		return(-1);
+	}
+	tp->func();
+}