亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? wkeys.c

?? linux 下的超級終端 minicom
?? C
字號:
/* * wkeys.c	Read a keypress from the standard input. If it is an escape *		code, return a special value. * *		WARNING: possibly the most ugly code in this package! * *		This file is part of the minicom communications package, *		Copyright 1991-1995 Miquel van Smoorenburg. * *		This program is free software; you can redistribute it and/or *		modify it under the terms of the GNU General Public License *		as published by the Free Software Foundation; either version *		2 of the License, or (at your option) any later version. */#ifdef HAVE_CONFIG_H#include <config.h>#endif#include "rcsid.h"RCSID("$Id: wkeys.c,v 1.3 2003/04/19 16:31:27 al-guest Exp $")#include <strings.h>#include "port.h"#include "minicom.h"#include "intl.h"#if KEY_KLUDGE && defined(linux)#  include <sys/kd.h>#  include <sys/ioctl.h>#endif/* If enabled, this will cause minicom to treat ESC [ A and * ESC O A the same (stupid VT100 two mode keyboards). */#define VT_KLUDGE 0static struct key _keys[NUM_KEYS];static int keys_in_buf;extern int setcbreak();/* * The following is an external pointer to the termcap info. * If it's NOT zero then the main program has already * read the termcap for us. No sense in doing it twice. */extern char *_tptr;static char erasechar;static int gotalrm;extern int errno;int pendingkeys = 0;int io_pending = 0;static char *func_key[] = { 	"", "k1", "k2", "k3", "k4", "k5", "k6", "k7", "k8", "k9", "k0",	"kh", "kP", "ku", "kl", "kr", "kd", "kH", "kN", "kI", "kD",#ifdef _DGUX_SOURCE	"kA", "kB", (char *)0 };#else	"F1", "F2", (char *)0 };#endif#if KEY_KLUDGE/* * A VERY DIRTY HACK FOLLOWS: * This routine figures out if the tty we're using is a serial * device OR an IBM PC console. If we're using a console, we can * easily reckognize single escape-keys since escape sequences * always return > 1 characters from a read() */static int isconsole; static int testconsole(){  /* For Linux it's easy to see if this is a VC. */  int info;  return( ioctl(0, KDGETLED, &info) == 0);}/* * Function to read chunks of data from fd 0 all at once */static int cread(c)char *c;{  static char buf[32];  static int idx = 0;  static int lastread = 0;  if (idx > 0 && idx < lastread) {  	*c = buf[idx++];	keys_in_buf--;	if (keys_in_buf == 0 && pendingkeys == 0) io_pending = 0;  	return(lastread);  }  idx = 0;  do {	lastread = read(0, buf, 32);	keys_in_buf = lastread - 1;  } while(lastread < 0 && errno == EINTR);  *c = buf[0];  if (lastread > 1) {	idx = 1;	io_pending++;  }  return(lastread);}#endifstatic void _initkeys(){  int i;  static char *cbuf, *tbuf;  char *term;  if (_tptr == CNULL) {	if ((tbuf = (char *)malloc(512)) == CNULL || 		(cbuf = (char *)malloc(2048)) == CNULL) {  		write(2, _("Out of memory.\n"), 15);  		exit(1);	}	term = getenv("TERM");	switch(tgetent(cbuf, term)) {  		case 0:  			write(2, _("No termcap entry.\n"), 18);  			exit(1);  		case -1:  			write(2, _("No /etc/termcap present!\n"), 25);  			exit(1);  		default:  			break;  	}	_tptr = tbuf;  }	/* Initialize codes for special keys */  for(i = 0; func_key[i]; i++) {  	if ((_keys[i].cap = tgetstr(func_key[i], &_tptr)) == CNULL)  		_keys[i].cap = "";  	_keys[i].len = strlen(_keys[i].cap);  }#if KEY_KLUDGE  isconsole = testconsole();#endif}  /* * Dummy routine for the alarm signal */#ifndef HAVE_SELECTstatic void dummy_alarm(){  gotalrm = 1;}#endif  /* * Read a character from the keyboard. * Handle special characters too! */int wxgetch(){  int f, g;  int match = 1;  int len;  unsigned char c;  static unsigned char mem[8];  static int leftmem = 0;  static int init = 0;  int nfound = 0;  int start_match;#if VT_KLUDGE  char temp[8];#endif#ifdef HAVE_SELECT  struct timeval timeout;  fd_set readfds;  static fd_set *nofds = (fd_set *)0;#endif  if (init == 0) {  	_initkeys();  	init++;  	erasechar = setcbreak(3);  }  /* Some sequence still in memory ? */  if (leftmem) {	leftmem--;	if (leftmem == 0) pendingkeys = 0;	if (pendingkeys == 0 && keys_in_buf == 0) io_pending = 0;	return(mem[leftmem]);  }  gotalrm = 0;  pendingkeys = 0;  for (len = 1; len < 8 && match; len++) {#ifdef HAVE_SELECT#if KEY_KLUDGE	if (len > 1 && keys_in_buf == 0) {#else	if (len > 1) {#endif		timeout.tv_sec = 0;		timeout.tv_usec = 400000; /* 400 ms */#ifdef FD_SET		FD_ZERO(&readfds);		FD_SET(0, &readfds);#else		readfs = 1; /* First bit means file descriptor #0 */#endif#ifdef _HPUX_SOURCE		/* HPUX prototype of select is mangled */		nfound = select(1, (int *)&readfds,				(int *)nofds, (int *)nofds, &timeout);#else		nfound = select(1, &readfds, nofds, nofds, &timeout);#endif		if (nfound == 0) {			break;		}	}#else /* HAVE_SELECT */	if (len > 1) {		signal(SIGALRM, dummy_alarm);		alarm(1);	}#endif /* HAVE_SELECT */#if KEY_KLUDGE	while((nfound = cread(&c)) < 0 && (errno == EINTR && !gotalrm))		;#else  	while ((nfound = read(0, &c, 1)) < 0 && (errno == EINTR && !gotalrm))  		;#endif#ifndef HAVE_SELECT	if (len > 1) alarm(0);#endif	if (nfound < 1) break;  	if (len == 1) {  	/* Enter and erase have precedence over anything else */ 	 	if (c == (unsigned char)'\n')  			return c;		if (c == (unsigned char)erasechar)			return K_ERA;  	}#if KEY_KLUDGE	/* Return single characters immideately */	if (isconsole && nfound == 1 && len == 1) return(c);	/* Another hack - detect the Meta Key. */	if (isconsole && nfound == 2 && len == 1 &&		c == 27 && escape == 27) {		cread(&c);		return(c + K_META);	}#endif  	mem[len - 1] = c;  	match = 0;#if VT_KLUDGE	/* Oh boy. Stupid vt100 2 mode keyboard. */	strncpy(temp, mem, len);	if (len > 1 && temp[0] == 27) {		if (temp[1] == '[')			temp[1] = 'O';		else if (temp[1] == 'O')			temp[1] = '[';	}	/* We now have an alternate string to check. */#endif	start_match = 0;  	for (f = 0; f < NUM_KEYS; f++) {#if VT_KLUDGE  	    if (_keys[f].len >= len &&		(strncmp(_keys[f].cap, (char *)mem,  len) == 0 ||		 strncmp(_keys[f].cap, (char *)temp, len) == 0)) {#else	    if (_keys[f].len >= len && strncmp(_keys[f].cap, (char *)mem, len) == 0){#endif  			match++;  			if (_keys[f].len == len) {  				return(f + KEY_OFFS);  			}	    }	    /* Does it match on first two chars? */	    if (_keys[f].len > 1 && len == 2 &&		strncmp(_keys[f].cap, (char *)mem, 2) == 0) start_match++;	}#if KEY_KLUDGE	if (!isconsole)#endif#ifndef _MINIX /* Minix doesn't have ESC-c meta mode */	/* See if this _might_ be a meta-key. */	if (escape == 27 && !start_match && len == 2 && mem[0] == 27)		return(c + K_META);#endif  }  /* No match. in len we have the number of characters + 1 */  len--; /* for convenience */  if (len == 1) return(mem[0]);  /* Remember there are more keys waiting in the buffer */  pendingkeys++;  io_pending++;#ifndef HAVE_SELECT  /* Pressing eg escape twice means escape */  if (len == 2 && mem[0] == mem[1]) return(mem[0]);#endif    /* Reverse the "mem" array */  for(f = 0; f < len / 2; f++) {  	g = mem[f];  	mem[f] = mem[len - f - 1];  	mem[len - f - 1] = g;  }  leftmem = len - 1;  return(mem[leftmem]);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美午夜电影网| 国产美女视频一区| 色爱区综合激月婷婷| 国产精品每日更新| 99国产精品久久久久| 亚洲免费资源在线播放| 欧美日韩精品一区二区天天拍小说| 亚洲国产精品欧美一二99| 欧美日韩综合一区| 日韩精品福利网| 精品成人佐山爱一区二区| 国产精品一区2区| 136国产福利精品导航| 色综合久久久网| 日日夜夜精品免费视频| 精品国产一区二区三区久久久蜜月| 国精产品一区一区三区mba视频 | 一区2区3区在线看| 欧美视频在线一区二区三区 | 欧美一区二区高清| 韩国视频一区二区| 国产精品理论片| 欧美电影一区二区| 激情六月婷婷久久| 亚洲人精品一区| 欧美成va人片在线观看| 成人国产精品免费网站| 亚洲二区在线观看| 久久综合九色综合欧美亚洲| 成a人片国产精品| 亚瑟在线精品视频| 国产精品丝袜一区| 911精品国产一区二区在线| 精品一区二区在线视频| 亚洲色欲色欲www| 日韩欧美一级片| 91免费在线视频观看| 美腿丝袜亚洲一区| 亚洲四区在线观看| 精品88久久久久88久久久| 色综合久久综合中文综合网| 久久99精品国产| 一卡二卡欧美日韩| 国产日韩v精品一区二区| 欧美日本一道本在线视频| 成人黄色免费短视频| 捆绑调教美女网站视频一区| 亚洲精品水蜜桃| 国产日韩精品久久久| 日韩一区二区三区电影在线观看| a亚洲天堂av| 国产成人免费视频| 日本欧美一区二区三区乱码| 亚洲精品美国一| **欧美大码日韩| 久久综合五月天婷婷伊人| 91精品国产入口| 欧美性视频一区二区三区| 97久久超碰国产精品| 国产成人av影院| 精品在线亚洲视频| 日本中文在线一区| 亚洲国产成人高清精品| 亚洲猫色日本管| 中文字幕一区视频| 久久婷婷色综合| 精品成a人在线观看| 欧美日本韩国一区| 欧美日韩一区三区| 91麻豆国产香蕉久久精品| 不卡电影一区二区三区| 国产福利一区二区三区视频在线| 精品一区二区三区不卡| 麻豆国产欧美日韩综合精品二区 | 日韩电影一区二区三区四区| 亚洲美女屁股眼交| 亚洲美女在线一区| 亚洲一区免费视频| 亚洲激情第一区| 亚洲超碰97人人做人人爱| 视频一区二区三区在线| 日韩avvvv在线播放| 美腿丝袜在线亚洲一区| 极品美女销魂一区二区三区| 玖玖九九国产精品| 国产精品主播直播| 国产精品69毛片高清亚洲| 国产成人av福利| 成人开心网精品视频| 色婷婷亚洲一区二区三区| 91成人网在线| 欧美男男青年gay1069videost| 欧美日韩美女一区二区| 欧美一区二区三区精品| 精品国产91乱码一区二区三区| 精品国产a毛片| 国产精品美女久久久久久2018| 亚洲欧美日韩中文播放| 亚洲国产综合在线| 麻豆成人久久精品二区三区红| 国产一区二区三区观看| 国产精品一区二区三区四区| 高清国产一区二区| 91福利社在线观看| 91精品国产一区二区| 亚洲精品一区二区精华| 中文字幕免费不卡在线| 亚洲成人在线观看视频| 激情综合网最新| 99综合影院在线| 91精品国产一区二区| 国产清纯白嫩初高生在线观看91 | 亚洲私人影院在线观看| 午夜亚洲国产au精品一区二区| 久久aⅴ国产欧美74aaa| 成人精品国产免费网站| 欧美精品三级在线观看| 国产拍揄自揄精品视频麻豆| 一区二区高清免费观看影视大全| 久久99国产乱子伦精品免费| 91亚洲精品乱码久久久久久蜜桃| 在线播放国产精品二区一二区四区| 精品日韩av一区二区| 国产日韩欧美精品一区| 视频在线观看91| 波波电影院一区二区三区| 欧美日韩精品免费观看视频| 国产日韩欧美电影| 奇米精品一区二区三区在线观看| 高清成人在线观看| 欧美电影免费提供在线观看| 日韩理论片中文av| 国产精品一二三| 欧美高清激情brazzers| 最新国产精品久久精品| 国内精品久久久久影院薰衣草 | 欧美美女bb生活片| 国产亚洲va综合人人澡精品| 亚洲主播在线观看| 不卡一区二区中文字幕| 欧美va亚洲va国产综合| 亚洲国产视频一区二区| 北条麻妃国产九九精品视频| www国产精品av| 美女高潮久久久| 欧美精品三级日韩久久| 一级做a爱片久久| 一本一道综合狠狠老| 中文字幕欧美激情| 国产在线精品免费| 日韩区在线观看| 青草av.久久免费一区| 欧美日韩一级片在线观看| 亚洲视频狠狠干| 99久久免费精品| 国产精品美女久久久久久久久| 国产精品18久久久久久久久| 日韩一级完整毛片| 日韩专区欧美专区| 欧美日韩精品是欧美日韩精品| 亚洲乱码国产乱码精品精可以看| 99免费精品在线观看| 国产精品乱码一区二区三区软件 | 免费成人在线播放| 91麻豆精品久久久久蜜臀| 午夜精品福利一区二区蜜股av| 日本精品一区二区三区高清| 亚洲丝袜美腿综合| 91浏览器在线视频| 亚洲精品中文在线影院| 在线视频你懂得一区| 亚洲综合网站在线观看| 欧美亚一区二区| 日本视频在线一区| 日韩你懂的在线播放| 国内精品久久久久影院色| 精品美女被调教视频大全网站| 极品少妇xxxx偷拍精品少妇| 久久亚区不卡日本| 成人av在线资源| 自拍偷在线精品自拍偷无码专区| 99精品视频在线免费观看| 国产精品国产三级国产aⅴ入口| 99久久久久久| 一级特黄大欧美久久久| 欧美军同video69gay| 美腿丝袜一区二区三区| 国产欧美日韩亚州综合| 97久久人人超碰| 视频一区视频二区中文字幕| 精品久久久网站| 99久久综合国产精品| 亚洲国产精品影院| 337p粉嫩大胆色噜噜噜噜亚洲| 岛国一区二区在线观看| 国产精品你懂的| 欧美午夜精品久久久久久孕妇| 日本人妖一区二区| 国产精品美女久久久久aⅴ| 日本精品一区二区三区高清|