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 | |
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')
-rw-r--r-- | lib/libvgl/Makefile | 2 | ||||
-rw-r--r-- | lib/libvgl/keyboard.c | 90 | ||||
-rw-r--r-- | lib/libvgl/main.c | 7 | ||||
-rw-r--r-- | lib/libvgl/vgl.h | 9 |
4 files changed, 105 insertions, 3 deletions
diff --git a/lib/libvgl/Makefile b/lib/libvgl/Makefile index ebbc021..d540dd4 100644 --- a/lib/libvgl/Makefile +++ b/lib/libvgl/Makefile @@ -2,7 +2,7 @@ LIB= vgl SHLIB_MAJOR= 1 SHLIB_MINOR= 0 CFLAGS+=-Wall -I${.CURDIR} -SRCS= main.c simple.c bitmap.c text.c mouse.c +SRCS= main.c simple.c bitmap.c text.c mouse.c keyboard.c MAN3= vgl.3 beforeinstall: 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; +} diff --git a/lib/libvgl/main.c b/lib/libvgl/main.c index 4334f4e..a7af6e9 100644 --- a/lib/libvgl/main.c +++ b/lib/libvgl/main.c @@ -25,7 +25,7 @@ * (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: main.c,v 1.14 1997/08/15 12:32:59 sos Exp $ + * $Id: main.c,v 1.1 1997/08/17 21:09:34 sos Exp $ */ #include <stdio.h> @@ -45,12 +45,15 @@ static byte *VGLBuf; static byte *VGLMem; static int VGLSwitchPending; static int VGLOnDisplay; +static int VGLInitDone = 0; void VGLEnd() { struct vt_mode smode; + if (!VGLInitDone) + return; /* while (!VGLOnDisplay) pause(); VGLCheckSwitch();; @@ -65,6 +68,7 @@ struct vt_mode smode; ioctl(0, VT_SETMODE, &smode); free(VGLBuf); free(VGLDisplay); + VGLKeyboardEnd(); } static void @@ -169,6 +173,7 @@ VGLInit(int mode) return 1; } VGLTextSetFontFile((byte*)0); + VGLInitDone = 1; return 0; } diff --git a/lib/libvgl/vgl.h b/lib/libvgl/vgl.h index 02994da..b08dc82 100644 --- a/lib/libvgl/vgl.h +++ b/lib/libvgl/vgl.h @@ -25,7 +25,7 @@ * (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: vgl.h,v 1.14 1997/08/17 20:46:55 sos Exp sos $ + * $Id: vgl.h,v 1.1 1997/08/17 21:09:35 sos Exp $ */ #include <stdlib.h> @@ -74,6 +74,9 @@ typedef struct VGLObject { #define VGL_DIR_UP 1 #define VGL_DIR_LEFT 2 #define VGL_DIR_DOWN 3 +#define VGL_RAWKEYS 1 +#define VGL_CODEKEYS 2 +#define VGL_XLATEKEYS 3 extern VGLBitmap *VGLDisplay; @@ -83,6 +86,10 @@ extern VGLBitmap *VGLDisplay; /* bitmap.c */ int __VGLBitmapCopy(VGLBitmap *src, int srcx, int srcy, VGLBitmap *dst, int dstx, int dsty, int width, int hight); int VGLBitmapCopy(VGLBitmap *src, int srcx, int srcy, VGLBitmap *dst, int dstx, int dsty, int width, int hight); +/* keyboard.c */ +int VGLKeyboardInit(int mode); +void VGLKeyboardEnd(void); +int VGLKeyboardGetCh(void); /* main.c */ void VGLEnd(void); int VGLInit(int mode); |