From 1aa3dbfc1a6048fe7f6af4f1af4fba7b83194f1f Mon Sep 17 00:00:00 2001 From: Marc Kleine-Budde Date: Wed, 22 Apr 2015 10:20:10 +0200 Subject: timeout: factor out wait-for-key-press loop into separate file This patch factors out the wait-for-key-press loop from the shell command "timeout" into a sparate file, so that it can be used from C, too. Signed-off-by: Marc Kleine-Budde Signed-off-by: Sascha Hauer --- commands/timeout.c | 62 ++++++++++++------------------------------------------ 1 file changed, 13 insertions(+), 49 deletions(-) (limited to 'commands/timeout.c') diff --git a/commands/timeout.c b/commands/timeout.c index c8e930cd5b..2b99d4f749 100644 --- a/commands/timeout.c +++ b/commands/timeout.c @@ -16,40 +16,35 @@ * GNU General Public License for more details. * */ -#include + #include -#include #include #include -#include #include +#include -#define TIMEOUT_RETURN (1 << 0) -#define TIMEOUT_CTRLC (1 << 1) -#define TIMEOUT_ANYKEY (1 << 2) -#define TIMEOUT_SILENT (1 << 3) +#include static int do_timeout(int argc, char *argv[]) { - int timeout = 3, ret = 1; - int flags = 0, opt, countdown; - int key = 0; - uint64_t start, second; + int timeout, ret, opt; + unsigned flags = 0; + char str[2] = { }; const char *varname = NULL; while((opt = getopt(argc, argv, "crsav:")) > 0) { switch(opt) { case 'r': - flags |= TIMEOUT_RETURN; + flags |= CONSOLE_COUNTDOWN_RETURN; break; case 'c': - flags |= TIMEOUT_CTRLC; + flags |= CONSOLE_COUNTDOWN_CTRLC; break; case 'a': - flags |= TIMEOUT_ANYKEY; + flags |= CONSOLE_COUNTDOWN_ANYKEY; break; case 's': - flags |= TIMEOUT_SILENT; + flags |= CONSOLE_COUNTDOWN_SILENT; break; case 'v': varname = optarg; @@ -63,43 +58,12 @@ static int do_timeout(int argc, char *argv[]) return COMMAND_ERROR_USAGE; timeout = simple_strtoul(argv[optind], NULL, 0); + ret = console_countdown(timeout, flags, str); - start = get_time_ns(); - second = start; - - countdown = timeout; - - if (!(flags & TIMEOUT_SILENT)) - printf("%2d", countdown--); - - do { - if (tstc()) { - key = getc(); - if (flags & TIMEOUT_CTRLC && key == 3) - goto out; - if (flags & TIMEOUT_ANYKEY) - goto out; - if (flags & TIMEOUT_RETURN && key == '\n') - goto out; - key = 0; - } - if (!(flags & TIMEOUT_SILENT) && is_timeout(second, SECOND)) { - printf("\b\b%2d", countdown--); - second += SECOND; - } - } while (!is_timeout(start, timeout * SECOND)); - - ret = 0; -out: - if (varname && key) { - char str[2] = { }; - str[0] = key; + if (varname && str[0]) setenv(varname, str); - } - if (!(flags & TIMEOUT_SILENT)) - printf("\n"); - return ret; + return ret ? 1 : 0; } BAREBOX_CMD_HELP_START(timeout) -- cgit v1.2.3