⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kbd_tty.c

📁 神龙卡开发原代码
💻 C
字号:
/* * Copyright (c) 1999 Greg Haerr <greg@censoft.com> * Copyright (c) 1991 David I. Bell * Permission is granted to use, distribute, or modify this source, * provided that this copyright notice remains intact. * * /dev/tty TTY Keyboard Driver */#include <stdlib.h>#include <sys/types.h>#include <fcntl.h>#include <unistd.h>#include <errno.h>#include <termios.h>#include "device.h"#if ELKS#define	KEYBOARD	"/dev/tty1"	/* keyboard associated with screen*/#else#define	KEYBOARD	"/dev/tty"	/* keyboard associated with screen*/#endifextern int escape_quits;static int  TTY_Open(KBDDEVICE *pkd);static void TTY_Close(void);static void TTY_GetModifierInfo(MWKEYMOD *modifiers, MWKEYMOD *curmodifiers);static int  TTY_Read(MWKEY *kbuf, MWKEYMOD *modifiers, MWSCANCODE *scancode);static int  TTY_Poll(void);KBDDEVICE kbddev = {	TTY_Open,	TTY_Close,	TTY_GetModifierInfo,	TTY_Read,#if _MINIX	TTY_Poll#else	NULL#endif};static	int		fd;		/* file descriptor for keyboard */static	struct termios	old;		/* original terminal modes *//* * Open the keyboard. * This is real simple, we just use a special file handle * that allows non-blocking I/O, and put the terminal into * character mode. */static intTTY_Open(KBDDEVICE *pkd){  char *env;	int		i;	int		ledstate = 0;	struct termios	new;	/* Open "CONSOLE" or /dev/tty device*/	if(!(env = getenv("CONSOLE")))		fd = open(KEYBOARD, O_NONBLOCK);	else		fd = open(env, O_NONBLOCK);	if (fd < 0)		return -1;	if (tcgetattr(fd, &old) < 0)		goto err;	new = old;	/* If you uncomment ISIG and BRKINT below, then ^C will be ignored.*/	new.c_lflag &= ~(ECHO | ICANON | IEXTEN /*| ISIG*/);	new.c_iflag &= ~(ICRNL | INPCK | ISTRIP | IXON /*| BRKINT*/);	new.c_cflag &= ~(CSIZE | PARENB);	new.c_cflag |= CS8;	new.c_cc[VMIN] = 0;	new.c_cc[VTIME] = 0;	if(tcsetattr(fd, TCSAFLUSH, &new) < 0)		goto err;	return fd;err:	close(fd);	fd = 0;	return -1;}/* * Close the keyboard. * This resets the terminal modes. */static voidTTY_Close(void){	tcsetattr(fd, TCSANOW, &old);	close(fd);	fd = 0;}/* * Return the possible modifiers for the keyboard. */static  voidTTY_GetModifierInfo(MWKEYMOD *modifiers, MWKEYMOD *curmodifiers){	if (modifiers)		*modifiers = 0;		/* no modifiers available */	if (curmodifiers)		*curmodifiers = 0;}/* * This reads one keystroke from the keyboard, and the current state of * the modifier keys (ALT, SHIFT, etc).  Returns -1 on error, 0 if no data * is ready, 1 on a keypress, and 2 on keyrelease. * This is a non-blocking call. */static intTTY_Read(MWKEY *kbuf, MWKEYMOD *modifiers, MWSCANCODE *scancode){	int	cc;			/* characters read */	MWKEY	mwkey;	unsigned char buf[1];	cc = read(fd, buf, 1);	if (cc > 0) {		mwkey = buf[0];		if (mwkey == 27 && escape_quits)	/* ESC -> quit*/			mwkey = MWKEY_QUIT;		else if (mwkey == ('P'&0x1f))		/* ^P -> print*/			mwkey = MWKEY_PRINT;		*kbuf = mwkey;		/* no translation*/		*modifiers = 0;		/* no modifiers*/		*scancode = 0;		/* no scancode*/		return 1;		/* keypress*/	}	if ((cc < 0) && (errno != EINTR) && (errno != EAGAIN)) {		return -1;	}	return 0;}static intTTY_Poll(void){	return 1;	/* used by _MINIX only*/}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -