158 lines
3.9 KiB
Diff
158 lines
3.9 KiB
Diff
|
|
#
|
|
# Patch managed by http://www.holgerschurig.de/patcher.html
|
|
#
|
|
|
|
--- /dev/null
|
|
+++ busybox-1.00/console-tools/getkey.c
|
|
@@ -0,0 +1,94 @@
|
|
+/* vi: set sw=4 ts=4: */
|
|
+/*
|
|
+ * getkey.c - Michael 'Mickey' Lauer
|
|
+ *
|
|
+ * Version 0.1
|
|
+ *
|
|
+ * A simple keygrapper. Displays a configurable message and waits a dedicated number
|
|
+ * of seconds for a keypress. Sets the exit code accordingly (SUCCESS on keypress).
|
|
+ */
|
|
+#include <stdio.h>
|
|
+#include <fcntl.h>
|
|
+#include <memory.h>
|
|
+#include <stdlib.h>
|
|
+#include <unistd.h>
|
|
+#include <sys/types.h>
|
|
+#include <errno.h>
|
|
+#include <sys/ioctl.h>
|
|
+#include <sys/kd.h>
|
|
+#include "busybox.h"
|
|
+
|
|
+extern int getkey_main(int argc, char **argv)
|
|
+{
|
|
+ int status = EXIT_FAILURE;
|
|
+
|
|
+ if ( argc < 2 )
|
|
+ {
|
|
+ bb_show_usage();
|
|
+ }
|
|
+
|
|
+ /*
|
|
+ * If no terminal is attached it is quite useless
|
|
+ * to treat it like one.
|
|
+ */
|
|
+ if( !isatty(STDIN_FILENO) )
|
|
+ {
|
|
+ goto error_hard;
|
|
+ }
|
|
+
|
|
+ //bb_printf( "DEBUG: time = '%s'\n", argv[1] );
|
|
+ //bb_printf( "DEBUG: mesg = '%s'\n", argv[2] );
|
|
+
|
|
+ struct termios orig;
|
|
+ struct termios attr;
|
|
+
|
|
+ if ( tcgetattr(STDIN_FILENO, &orig) == -1 )
|
|
+ {
|
|
+ goto error_hard;
|
|
+ }
|
|
+
|
|
+ attr = orig;
|
|
+ attr.c_cc[VMIN] = 0;
|
|
+ attr.c_cc[VTIME] = 0;
|
|
+ attr.c_iflag |= INLCR;
|
|
+ attr.c_oflag |= OPOST|ONLCR;
|
|
+ attr.c_cflag &= ~PARENB;
|
|
+ attr.c_lflag &= ~(ICANON/*|ECHO*/);
|
|
+ if ( tcsetattr(STDIN_FILENO,TCSANOW,&attr) == -1 )
|
|
+ {
|
|
+ goto error_hard;
|
|
+ }
|
|
+
|
|
+ fd_set rfds;
|
|
+ struct timeval tv;
|
|
+ int retval;
|
|
+
|
|
+ FD_ZERO(&rfds);
|
|
+ FD_SET(0, &rfds);
|
|
+
|
|
+ tv.tv_sec = atoi( argv[1] );
|
|
+ tv.tv_usec = 0;
|
|
+
|
|
+ if ( argc == 3 )
|
|
+ {
|
|
+ bb_printf( argv[2], tv.tv_sec );
|
|
+ bb_printf( "\n" );
|
|
+ fflush(stdout);
|
|
+ }
|
|
+ retval = select(1, &rfds, NULL, NULL, &tv);
|
|
+ if (retval > 0)
|
|
+ {
|
|
+ status = EXIT_SUCCESS;
|
|
+ }
|
|
+
|
|
+ if (tcsetattr(STDIN_FILENO,TCSANOW,&orig) == -1 )
|
|
+ {
|
|
+ goto error_hard;
|
|
+ }
|
|
+
|
|
+ return status;
|
|
+
|
|
+error_hard :
|
|
+ return EXIT_FAILURE;
|
|
+};
|
|
+
|
|
--- busybox-1.00/console-tools/Makefile.in~add-getkey-applet.patch
|
|
+++ busybox-1.00/console-tools/Makefile.in
|
|
@@ -28,6 +28,7 @@
|
|
CONSOLETOOLS_DIR-$(CONFIG_CLEAR) += clear.o
|
|
CONSOLETOOLS_DIR-$(CONFIG_DEALLOCVT) += deallocvt.o
|
|
CONSOLETOOLS_DIR-$(CONFIG_DUMPKMAP) += dumpkmap.o
|
|
+CONSOLETOOLS_DIR-$(CONFIG_GETKEY) += getkey.o
|
|
CONSOLETOOLS_DIR-$(CONFIG_LOADFONT) += loadfont.o
|
|
CONSOLETOOLS_DIR-$(CONFIG_LOADKMAP) += loadkmap.o
|
|
CONSOLETOOLS_DIR-$(CONFIG_OPENVT) += openvt.o
|
|
--- busybox-1.00/console-tools/Config.in~add-getkey-applet.patch
|
|
+++ busybox-1.00/console-tools/Config.in
|
|
@@ -31,6 +31,14 @@
|
|
This program dumps the kernel's keyboard translation table to
|
|
stdout, in binary format. You can then use loadkmap to load it.
|
|
|
|
+config CONFIG_GETKEY
|
|
+ bool "getkey"
|
|
+ default n
|
|
+ help
|
|
+ This program displays a configurable message and waits
|
|
+ a dedicated number of seconds for a keypress. It sets
|
|
+ the exit code accordingly, i.e. SUCCESS if there was a keypress.
|
|
+
|
|
config CONFIG_LOADFONT
|
|
bool "loadfont"
|
|
default n
|
|
--- busybox-1.00/include/applets.h~add-getkey-applet.patch
|
|
+++ busybox-1.00/include/applets.h
|
|
@@ -223,6 +223,9 @@
|
|
#ifdef CONFIG_FTPPUT
|
|
APPLET(ftpput, ftpgetput_main, _BB_DIR_USR_BIN, _BB_SUID_NEVER)
|
|
#endif
|
|
+#ifdef CONFIG_GETKEY
|
|
+ APPLET(getkey, getkey_main, _BB_DIR_SBIN, _BB_SUID_NEVER)
|
|
+#endif
|
|
#ifdef CONFIG_GETOPT
|
|
APPLET(getopt, getopt_main, _BB_DIR_BIN, _BB_SUID_NEVER)
|
|
#endif
|
|
--- busybox-1.00/include/usage.h~add-getkey-applet.patch
|
|
+++ busybox-1.00/include/usage.h
|
|
@@ -734,6 +734,13 @@
|
|
"\t-p, --password Password to be used\n" \
|
|
"\t-P, --port Port number to be used"
|
|
|
|
+#define getkey_trivial_usage \
|
|
+ "time [message]"
|
|
+#define getkey_full_usage \
|
|
+ "Display a message and wait for a keypress."
|
|
+#define getkey_example_usage \
|
|
+ "$ getkey 5 'Press a key within %d seconds to interrupt autoboot.'"
|
|
+
|
|
#define getopt_trivial_usage \
|
|
"[OPTIONS]..."
|
|
#define getopt_full_usage \
|