FreeCalypso > hg > freecalypso-sw
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(); +}