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

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

?? lib_getch.c

?? ncurses-5.4 需要的就來下把 一定會有用的哦
?? C
字號:
/**************************************************************************** * Copyright (c) 1998-2001,2002 Free Software Foundation, Inc.              * *                                                                          * * Permission is hereby granted, free of charge, to any person obtaining a  * * copy of this software and associated documentation files (the            * * "Software"), to deal in the Software without restriction, including      * * without limitation the rights to use, copy, modify, merge, publish,      * * distribute, distribute with modifications, sublicense, and/or sell       * * copies of the Software, and to permit persons to whom the Software is    * * furnished to do so, subject to the following conditions:                 * *                                                                          * * The above copyright notice and this permission notice shall be included  * * in all copies or substantial portions of the Software.                   * *                                                                          * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  * * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               * * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   * * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   * * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    * * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    * * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               * *                                                                          * * Except as contained in this notice, the name(s) of the above copyright   * * holders shall not be used in advertising or otherwise to promote the     * * sale, use or other dealings in this Software without prior written       * * authorization.                                                           * ****************************************************************************//**************************************************************************** *  Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995               * *     and: Eric S. Raymond <esr@snark.thyrsus.com>                         * ****************************************************************************//***	lib_getch.c****	The routine getch().***/#include <curses.priv.h>MODULE_ID("$Id: lib_getch.c,v 1.71 2003/05/17 23:49:28 tom Exp $")#include <fifo_defs.h>NCURSES_EXPORT_VAR(int)ESCDELAY = 1000;		/* max interval betw. chars in funkeys, in millisecs */#ifdef NCURSES_WGETCH_EVENTS#define TWAIT_MASK 7#else#define TWAIT_MASK 3#endif/* * Check for mouse activity, returning nonzero if we find any. */static intcheck_mouse_activity(int delay EVENTLIST_2nd(_nc_eventlist * evl)){    int rc;#if USE_SYSMOUSE    if ((SP->_mouse_type == M_SYSMOUSE)	&& (SP->_sysmouse_head < SP->_sysmouse_tail)) {	return 2;    }#endif    rc = _nc_timed_wait(TWAIT_MASK, delay, (int *) 0 EVENTLIST_2nd(evl));#if USE_SYSMOUSE    if ((SP->_mouse_type == M_SYSMOUSE)	&& (SP->_sysmouse_head < SP->_sysmouse_tail)	&& (rc == 0)	&& (errno == EINTR)) {	rc |= 2;    }#endif    return rc;}static inline intfifo_peek(void){    int ch = SP->_fifo[peek];    TR(TRACE_IEVENT, ("peeking at %d", peek));    p_inc();    return ch;}static inline intfifo_pull(void){    int ch;    ch = SP->_fifo[head];    TR(TRACE_IEVENT, ("pulling %s from %d", _tracechar(ch), head));    if (peek == head) {	h_inc();	peek = head;    } else	h_inc();#ifdef TRACE    if (_nc_tracing & TRACE_IEVENT)	_nc_fifo_dump();#endif    return ch;}static inline intfifo_push(EVENTLIST_0th(_nc_eventlist * evl)){    int n;    int ch = 0;    int mask = 0;    (void) mask;    if (tail == -1)	return ERR;#ifdef HIDE_EINTR  again:    errno = 0;#endif#ifdef NCURSES_WGETCH_EVENTS    if (evl#if USE_GPM_SUPPORT || USE_EMX_MOUSE || USE_SYSMOUSE	|| (SP->_mouse_fd >= 0)#endif	) {	mask = check_mouse_activity(-1 EVENTLIST_2nd(evl));    } else	mask = 0;    if (mask & 4) {	T(("fifo_push: ungetch KEY_EVENT"));	ungetch(KEY_EVENT);	return KEY_EVENT;    }#elif USE_GPM_SUPPORT || USE_EMX_MOUSE || USE_SYSMOUSE    if (SP->_mouse_fd >= 0) {	mask = check_mouse_activity(-1 EVENTLIST_2nd(evl));    }#endif#if USE_GPM_SUPPORT || USE_EMX_MOUSE    if ((SP->_mouse_fd >= 0) && (mask & 2)) {	SP->_mouse_event(SP);	ch = KEY_MOUSE;	n = 1;    } else#endif#if USE_SYSMOUSE	if ((SP->_mouse_type == M_SYSMOUSE)	    && (SP->_sysmouse_head < SP->_sysmouse_tail)) {	SP->_mouse_event(SP);	ch = KEY_MOUSE;	n = 1;    } else if ((SP->_mouse_type == M_SYSMOUSE)	       && (mask <= 0) && errno == EINTR) {	SP->_mouse_event(SP);	ch = KEY_MOUSE;	n = 1;    } else#endif    {				/* Can block... */	unsigned char c2 = 0;	n = read(SP->_ifd, &c2, 1);	ch = c2;    }#ifdef HIDE_EINTR    /*     * Under System V curses with non-restarting signals, getch() returns     * with value ERR when a handled signal keeps it from completing.     * If signals restart system calls, OTOH, the signal is invisible     * except to its handler.     *     * We don't want this difference to show.  This piece of code     * tries to make it look like we always have restarting signals.     */    if (n <= 0 && errno == EINTR)	goto again;#endif    if ((n == -1) || (n == 0)) {	TR(TRACE_IEVENT, ("read(%d,&ch,1)=%d, errno=%d", SP->_ifd, n, errno));	ch = ERR;    }    TR(TRACE_IEVENT, ("read %d characters", n));    SP->_fifo[tail] = ch;    SP->_fifohold = 0;    if (head == -1)	head = peek = tail;    t_inc();    TR(TRACE_IEVENT, ("pushed %s at %d", _tracechar(ch), tail));#ifdef TRACE    if (_nc_tracing & TRACE_IEVENT)	_nc_fifo_dump();#endif    return ch;}static inline voidfifo_clear(void){    memset(SP->_fifo, 0, sizeof(SP->_fifo));    head = -1;    tail = peek = 0;}static int kgetch(EVENTLIST_0th(_nc_eventlist * evl));#define wgetch_should_refresh(win) (\	(is_wintouched(win) || (win->_flags & _HASMOVED)) \	&& !(win->_flags & _ISPAD))NCURSES_EXPORT(int)_nc_wgetch(WINDOW *win,	   unsigned long *result,	   int use_meta	   EVENTLIST_2nd(_nc_eventlist * evl)){    int ch;#ifdef NCURSES_WGETCH_EVENTS    long event_delay = -1;#endif    T((T_CALLED("_nc_wgetch(%p)"), win));    *result = 0;    if (!win)	returnCode(ERR);    if (cooked_key_in_fifo()) {	if (wgetch_should_refresh(win))	    wrefresh(win);	*result = fifo_pull();	returnCode(OK);    }#ifdef NCURSES_WGETCH_EVENTS    if (evl && (evl->count == 0))	evl = NULL;    event_delay = _nc_eventlist_timeout(evl);#endif    /*     * Handle cooked mode.  Grab a string from the screen,     * stuff its contents in the FIFO queue, and pop off     * the first character to return it.     */    if (head == -1 &&	!SP->_notty &&	!SP->_raw &&	!SP->_cbreak &&	!SP->_called_wgetch) {	char buf[MAXCOLUMNS], *sp;	int rc;	TR(TRACE_IEVENT, ("filling queue in cooked mode"));	SP->_called_wgetch = TRUE;	rc = wgetnstr(win, buf, MAXCOLUMNS);	SP->_called_wgetch = FALSE;	/* ungetch in reverse order */#ifdef NCURSES_WGETCH_EVENTS	if (rc != KEY_EVENT)#endif	    ungetch('\n');	for (sp = buf + strlen(buf); sp > buf; sp--)	    ungetch(sp[-1]);#ifdef NCURSES_WGETCH_EVENTS	/* Return it first */	if (rc == KEY_EVENT) {	    *result = rc;	    returnCode(OK);	}#endif	*result = fifo_pull();	returnCode(OK);    }    if (win->_use_keypad != SP->_keypad_on)	_nc_keypad(win->_use_keypad);    if (wgetch_should_refresh(win))	wrefresh(win);    if (!win->_notimeout && (win->_delay >= 0 || SP->_cbreak > 1)) {	int delay;	TR(TRACE_IEVENT, ("timed delay in wgetch()"));	if (SP->_cbreak > 1)	    delay = (SP->_cbreak - 1) * 100;	else	    delay = win->_delay;#ifdef NCURSES_WGETCH_EVENTS	if (event_delay >= 0 && delay > event_delay)	    delay = event_delay;#endif	TR(TRACE_IEVENT, ("delay is %d milliseconds", delay));	if (head == -1) {	/* fifo is empty */	    int rc = check_mouse_activity(delay EVENTLIST_2nd(evl));#ifdef NCURSES_WGETCH_EVENTS	    if (rc & 4) {		*result = KEY_EVENT;		returnCode(OK);	    }#endif	    if (!rc)		returnCode(ERR);	}	/* else go on to read data available */    }    if (win->_use_keypad) {	/*	 * This is tricky.  We only want to get special-key	 * events one at a time.  But we want to accumulate	 * mouse events until either (a) the mouse logic tells	 * us it's picked up a complete gesture, or (b)	 * there's a detectable time lapse after one.	 *	 * Note: if the mouse code starts failing to compose	 * press/release events into clicks, you should probably	 * increase the wait with mouseinterval().	 */	int runcount = 0;	int rc;	do {	    ch = kgetch(EVENTLIST_1st(evl));	    if (ch == KEY_MOUSE) {		++runcount;		if (SP->_mouse_inline(SP))		    break;	    }	    if (SP->_maxclick < 0)		break;	} while	    (ch == KEY_MOUSE	     && (((rc = check_mouse_activity(SP->_maxclick					     EVENTLIST_2nd(evl))) != 0		  && !(rc & 4))		 || !SP->_mouse_parse(runcount)));#ifdef NCURSES_WGETCH_EVENTS	if ((rc & 4) && !ch == KEY_EVENT) {	    ungetch(ch);	    ch = KEY_EVENT;	}#endif	if (runcount > 0 && ch != KEY_MOUSE) {#ifdef NCURSES_WGETCH_EVENTS	    /* mouse event sequence ended by an event, report event */	    if (ch == KEY_EVENT) {		ungetch(KEY_MOUSE);	/* FIXME This interrupts a gesture... */	    } else#endif	    {		/* mouse event sequence ended by keystroke, store keystroke */		ungetch(ch);		ch = KEY_MOUSE;	    }	}    } else {	if (head == -1)	    fifo_push(EVENTLIST_1st(evl));	ch = fifo_pull();    }    if (ch == ERR) {#if USE_SIZECHANGE	if (SP->_sig_winch) {	    _nc_update_screensize();	    /* resizeterm can push KEY_RESIZE */	    if (cooked_key_in_fifo()) {		*result = fifo_pull();		returnCode(*result >= KEY_MIN ? KEY_CODE_YES : OK);	    }	}#endif	returnCode(ERR);    }    /*     * If echo() is in effect, display the printable version of the     * key on the screen.  Carriage return and backspace are treated     * specially by Solaris curses:     *     * If carriage return is defined as a function key in the     * terminfo, e.g., kent, then Solaris may return either ^J (or ^M     * if nonl() is set) or KEY_ENTER depending on the echo() mode.      * We echo before translating carriage return based on nonl(),     * since the visual result simply moves the cursor to column 0.     *     * Backspace is a different matter.  Solaris curses does not     * translate it to KEY_BACKSPACE if kbs=^H.  This does not depend     * on the stty modes, but appears to be a hardcoded special case.     * This is a difference from ncurses, which uses the terminfo entry.     * However, we provide the same visual result as Solaris, moving the     * cursor to the left.     */    if (SP->_echo && !(win->_flags & _ISPAD)) {	chtype backup = (ch == KEY_BACKSPACE) ? '\b' : ch;	if (backup < KEY_MIN)	    wechochar(win, backup);    }    /*     * Simulate ICRNL mode     */    if ((ch == '\r') && SP->_nl)	ch = '\n';    /* Strip 8th-bit if so desired.  We do this only for characters that     * are in the range 128-255, to provide compatibility with terminals     * that display only 7-bit characters.  Note that 'ch' may be a     * function key at this point, so we mustn't strip _those_.     */    if (!use_meta)	if ((ch < KEY_MIN) && (ch & 0x80))	    ch &= 0x7f;    T(("wgetch returning : %s", _tracechar(ch)));    *result = ch;    returnCode(ch >= KEY_MIN ? KEY_CODE_YES : OK);}#ifdef NCURSES_WGETCH_EVENTSNCURSES_EXPORT(int)wgetch_events(WINDOW *win, _nc_eventlist * evl){    int code;    unsigned long value;    T((T_CALLED("wgetch_events(%p,%p)"), win, evl));    code = _nc_wgetch(win,		      &value,		      SP->_use_meta		      EVENTLIST_2nd(evl));    if (code != ERR)	code = value;    returnCode(code);}#endifNCURSES_EXPORT(int)wgetch(WINDOW *win){    int code;    unsigned long value;    T((T_CALLED("wgetch(%p)"), win));    code = _nc_wgetch(win,		      &value,		      SP->_use_meta		      EVENTLIST_2nd((_nc_eventlist *) 0));    if (code != ERR)	code = value;    returnCode(code);}/***      int**      kgetch()****      Get an input character, but take care of keypad sequences, returning**      an appropriate code when one matches the input.  After each character**      is received, set an alarm call based on ESCDELAY.  If no more of the**      sequence is received by the time the alarm goes off, pass through**      the sequence gotten so far.****	This function must be called when there are no cooked keys in queue.**	(that is head==-1 || peek==head)***/static intkgetch(EVENTLIST_0th(_nc_eventlist * evl)){    struct tries *ptr;    int ch = 0;    int timeleft = ESCDELAY;    TR(TRACE_IEVENT, ("kgetch() called"));    ptr = SP->_keytry;    for (;;) {	if (cooked_key_in_fifo() && SP->_fifo[head] >= KEY_MIN) {	    break;	} else if (!raw_key_in_fifo()) {	    ch = fifo_push(EVENTLIST_1st(evl));	    if (ch == ERR) {		peek = head;	/* the keys stay uninterpreted */		return ERR;	    }#ifdef NCURSES_WGETCH_EVENTS	    else if (ch == KEY_EVENT) {		peek = head;	/* the keys stay uninterpreted */		return fifo_pull();	/* Remove KEY_EVENT from the queue */	    }#endif	}	ch = fifo_peek();	if (ch >= KEY_MIN) {	    /* If not first in queue, somebody put this key there on purpose in	     * emergency.  Consider it higher priority than the unfinished	     * keysequence we are parsing.	     */	    peek = head;	    /* assume the key is the last in fifo */	    t_dec();		/* remove the key */	    return ch;	}	TR(TRACE_IEVENT, ("ch: %s", _tracechar((unsigned char) ch)));	while ((ptr != NULL) && (ptr->ch != (unsigned char) ch))	    ptr = ptr->sibling;	if (ptr == NULL) {	    TR(TRACE_IEVENT, ("ptr is null"));	    break;	}	TR(TRACE_IEVENT, ("ptr=%p, ch=%d, value=%d",			  ptr, ptr->ch, ptr->value));	if (ptr->value != 0) {	/* sequence terminated */	    TR(TRACE_IEVENT, ("end of sequence"));	    if (peek == tail)		fifo_clear();	    else		head = peek;	    return (ptr->value);	}	ptr = ptr->child;	if (!raw_key_in_fifo()) {	    int rc;	    TR(TRACE_IEVENT, ("waiting for rest of sequence"));	    rc = check_mouse_activity(timeleft EVENTLIST_2nd(evl));#ifdef NCURSES_WGETCH_EVENTS	    if (rc & 4) {		TR(TRACE_IEVENT, ("interrupted by a user event"));		/* FIXME Should have preserved remainder timeleft for reusal... */		peek = head;	/* Restart interpreting later */		return KEY_EVENT;	    }#endif	    if (!rc) {		TR(TRACE_IEVENT, ("ran out of time"));		break;	    }	}    }    ch = fifo_pull();    peek = head;    return ch;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
奇米色777欧美一区二区| 欧美激情一区二区三区蜜桃视频| 久草精品在线观看| 午夜精品久久久久久久| 国产亚洲一区二区三区四区| 欧美不卡一区二区三区四区| 欧美人与性动xxxx| 91蜜桃网址入口| 91免费观看国产| 91久久精品一区二区| 韩国一区二区在线观看| 国产成人亚洲综合a∨婷婷图片| 激情综合五月天| 91在线高清观看| 欧洲亚洲国产日韩| 欧美一二三区在线观看| 久久综合给合久久狠狠狠97色69| 欧美zozozo| 国产精品视频九色porn| 亚洲一区二区在线观看视频| 亚洲成人av福利| 国产成人在线视频播放| 99久久99久久精品免费观看| 这里只有精品99re| 久久精品亚洲麻豆av一区二区| 制服丝袜国产精品| 国产片一区二区| 久久久99精品久久| 一区二区三区中文免费| 捆绑调教美女网站视频一区| 精品1区2区3区| 91网站在线播放| 最新不卡av在线| 精品久久久久av影院| 国产精品黄色在线观看| 亚洲欧洲精品天堂一级 | 99免费精品视频| 欧美人与z0zoxxxx视频| 欧美成人video| 国产欧美日韩精品一区| 日韩精品电影一区亚洲| 91国偷自产一区二区三区成为亚洲经典 | 久久精品国产77777蜜臀| 91福利国产成人精品照片| 综合色天天鬼久久鬼色| 94色蜜桃网一区二区三区| 日本一区二区免费在线| 丰满放荡岳乱妇91ww| 中文字幕国产一区| 99久久99久久精品国产片果冻| 欧美久久一二区| 亚洲与欧洲av电影| 欧美日韩视频在线一区二区| 午夜激情久久久| 日韩女优av电影| 91免费看`日韩一区二区| 亚洲天堂a在线| 欧美一区中文字幕| 成人国产精品免费观看| 亚洲妇女屁股眼交7| 337p日本欧洲亚洲大胆精品| 国产成人久久精品77777最新版本| 午夜精品久久久久久久久| 欧美一区二区在线不卡| 欧美精品日韩精品| 亚洲欧美一区二区三区极速播放| 久久99久久久久久久久久久| 久久蜜桃一区二区| 欧美在线观看禁18| 日韩一区二区三区精品视频| 亚洲免费在线视频一区 二区| 国模套图日韩精品一区二区| 91碰在线视频| 国产亚洲女人久久久久毛片| 韩国一区二区三区| 久久久欧美精品sm网站| 韩国午夜理伦三级不卡影院| 日韩欧美一区在线| 麻豆精品在线播放| 日韩欧美美女一区二区三区| 亚洲综合一区二区精品导航| 国产精品福利影院| 国产欧美精品一区| 精品日韩av一区二区| 日本二三区不卡| 91女厕偷拍女厕偷拍高清| 奇米888四色在线精品| 亚洲成人免费看| 亚洲成人激情综合网| 亚洲一线二线三线久久久| 国产精品久久久久久妇女6080| 久久综合九色综合97_久久久| 日韩欧美一区二区在线视频| 欧美一级日韩免费不卡| 91精品国产欧美一区二区18 | 亚洲欧洲99久久| 国产欧美综合色| 亚洲裸体xxx| 爽好多水快深点欧美视频| 一区二区在线免费| 图片区小说区国产精品视频| 国产一区二区在线看| 99视频一区二区| 日韩欧美国产一区二区三区| 午夜精品视频在线观看| 99久久99久久精品免费看蜜桃| 亚洲婷婷综合久久一本伊一区| 亚洲成a人片在线观看中文| 99综合影院在线| 国产一区欧美一区| 国产一区不卡精品| 91福利视频网站| 一区二区三区中文字幕| 欧美成人女星排行榜| 粉嫩一区二区三区在线看| 亚洲影视在线播放| 精品国产百合女同互慰| 色综合久久久网| 国产美女av一区二区三区| 亚洲免费观看在线视频| 日韩三级伦理片妻子的秘密按摩| 久久91精品国产91久久小草| 日韩欧美综合一区| 一区二区在线观看av| 国产精品自拍一区| 久久久久9999亚洲精品| 美女诱惑一区二区| 欧美三级资源在线| 亚洲一级二级三级| 在线视频国内自拍亚洲视频| 亚洲男同性恋视频| aaa欧美色吧激情视频| 国产欧美精品一区二区色综合| 美女一区二区视频| 91精品国产色综合久久不卡蜜臀| 亚洲一区二区三区不卡国产欧美| 91丨porny丨首页| 亚洲黄色性网站| 国产精品午夜春色av| 国产成人av影院| 亚洲欧美激情视频在线观看一区二区三区| 国产精品亚洲午夜一区二区三区| 久久久一区二区| 91在线观看视频| 久久精品国产在热久久| 久久精品一区二区三区四区| 欧美做爰猛烈大尺度电影无法无天| 亚洲成av人片在www色猫咪| 欧美成人精品二区三区99精品| 国产91露脸合集magnet| 亚洲国产日日夜夜| 欧美国产综合色视频| 亚洲国产精品99久久久久久久久 | 国产超碰在线一区| 久久青草国产手机看片福利盒子| 成人黄色电影在线 | 欧美韩国日本不卡| 久久精品日韩一区二区三区| 国产精品996| 欧美日韩一区二区三区视频| 狂野欧美性猛交blacked| 亚洲一区二区三区国产| 亚洲女子a中天字幕| 久久久国际精品| 精品国产自在久精品国产| 欧美精品一区二区三区在线播放| 97国产一区二区| 欧美精品在欧美一区二区少妇 | 欧美丰满高潮xxxx喷水动漫| 亚洲地区一二三色| 青青草国产成人99久久| 欧美日免费三级在线| 欧美日韩国产另类一区| 欧美中文字幕一区二区三区亚洲| 欧美日韩综合在线免费观看| 丁香另类激情小说| 91豆麻精品91久久久久久| 91精品国产一区二区| 日韩欧美一二三四区| 中文字幕二三区不卡| 国产精品免费视频一区| 亚洲日穴在线视频| 一区二区三区中文字幕在线观看| 亚洲国产日韩综合久久精品| 日韩高清不卡在线| 日韩高清不卡一区二区三区| 久久精品99久久久| 国产99精品国产| 欧美在线免费播放| 精品少妇一区二区三区在线播放 | 日韩影院在线观看| 麻豆专区一区二区三区四区五区| 国产成人h网站| 色婷婷综合激情| 欧美一区国产二区| 欧美日韩一区不卡| 久久色.com| 夜夜嗨av一区二区三区中文字幕| 首页国产丝袜综合| 国产成人av影院|