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

📄 input.c

📁 源码,标准c++用力
💻 C
字号:
/* *	$XConsortium: input.c,v 1.16 91/05/10 16:57:16 gildea Exp $ *//* * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. * *                         All Rights Reserved * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, * provided that the above copyright notice appear in all copies and that * both that copyright notice and this permission notice appear in * supporting documentation, and that the name of Digital Equipment * Corporation not be used in advertising or publicity pertaining to * distribution of the software without specific, written prior permission. * * * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS * SOFTWARE. *//* input.c */#include "ptyx.h"		/* gets Xt headers, too */#include <X11/keysym.h>#include <X11/DECkeysym.h>#include <X11/Xutil.h>#include <stdio.h>static XComposeStatus compose_status = {NULL, 0};static char *kypd_num = " \0\0\0\0\0\0\0\0\t\0\0\0\r\0\0\0\0\0\0\0""7486293150.\0\0\0\0\0\0\0\0\0\0*+,-./0123456789\0\0\0=";static char *kypd_apl = " ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}";static char *kypd_cur = " ABCDEFGHIJKLMNOPQRSTwDACBysqu^_`abcdefghijklmnopqBsDuCwAyz{|}";/* curses workaround mapping:  maps keypad arrows to cursor keys and  * keypad home,end,etc to keypad numbers. 		-- JLM */static char *cur = "DACB";static int funcvalue(), sunfuncvalue();extern Boolean sunFunctionKeys;static voidAdjustAfterInput (screen)register TScreen *screen;{	if(screen->scrollkey && screen->topline != 0)		WindowScroll(screen, 0);	if(screen->marginbell) {		int col = screen->max_col - screen->nmarginbell;		if(screen->bellarmed >= 0) {			if(screen->bellarmed == screen->cur_row) {			    if(screen->cur_col >= col) {				Bell();				screen->bellarmed = -1;			    }			} else			    screen->bellarmed =				screen->cur_col < col ? screen->cur_row : -1;		} else if(screen->cur_col < col)			screen->bellarmed = screen->cur_row;	}}Input (keyboard, screen, event, eightbit)    register TKeyboard	*keyboard;    register TScreen	*screen;    register XKeyEvent *event;    Bool eightbit;{#define STRBUFSIZE 100	char strbuf[STRBUFSIZE];	register char *string;	register int key = FALSE;	int	pty	= screen->respond;	int	nbytes;	KeySym  keysym;	ANSI	reply;	char	tmp[STRBUFSIZE];	char	*bp = strbuf;	int	count;	XEvent	ev;	count = XLookupString (event, tmp, STRBUFSIZE,			       &keysym, &compose_status);	strncpy(bp, tmp, count);	bp += count;	nbytes = count;	/*	 * Make sure we get every keystroke available	 * before we start doing the update, so can issue a single	 * DrawString instead of several.	 */	while (nbytes < STRBUFSIZE && 	       XCheckMaskEvent(screen->display, KeyPressMask, &ev))	{	    count = XLookupString ((XKeyEvent *)&ev, tmp, STRBUFSIZE,				   &keysym, &compose_status);	    if (nbytes + count <= STRBUFSIZE) {		strncpy(bp, tmp, count);		bp += count;		nbytes += count;	    } else {		XPutBackEvent(screen->display, &ev);		break;	    }	}	string = &strbuf[0];	reply.a_pintro = 0;	reply.a_final = 0;	reply.a_nparam = 0;	reply.a_inters = 0;	if (IsPFKey(keysym)) {		reply.a_type = SS3;		unparseseq(&reply, pty);		unparseputc((char)(keysym-XK_KP_F1+'P'), pty);		key = TRUE;	} else if (IsKeypadKey(keysym)) {	  	if (keyboard->flags & KYPD_APL)	{			reply.a_type   = SS3;			unparseseq(&reply, pty);			unparseputc((screen->curses ? kypd_cur : kypd_apl)[keysym-XK_KP_Space], pty);			/* If we're working around curses, use a different map. */		} else			unparseputc(kypd_num[keysym-XK_KP_Space], pty);		key = TRUE;        } else if (IsCursorKey(keysym) &&        	keysym != XK_Prior && keysym != XK_Next &&			keysym != XK_Home && keysym != XK_End) {       		if (keyboard->flags & CURSOR_APL) {			reply.a_type = SS3;			unparseseq(&reply, pty);			unparseputc(cur[keysym-XK_Left], pty);		} else {			reply.a_type = CSI;			reply.a_final = cur[keysym-XK_Left];			unparseseq(&reply, pty);		}		key = TRUE;	 } else if (IsFunctionKey(keysym) || IsMiscFunctionKey(keysym) ||	 	keysym == XK_Prior || keysym == XK_Next || keysym == XK_Home ||	 	keysym == XK_End || keysym == DXK_Remove) {		reply.a_type = CSI;		reply.a_nparam = 1;		if (sunFunctionKeys) {		    reply.a_param[0] = sunfuncvalue (keysym);		    reply.a_final = 'z';		} else {		    reply.a_param[0] = funcvalue (keysym);		    reply.a_final = '~';		}		if (reply.a_param[0] > 0)			unparseseq(&reply, pty);		key = TRUE;	} else if (nbytes > 0) {		if(screen->TekGIN) {			TekEnqMouse(*string++);			TekGINoff();			nbytes--;		}		if ((nbytes == 1) && eightbit) {		    if (screen->input_eight_bits)		      *string |= 0x80;	/* turn on eighth bit */		    else		      unparseputc (033, pty);  /* escape */		}		while (nbytes-- > 0)			unparseputc(*string++, pty);		key = TRUE;	}	if(key && !screen->TekEmu)	        AdjustAfterInput(screen);#ifdef ENABLE_PRINT	if (keysym == XK_F2) TekPrint();#endif	return;}StringInput (screen, string, nbytes)    register TScreen	*screen;    register char *string;    int nbytes;{	int	pty	= screen->respond;	if(nbytes && screen->TekGIN) {		TekEnqMouse(*string++);		TekGINoff();		nbytes--;	}	while (nbytes-- > 0)		unparseputc(*string++, pty);	if(!screen->TekEmu)	        AdjustAfterInput(screen);}static int funcvalue (keycode)	int keycode;{	switch (keycode) {		case XK_F1:	return(11);		case XK_F2:	return(12);		case XK_F3:	return(13);		case XK_F4:	return(14);		case XK_F5:	return(15);		case XK_F6:	return(17);		case XK_F7:	return(18);		case XK_F8:	return(19);		case XK_F9:	return(20);		case XK_F10:	return(21);		case XK_F11:	return(23);		case XK_F12:	return(24);		case XK_F13:	return(25);		case XK_F14:	return(26);		case XK_F15:	return(28);		case XK_Help:	return(28);		case XK_F16:	return(29);		case XK_Menu:	return(29);		case XK_F17:	return(31);		case XK_F18:	return(32);		case XK_F19:	return(33);		case XK_F20:	return(34);		case XK_Find :	return(1);		case XK_Insert:	return(2);		case XK_Delete:	return(3);		case DXK_Remove: return(3);		case XK_Select:	return(4);		case XK_Prior:	return(5);		case XK_Next:	return(6);		case XK_Home:	return(7);		case XK_End:	return(8);		default:	return(-1);	}}static int sunfuncvalue (keycode)	int keycode;  {  	switch (keycode) {		case XK_F1:	return(224);		case XK_F2:	return(225);		case XK_F3:	return(226);		case XK_F4:	return(227);		case XK_F5:	return(228);		case XK_F6:	return(229);		case XK_F7:	return(230);		case XK_F8:	return(231);		case XK_F9:	return(232);		case XK_F10:	return(233);		case XK_F11:	return(192);		case XK_F12:	return(193);		case XK_F13:	return(194);		case XK_F14:	return(195);		case XK_F15:	return(196);		case XK_Help:	return(196);		case XK_F16:	return(197);		case XK_Menu:	return(197);		case XK_F17:	return(198);		case XK_F18:	return(199);		case XK_F19:	return(200);		case XK_F20:	return(201);		case XK_R1:	return(208);		case XK_R2:	return(209);		case XK_R3:	return(210);		case XK_R4:	return(211);		case XK_R5:	return(212);		case XK_R6:	return(213);		case XK_R7:	return(214);		case XK_R8:	return(215);		case XK_R9:	return(216);		case XK_R10:	return(217);		case XK_R11:	return(218);		case XK_R12:	return(219);		case XK_R13:	return(220);		case XK_R14:	return(221);		case XK_R15:	return(222);  		case XK_Find :	return(1);		case XK_Insert:	return(2);		case XK_Delete:	return(3);		case DXK_Remove: return(3);		case XK_Select:	return(4);		case XK_Prior:	return(5);		case XK_Next:	return(6);		case XK_Home:	return(7);		case XK_End:	return(8);		default:	return(-1);	}}

⌨️ 快捷键说明

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