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

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

?? lib_mouse.c

?? ncurses-5.4 需要的就來下把 一定會有用的哦
?? C
?? 第 1 頁 / 共 3 頁
字號:
	     * Take over SIGUSR2 for this purpose since SIGUSR1 is more	     * likely to be used by an application.  getch() will have to	     * handle the misleading EINTR's.	     */	    signal(SIGUSR2, SIG_IGN);	    the_mouse.operation = MOUSE_MODE;	    the_mouse.u.mode.mode = 0;	    the_mouse.u.mode.signal = SIGUSR2;	    if (ioctl(SP->_mouse_fd, CONS_MOUSECTL, &the_mouse) != -1) {		signal(SIGUSR2, handle_sysmouse);		the_mouse.operation = MOUSE_SHOW;		ioctl(SP->_mouse_fd, CONS_MOUSECTL, &the_mouse);#if defined(FBIO_MODEINFO) || defined(CONS_MODEINFO)	/* FreeBSD > 2.x */		{#ifndef FBIO_GETMODE		/* FreeBSD 3.x */#define FBIO_GETMODE    CONS_GET#define FBIO_MODEINFO   CONS_MODEINFO#endif /* FBIO_GETMODE */		    video_info_t the_video;		    if (ioctl(SP->_mouse_fd,			      FBIO_GETMODE,			      &the_video.vi_mode) != -1			&& ioctl(SP->_mouse_fd,				 FBIO_MODEINFO,				 &the_video) != -1) {			SP->_sysmouse_char_width = the_video.vi_cwidth;			SP->_sysmouse_char_height = the_video.vi_cheight;		    }		}#endif /* defined(FBIO_MODEINFO) || defined(CONS_MODEINFO) */		if (SP->_sysmouse_char_width <= 0)		    SP->_sysmouse_char_width = 8;		if (SP->_sysmouse_char_height <= 0)		    SP->_sysmouse_char_height = 16;		SP->_mouse_type = M_SYSMOUSE;		return;	    }	}    }#endif /* USE_SYSMOUSE */    /* we know how to recognize mouse events under "xterm" */    if (key_mouse != 0) {	if (!strcmp(key_mouse, xterm_kmous)) {	    init_xterm_mouse();	    return;	}    } else if (strstr(cur_term->type.term_names, "xterm") != 0) {	(void) _nc_add_to_try(&(SP->_keytry), xterm_kmous, KEY_MOUSE);	init_xterm_mouse();	return;    }}static void_nc_mouse_init(void)/* initialize the mouse */{    int i;    if (!initialized) {	initialized = TRUE;	TR(MY_TRACE, ("_nc_mouse_init() called"));	for (i = 0; i < EV_MAX; i++)	    events[i].id = INVALID_EVENT;	initialize_mousetype();	T(("_nc_mouse_init() set mousetype to %d", SP->_mouse_type));    }}/* * Query to see if there is a pending mouse event.  This is called from * fifo_push() in lib_getch.c */static bool_nc_mouse_event(SCREEN * sp GCC_UNUSED){    bool result = FALSE;    switch (SP->_mouse_type) {    case M_XTERM:	/* xterm: never have to query, mouse events are in the keyboard stream */#if USE_EMX_MOUSE	{	    char kbuf[3];	    int i, res = read(M_FD(sp), &kbuf, 3);	/* Eat the prefix */	    if (res != 3)		printf("Got %d chars instead of 3 for prefix.\n", res);	    for (i = 0; i < res; i++) {		if (kbuf[i] != key_mouse[i])		    printf("Got char %d instead of %d for prefix.\n",			   (int) kbuf[i], (int) key_mouse[i]);	    }	    result = TRUE;	}#endif /* USE_EMX_MOUSE */	break;#if USE_GPM_SUPPORT    case M_GPM:	{	    /* query server for event, return TRUE if we find one */	    Gpm_Event ev;	    if (Gpm_GetEvent(&ev) == 1) {		/* there's only one mouse... */		eventp->id = NORMAL_EVENT;		eventp->bstate = 0;		switch (ev.type & 0x0f) {		case (GPM_DOWN):		    if (ev.buttons & GPM_B_LEFT)			eventp->bstate |= BUTTON1_PRESSED;		    if (ev.buttons & GPM_B_MIDDLE)			eventp->bstate |= BUTTON2_PRESSED;		    if (ev.buttons & GPM_B_RIGHT)			eventp->bstate |= BUTTON3_PRESSED;		    break;		case (GPM_UP):		    if (ev.buttons & GPM_B_LEFT)			eventp->bstate |= BUTTON1_RELEASED;		    if (ev.buttons & GPM_B_MIDDLE)			eventp->bstate |= BUTTON2_RELEASED;		    if (ev.buttons & GPM_B_RIGHT)			eventp->bstate |= BUTTON3_RELEASED;		    break;		default:		    break;		}		eventp->x = ev.x - 1;		eventp->y = ev.y - 1;		eventp->z = 0;		/* bump the next-free pointer into the circular list */		eventp = NEXT(eventp);		result = TRUE;	    }	}	break;#endif#if USE_SYSMOUSE    case M_SYSMOUSE:	if (SP->_sysmouse_head < SP->_sysmouse_tail) {	    *eventp = SP->_sysmouse_fifo[SP->_sysmouse_head];	    /*	     * Point the fifo-head to the next possible location.  If there	     * are none, reset the indices.  This may be interrupted by the	     * signal handler, doing essentially the same reset.	     */	    SP->_sysmouse_head += 1;	    if (SP->_sysmouse_head == SP->_sysmouse_tail) {		SP->_sysmouse_tail = 0;		SP->_sysmouse_head = 0;	    }	    /* bump the next-free pointer into the circular list */	    eventp = NEXT(eventp);	    result = TRUE;	}	break;#endif /* USE_SYSMOUSE */    case M_NONE:	break;    }    return result;		/* true if we found an event */}static bool_nc_mouse_inline(SCREEN * sp)/* mouse report received in the keyboard stream -- parse its info */{    bool result = FALSE;    TR(MY_TRACE, ("_nc_mouse_inline() called"));    if (SP->_mouse_type == M_XTERM) {	unsigned char kbuf[4];	mmask_t prev;	size_t grabbed;	int res;	/* This code requires that your xterm entry contain the kmous	 * capability and that it be set to the \E[M documented in the	 * Xterm Control Sequences reference.  This is how we	 * arrange for mouse events to be reported via a KEY_MOUSE	 * return value from wgetch().  After this value is received,	 * _nc_mouse_inline() gets called and is immediately	 * responsible for parsing the mouse status information	 * following the prefix.	 *	 * The following quotes from the ctrlseqs.ms document in the	 * X distribution, describing the X mouse tracking feature:	 *	 * Parameters for all mouse tracking escape sequences	 * generated by xterm encode numeric parameters in a single	 * character as value+040.  For example, !  is 1.	 *	 * On button press or release, xterm sends ESC [ M CbCxCy.	 * The low two bits of Cb encode button information: 0=MB1	 * pressed, 1=MB2 pressed, 2=MB3 pressed, 3=release.  The	 * upper bits encode what modifiers were down when the	 * button was pressed and are added together.  4=Shift,	 * 8=Meta, 16=Control.  Cx and Cy are the x and y coordinates	 * of the mouse event.  The upper left corner is (1,1).	 *	 * (End quote)  By the time we get here, we've eaten the	 * key prefix.  FYI, the loop below is necessary because	 * mouse click info isn't guaranteed to present as a	 * single clist item.  It always does under Linux but often	 * fails to under Solaris.	 */	for (grabbed = 0; grabbed < 3; grabbed += res) {	    /* For VIO mouse we add extra bit 64 to disambiguate button-up. */#if USE_EMX_MOUSE	    res = read(M_FD(sp) >= 0 ? M_FD(sp) : sp->_ifd, &kbuf, 3);#else	    res = read(sp->_ifd, kbuf + grabbed, 3 - grabbed);#endif	    if (res == -1)		break;	}	kbuf[3] = '\0';	TR(TRACE_IEVENT,	   ("_nc_mouse_inline sees the following xterm data: '%s'", kbuf));	/* there's only one mouse... */	eventp->id = NORMAL_EVENT;	/* processing code goes here */	eventp->bstate = 0;	prev = PREV(eventp)->bstate;#if USE_EMX_MOUSE#define PRESS_POSITION(n) \	eventp->bstate = MASK_PRESS(n); \	if (kbuf[0] & 0x40) \	    eventp->bstate = MASK_RELEASE(n)#else#define PRESS_POSITION(n) \	eventp->bstate = (prev & MASK_PRESS(n) \			? REPORT_MOUSE_POSITION \			: MASK_PRESS(n))#endif	switch (kbuf[0] & 0x3) {	case 0x0:	    PRESS_POSITION(1);	    break;	case 0x1:	    PRESS_POSITION(2);	    break;	case 0x2:	    PRESS_POSITION(3);	    break;	case 0x3:	    /*	     * Release events aren't reported for individual buttons, just for	     * the button set as a whole.  However, because there are normally	     * no mouse events under xterm that intervene between press and	     * release, we can infer the button actually released by looking at	     * the previous event.	     */	    if (prev & (BUTTON_PRESSED | BUTTON_RELEASED)) {		eventp->bstate = BUTTON_RELEASED;		if (!(prev & BUTTON1_PRESSED))		    eventp->bstate &= ~BUTTON1_RELEASED;		if (!(prev & BUTTON2_PRESSED))		    eventp->bstate &= ~BUTTON2_RELEASED;		if (!(prev & BUTTON3_PRESSED))		    eventp->bstate &= ~BUTTON3_RELEASED;	    } else {		/*		 * XFree86 xterm will return a stream of release-events to		 * let the application know where the mouse is going, if the		 * private mode 1002 or 1003 is enabled.		 */		eventp->bstate = REPORT_MOUSE_POSITION;	    }	    break;	}	result = (eventp->bstate & REPORT_MOUSE_POSITION) ? TRUE : FALSE;	if (kbuf[0] & 4) {	    eventp->bstate |= BUTTON_SHIFT;	}	if (kbuf[0] & 8) {	    eventp->bstate |= BUTTON_ALT;	}	if (kbuf[0] & 16) {	    eventp->bstate |= BUTTON_CTRL;	}	eventp->x = (kbuf[1] - ' ') - 1;	eventp->y = (kbuf[2] - ' ') - 1;	TR(MY_TRACE,	   ("_nc_mouse_inline: primitive mouse-event %s has slot %ld",	    _tracemouse(eventp),	    (long) (eventp - events)));	/* bump the next-free pointer into the circular list */	eventp = NEXT(eventp);#if 0				/* this return would be needed for QNX's mods to lib_getch.c */	return (TRUE);#endif    }    return (result);}static voidmouse_activate(bool on){    if (!on && !initialized)	return;    _nc_mouse_init();    if (on) {	switch (SP->_mouse_type) {	case M_XTERM:#if NCURSES_EXT_FUNCS	    keyok(KEY_MOUSE, on);#endif	    TPUTS_TRACE("xterm mouse initialization");#if USE_EMX_MOUSE	    server_state(1);#else	    enable_xterm_mouse(1);#endif	    break;#if USE_GPM_SUPPORT	case M_GPM:	    SP->_mouse_fd = gpm_fd;	    break;#endif#if USE_SYSMOUSE	case M_SYSMOUSE:	    signal(SIGUSR2, handle_sysmouse);	    break;#endif	case M_NONE:	    return;	}	/* Make runtime binding to cut down on object size of applications that	 * do not use the mouse (e.g., 'clear').	 */	SP->_mouse_event = _nc_mouse_event;	SP->_mouse_inline = _nc_mouse_inline;	SP->_mouse_parse = _nc_mouse_parse;	SP->_mouse_resume = _nc_mouse_resume;	SP->_mouse_wrap = _nc_mouse_wrap;    } else {	switch (SP->_mouse_type) {	case M_XTERM:	    TPUTS_TRACE("xterm mouse deinitialization");#if USE_EMX_MOUSE	    server_state(0);#else	    enable_xterm_mouse(0);#endif	    break;#if USE_GPM_SUPPORT	case M_GPM:	    break;#endif#if USE_SYSMOUSE	case M_SYSMOUSE:	    signal(SIGUSR2, SIG_IGN);	    break;#endif	case M_NONE:	    return;	}    }    _nc_flush();}/************************************************************************** * * Device-independent code * **************************************************************************/static bool_nc_mouse_parse(int runcount)/* parse a run of atomic mouse events into a gesture */{    MEVENT *ep, *runp, *next, *prev = PREV(eventp);    int n;    bool merge;    TR(MY_TRACE, ("_nc_mouse_parse(%d) called", runcount));    /*     * When we enter this routine, the event list next-free pointer     * points just past a run of mouse events that we know were separated     * in time by less than the critical click interval. The job of this     * routine is to collapse this run into a single higher-level event     * or gesture.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩 欧美一区二区三区| 亚洲精品老司机| 日韩欧美一级精品久久| 欧美三级电影在线看| 欧美疯狂做受xxxx富婆| 欧美丰满一区二区免费视频| 欧美日韩一区二区在线视频| 欧美视频一区在线观看| 91精品国产高清一区二区三区| 欧美老女人在线| 欧美精品一区二区不卡| 国产亚洲短视频| 一级做a爱片久久| 日韩精品1区2区3区| 久久久久久久久久看片| 一本久道中文字幕精品亚洲嫩| 国产在线一区观看| 久久天天做天天爱综合色| 日韩欧美国产麻豆| 欧美日韩视频第一区| 日韩不卡在线观看日韩不卡视频| 日韩欧美自拍偷拍| 久久综合色8888| 成人免费高清视频在线观看| 国产欧美日韩亚州综合| 国产一区福利在线| 另类的小说在线视频另类成人小视频在线| 久久久精品人体av艺术| 国产精品久久久久aaaa| 亚洲一级在线观看| 日韩经典中文字幕一区| 五月综合激情婷婷六月色窝| 手机精品视频在线观看| 久久精品国内一区二区三区| 婷婷开心激情综合| 免费高清不卡av| 日韩和欧美一区二区| 国产91清纯白嫩初高中在线观看| 国产精品久久看| 午夜视频在线观看一区二区| 成人av电影免费观看| 一本一道波多野结衣一区二区| 色婷婷精品久久二区二区蜜臂av| 在线一区二区三区四区五区| 欧美一区永久视频免费观看| 久久久99精品免费观看不卡| 日韩不卡手机在线v区| 岛国av在线一区| 欧美成人在线直播| 亚洲一区二区三区四区不卡| 久久99精品国产.久久久久| 欧美精品在线一区二区| 欧美精三区欧美精三区| 亚洲国产裸拍裸体视频在线观看乱了| 国内久久婷婷综合| 在线视频你懂得一区二区三区| 午夜精品一区二区三区电影天堂| 亚洲一区在线观看免费观看电影高清| 欧美日韩精品免费观看视频| 欧美日韩在线一区二区| 国产成人免费在线观看不卡| 国产乱码一区二区三区| 欧美日韩国产在线观看| 欧美日韩国产美| 国产精品美女一区二区| jiyouzz国产精品久久| 最新不卡av在线| 亚洲制服丝袜在线| 欧美日韩成人激情| 不卡的电影网站| 丝袜亚洲另类欧美| 国产精品视频在线看| 成人av在线一区二区三区| 亚洲国产精品黑人久久久| 欧美一区二区三区小说| 国产精品久久久一区麻豆最新章节| 国产精品久久久久久久蜜臀| 色哦色哦哦色天天综合| 一本久久综合亚洲鲁鲁五月天 | 亚洲激情五月婷婷| 久久99热狠狠色一区二区| 激情六月婷婷久久| 亚洲一区二区美女| 国产精品嫩草99a| 精品91自产拍在线观看一区| 欧美日韩国产大片| 一色屋精品亚洲香蕉网站| 日韩一二三区视频| 精品视频999| 精品在线一区二区三区| 国产在线精品一区在线观看麻豆| 国产精品每日更新| 欧美一区二区三区在线观看 | 午夜精品福利一区二区三区av | 欧美一区二区三区在线看| 99久久精品国产导航| 亚洲va韩国va欧美va精品| 国产一区激情在线| 男女性色大片免费观看一区二区| 久久婷婷色综合| 91香蕉视频mp4| 国产乱码精品一区二区三区av | 久久黄色级2电影| 日韩欧美在线影院| 日韩午夜精品视频| 日韩三级中文字幕| 欧美精品电影在线播放| 91精品欧美久久久久久动漫| 91在线看国产| 欧美伊人久久久久久久久影院| 青青草97国产精品免费观看 | 国产三级精品三级| 欧美日韩视频不卡| 欧美精品一区二区在线播放| 日韩一区二区不卡| 久久综合999| 国产精品你懂的| 午夜激情久久久| 久久精品视频免费观看| 久久亚洲欧美国产精品乐播 | 国产日韩精品一区二区三区| 91精品一区二区三区久久久久久| 国产一区二区按摩在线观看| 成人午夜精品一区二区三区| 一区二区高清在线| 污片在线观看一区二区| 亚洲免费三区一区二区| 久久久噜噜噜久噜久久综合| 1区2区3区国产精品| 中日韩免费视频中文字幕| 亚洲一区在线观看网站| 久久99这里只有精品| 成人精品视频.| www国产亚洲精品久久麻豆| 日韩三级视频在线看| 亚洲乱码国产乱码精品精98午夜| 国产精品乱人伦一区二区| 理论片日本一区| 欧美日韩一级黄| 欧美一卡2卡3卡4卡| 欧美国产丝袜视频| 国产欧美日本一区二区三区| 韩国精品免费视频| 精品日韩欧美在线| 欧美mv日韩mv亚洲| 亚洲精品自拍动漫在线| 91丝袜高跟美女视频| 一区二区三区美女视频| 欧美精品777| 精品一区二区影视| 国产精品久久久久一区二区三区共 | 日本一区二区免费在线观看视频 | 欧美精品免费视频| 亚洲精品一区二区在线观看| 自拍偷拍国产精品| 大桥未久av一区二区三区中文| 91麻豆精品国产自产在线观看一区 | 欧美日本国产一区| 亚洲综合免费观看高清在线观看| 国产成人精品免费| 精品人在线二区三区| 免费高清在线视频一区·| 欧美精品tushy高清| 五月天欧美精品| 欧美丰满少妇xxxbbb| 日韩一区精品视频| 欧美日韩一区视频| 日本午夜精品视频在线观看| 欧美一级一级性生活免费录像| 日韩二区三区四区| 精品蜜桃在线看| 国产成人精品在线看| 国产精品天干天干在线综合| av在线免费不卡| 一区二区三区在线免费播放| 欧美三级中文字幕在线观看| 亚洲va韩国va欧美va| 7777精品伊人久久久大香线蕉| 日韩av一区二区在线影视| 欧美一区二区三区色| 国产主播一区二区三区| 欧美日韩亚洲综合一区二区三区| 国产色综合久久| 成人理论电影网| 一区二区三区91| 欧美日韩成人综合天天影院| 毛片av一区二区三区| 久久女同精品一区二区| 成人精品鲁一区一区二区| 亚洲天堂成人网| 欧美久久一二区| 久久99在线观看| 国产目拍亚洲精品99久久精品| 成人h动漫精品一区二区| 亚洲影院在线观看| 精品成人在线观看| 91在线国产福利| 男女视频一区二区| 国产精品国产成人国产三级| 欧美日韩一区二区三区四区五区|