Mercurial > hg > toybox
changeset 229:87390c3700c1
Add chvt from David Anders.
author | Rob Landley <rob@landley.net> |
---|---|
date | Sun, 06 Jan 2008 16:01:11 -0600 |
parents | 90f763207f56 |
children | 5c03ba9e3924 |
files | toys/Config.in toys/chvt.c toys/toylist.h |
diffstat | 3 files changed, 67 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/toys/Config.in Sat Jan 05 18:23:30 2008 -0600 +++ b/toys/Config.in Sun Jan 06 16:01:11 2008 -0600 @@ -48,6 +48,18 @@ 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/toys/chvt.c Sun Jan 06 16:01:11 2008 -0600 @@ -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; + +}
--- a/toys/toylist.h Sat Jan 05 18:23:30 2008 -0600 +++ b/toys/toylist.h Sun Jan 06 16:01:11 2008 -0600 @@ -136,6 +136,7 @@ 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))