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

📄 kbd_pipe.c

📁 神龙卡开发原代码
💻 C
字号:
/* * Copyright (C) 2000 by VTech Informations LTD. * * This source code is released under MPL *  * Vladimir Cotfas <vladimircotfas@vtech.ca> Aug 31, 2000 * * Named pipe Keyboard Driver for Microwindows * See src/demos/nxkbd/srvconn.c for example client-side driver */#include <stdio.h>#include <stddef.h>#include <stdlib.h>#include <unistd.h>#include <errno.h>#include <string.h>#include <fcntl.h>#include <sys/stat.h>#include <sys/types.h>#include "device.h"static char kbdName[] = "/tmp/.nano-X-softkbd";#define KBD_NAMED_PIPE	kbdName	#define _SOFT_DEBUG	0static int kbd_fd = -1; /* keyboar driver FIFO */static int  soft_Open(KBDDEVICE* pkd);static void soft_Close();static void soft_GetModifierInfo(MWKEYMOD* modifiers, MWKEYMOD* curmodifiers);static int  soft_Read(MWKEY* buf, MWKEYMOD* modifiers, MWSCANCODE* scancode);KBDDEVICE kbddev = {    soft_Open,    soft_Close,    soft_GetModifierInfo,    soft_Read,    NULL};/* * Open the keyboard. */static intsoft_Open(KBDDEVICE* pkd){        struct stat s;        /* Check if the file already exists: */        if (!stat(KBD_NAMED_PIPE, &s)) {                if (unlink(KBD_NAMED_PIPE) < 0)                        return -1;        }	if (mkfifo(KBD_NAMED_PIPE, 0600) < 0) {		EPRINTF("mkfifo() error %d ('%s')\n", \			errno, sys_errlist[errno]);		return -1;	}        /* Open the named pipe */        if ((kbd_fd = open(KBD_NAMED_PIPE, O_RDONLY | O_NONBLOCK)) < 0) {		EPRINTF("open() error %d ('%s')\n", \			errno, sys_errlist[errno]);                return -1;	}	    	return kbd_fd;}/* * Close the keyboard. */static voidsoft_Close(){#if _SOFT_DEBUG    EPRINTF("kbd_soft.c: soft_Close(): closing named pipe %d\n", kbd_fd);#endif    if (kbd_fd >= 0)	    close(kbd_fd);    kbd_fd = -1;    unlink(KBD_NAMED_PIPE);}/* * Return the possible modifiers for the keyboard. */static  voidsoft_GetModifierInfo(MWKEYMOD* modifiers, MWKEYMOD* curmodifiers){#if _SOFT_DEBUG    EPRINTF("kbd_soft.c: soft_GetModifierInfo(): being asked about modifiers\n");#endif    if (modifiers)        *modifiers = 0;			/* no modifiers available */    if (curmodifiers)        *curmodifiers = 0;		/* no modifiers available */}/* * This reads one keystroke from the keyboard, and the current state of * the mode keys (ALT, SHIFT, CTRL).  Returns -1 on error, 0 if no data * is ready, and 1 if data was read.  This is a non-blocking call. */static intsoft_Read(MWKEY* buf, MWKEYMOD* modifiers, MWSCANCODE* scancode){    int cc;    *modifiers = 0;         /* no modifiers yet */    *scancode = 0;          /* no scancode yet */    cc = read(kbd_fd, buf, 1); /* this is NON BLOCKING read */    if (cc > 0) {	if(*buf == 0x1b)	      return -2;      /* special case ESC*/#if _SOFT_DEBUG    	EPRINTF("kbd_soft.c: soft_Read(): read '%c', cc = %d\n", 	        buf[0], cc); 	fflush(NULL);#endif	return 1;    }    return 0;}

⌨️ 快捷键说明

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