aboutsummaryrefslogtreecommitdiff
path: root/toys/chvt.c
diff options
context:
space:
mode:
Diffstat (limited to 'toys/chvt.c')
-rw-r--r--toys/chvt.c54
1 files changed, 54 insertions, 0 deletions
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;
+
+}