Initial public busybox upstream commit
[busybox4maemo] / console-tools / reset.c
1 /* vi: set sw=4 ts=4: */
2 /*
3  * Mini reset implementation for busybox
4  *
5  * Copyright (C) 1999-2004 by Erik Andersen <andersen@codepoet.org>
6  * Written by Erik Andersen and Kent Robotti <robotti@metconnect.com>
7  *
8  * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
9  */
10
11 #include "libbb.h"
12
13 /* BTW, which "standard" package has this utility? It doesn't seem
14  * to be ncurses, coreutils, console-tools... then what? */
15
16 #if ENABLE_STTY
17 int stty_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
18 #endif
19
20 int reset_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
21 int reset_main(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED)
22 {
23         static const char *const args[] = {
24                 "stty", "sane", NULL
25         };
26
27         /* no options, no getopt */
28
29         if (isatty(0) && isatty(1)) {
30                 /* See 'man 4 console_codes' for details:
31                  * "ESC c"                      -- Reset
32                  * "ESC ( K"            -- Select user mapping
33                  * "ESC [ J"            -- Erase display
34                  * "ESC [ 0 m"          -- Reset all display attributes
35                  * "ESC [ ? 25 h"       -- Make cursor visible.
36                  */
37                 printf("\033c\033(K\033[J\033[0m\033[?25h");
38                 /* http://bugs.busybox.net/view.php?id=1414:
39                  * people want it to reset echo etc: */
40 #if ENABLE_STTY
41                 return stty_main(2, (char**)args);
42 #else
43                 execvp("stty", (char**)args);
44 #endif
45         }
46         return EXIT_SUCCESS;
47 }