diff options
author | sos <sos@FreeBSD.org> | 1997-10-01 20:53:41 +0000 |
---|---|---|
committer | sos <sos@FreeBSD.org> | 1997-10-01 20:53:41 +0000 |
commit | f555b825368400f4d464ba61e70d13c6ae357109 (patch) | |
tree | aab3465f0831082e9f67214aa7ef85cc7ad4341a /lib/libvgl/keyboard.c | |
parent | 85a02d214d4daf2fbdbfa72558a07df37a7d832f (diff) | |
download | FreeBSD-src-f555b825368400f4d464ba61e70d13c6ae357109.zip FreeBSD-src-f555b825368400f4d464ba61e70d13c6ae357109.tar.gz |
Add rudimentary support for using the keyboard.
Diffstat (limited to 'lib/libvgl/keyboard.c')
-rw-r--r-- | lib/libvgl/keyboard.c | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/lib/libvgl/keyboard.c b/lib/libvgl/keyboard.c new file mode 100644 index 0000000..334d973 --- /dev/null +++ b/lib/libvgl/keyboard.c @@ -0,0 +1,90 @@ +/*- + * Copyright (c) 1997 Søren Schmidt + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer + * in this position and unchanged. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software withough specific prior written permission + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * $Id$ + */ + +#include <stdio.h> +#include <sys/types.h> +#include <sys/ioctl.h> +#include <termios.h> +#include <sys/time.h> +#include <machine/console.h> +#include "vgl.h" + +static struct termios VGLKeyboardTty; +static int VGLKeyboardMode = -1; + +int +VGLKeyboardInit(int mode) +{ + static struct termios term; + + ioctl(0, KDGKBMODE, &VGLKeyboardMode); + tcgetattr(0, &VGLKeyboardTty); + + term = VGLKeyboardTty; + term.c_iflag = IGNPAR | IGNBRK; + term.c_oflag = 0; + term.c_cflag = CREAD | CS8; + term.c_lflag &= ~(ICANON | ECHO | ISIG); + term.c_cc[VTIME] = 0; + term.c_cc[VMIN] = 0; + cfsetispeed(&term, 9600); + cfsetospeed(&term, 9600); + tcsetattr(0, TCSANOW, &term); + + switch (mode) { + case VGL_RAWKEYS: + ioctl(0, KDSKBMODE, K_RAW); + break; + case VGL_CODEKEYS: + ioctl(0, KDSKBMODE, K_CODE); + break; + case VGL_XLATEKEYS: + ioctl(0, KDSKBMODE, K_XLATE); + break; + } + return 0; +} + +void +VGLKeyboardEnd() +{ + if (VGLKeyboardMode != -1) + ioctl(0, KDSKBMODE, VGLKeyboardMode); + tcsetattr(0, TCSANOW, &VGLKeyboardTty); +} + +int +VGLKeyboardGetCh() +{ + unsigned char ch = 0; + + read (0, &ch, 1); + return (int)ch; +} |