diff options
Diffstat (limited to 'toys')
-rw-r--r-- | toys/Config.in | 12 | ||||
-rw-r--r-- | toys/chvt.c | 54 | ||||
-rw-r--r-- | toys/toylist.h | 1 |
3 files changed, 67 insertions, 0 deletions
diff --git a/toys/Config.in b/toys/Config.in index 0539c1c4..4fabd6ef 100644 --- a/toys/Config.in +++ b/toys/Config.in @@ -48,6 +48,18 @@ config CHROOT Run command within a new root directory. If no command, run /bin/sh. +config CHVT + bool "chvt" + default y + help + usage: chvt N + + Change to virtual terminal number N. (This only works in text mode.) + + Virtual terminals are the Linux VGA text mode displays, ordinarily + switched between via alt-F1, alt-F2, etc. Use ctrl-alt-F1 to switch + from X to a virtual terminal, and alt-F6 (or F7, or F8) to get back. + config COUNT bool "count" default y diff --git a/toys/chvt.c b/toys/chvt.c new file mode 100644 index 00000000..46040685 --- /dev/null +++ b/toys/chvt.c @@ -0,0 +1,54 @@ +/* vi: set sw=4 ts=4: */ +/* + * chvt.c switch virtual terminals + * + * Copyright (C) 2008 David Anders <danders@amltd.com> + * + */ + +#include "toys.h" + +#define VT_ACTIVATE 0x5606 +#define VT_WAITACTIVE 0x5607 + +/* note get_console_fb() will need to be moved into a seperate lib section */ +int get_console_fd() +{ + int fd; + + fd = open("/dev/console", O_RDWR); + if (fd >= 0) + return fd; + + fd = open("/dev/vc/0", O_RDWR); + if (fd >= 0) + return fd; + + fd = open("/dev/tty", O_RDWR); + if (fd >= 0) + return fd; + + return -1; +} + +void chvt_main(void) +{ + int vtnum,fd; + + + if(!*toys.optargs) + return; + + vtnum=atoi(*toys.optargs); + + fd=get_console_fd(); + if (fd < 0) + return; + + if (ioctl(fd,VT_ACTIVATE,vtnum)) + return; + + if (ioctl(fd,VT_WAITACTIVE,vtnum)) + return; + +} diff --git a/toys/toylist.h b/toys/toylist.h index 05d70b16..2dd8620f 100644 --- a/toys/toylist.h +++ b/toys/toylist.h @@ -136,6 +136,7 @@ USE_BASENAME(NEWTOY(basename, "<1>2", TOYFLAG_BIN)) USE_BZCAT(NEWTOY(bzcat, NULL, TOYFLAG_USR|TOYFLAG_BIN)) USE_CATV(NEWTOY(catv, "vte", TOYFLAG_USR|TOYFLAG_BIN)) USE_CHROOT(NEWTOY(chroot, "<1", TOYFLAG_USR|TOYFLAG_SBIN)) +USE_CHVT(NEWTOY(chvt, "<1", TOYFLAG_USR|TOYFLAG_SBIN)) USE_COUNT(NEWTOY(count, NULL, TOYFLAG_USR|TOYFLAG_BIN)) USE_TOYSH(NEWTOY(cd, NULL, TOYFLAG_NOFORK)) USE_DF(NEWTOY(df, "Pkt*a", TOYFLAG_USR|TOYFLAG_SBIN)) |