Yaroslav Kolomiietsrename passinput() to act()0bd46519 years agoHistory
224 lines · 2.9 KB · C
RawDownload
#include <u.h>#include <libc.h>#include <keyboard.h>#include "dat.h"#include "fns.h"  enum{	Kbrk=	KF|0x861,	KeyEx= 	0x0100,	KeyUp=	0x8000,}; enum{	Sext=	(1<<16),	Sesc=	1,	S1=	2,	S0=	11,	Sbspace=	14,	Stab=	15,	Sq=	16,	Sw=	17,	Se=	18,	Sr=	19,	St=	20,	Sy=	21,	Su=	22,	Si=	23,	So=	24,	Sp=	25,	Srbrace=	27,	Sret=	28,	Slctrl=	29,	Sa=	30,	Ss=	31,	Sd=	32 ,	Sf=	33,	Sg=	34,	Sh=	35,	Sj=	36,	Sk=	37,	Sl=	38,	Slshift=	42,	Sbslash=	43,	Sz=	44,	Sx=	45,	Sc=	46,	Sv=	47,	Sb=	48,	Sn=	49,	Sm=	50,	Speriod=	52,	Sslash=	53,	Sprint=	Sext|55,	SF1=	59,	SF11=	87,	SF12=	88,	Shome=	199,	Sup=	200,	Spgup=	201,	Sleft=	203,	Sright=	205,	Sdown=	208,	Spgdown=	209,	Send=	207,	Sins=	210,	Sdel=	211,}; struct {	uchar sc, mod;} rune2scan[] = {	Sdel, Slshift,	Sa,  Slctrl,	Sb,  Slctrl,	Sc,  Slctrl,	Sd,  Slctrl,	Se,  Slctrl,	Sf,  Slctrl,	Sg,  Slctrl,	Sbspace,  0,	Stab,    0,	Sret,  0,	Sk,  Slctrl,	Sl,  Slctrl,	Sm,    Slctrl,	Sn,  Slctrl,	So,  Slctrl,	Sp,  Slctrl,	Sq,  Slctrl,	Sr,  Slctrl,	Ss,  Slctrl,	St,  Slctrl,	Su,  Slctrl,	Sv,  Slctrl,	Sw,  Slctrl,	Sx,  Slctrl,	Sy,  Slctrl,	Sz,  Slctrl,	Sesc, 0,	Sbslash, Slctrl,	Srbrace, Slctrl,	Speriod, Slctrl,	Sslash,  Slctrl,}; voidkbdsendscan(Rdp* c, int sc, int mod){	long msec;	int x; 	x = 0;	if(sc&Sext)		x = KeyEx;	sc &= ~Sext; 	msec = time(nil);	if(mod != 0)		act(c, msec, InputKeycode, 0, mod, 0);	act(c, msec, InputKeycode, x|0, sc, 0);	act(c, msec, InputKeycode, x|KeyUp, sc, 0);	if(mod != 0)		act(c, msec, InputKeycode, KeyUp, mod, 0);} voidkbdsendrune(Rdp* c, Rune r){	long msec; 	msec = time(nil);	act(c, msec, InputUnicode, 0, r, 0);	act(c, msec, InputUnicode, KeyUp, r, 0);} voidsendkbd(Rdp* c, Rune r){	uchar mod, sc; 	if(r < nelem(rune2scan)){		sc = rune2scan[r].sc;		mod = rune2scan[r].mod;		kbdsendscan(c, sc, mod);		return;	} 	switch(r){	case Kins:		kbdsendscan(c, Sins, 0);		break;	case Kdel:		kbdsendscan(c, Sdel, 0);		break;	case Khome:		kbdsendscan(c, Shome, 0);		break;	case Kend:		kbdsendscan(c, Send, 0);		break;	case Kpgup:		kbdsendscan(c, Spgup, 0);		break;	case Kpgdown:		kbdsendscan(c, Spgdown, 0);		break;	case Kup:		kbdsendscan(c, Sup, 0);		break;	case Kdown:		kbdsendscan(c, Sdown,0 );		break;	case Kleft:		kbdsendscan(c, Sleft, 0);		break;	case Kright:		kbdsendscan(c, Sright, 0);		break;	case Kbrk:		exits("interrupt");		break;	case Kprint:		kbdsendscan(c, Sprint, 0);		break;	case KF|1:	case KF|2:	case KF|3:	case KF|4:	case KF|5:	case KF|6:	case KF|7:	case KF|8:	case KF|9:	case KF|10:		kbdsendscan(c, SF1+r-(KF|1), 0);		break;	case KF|11:		kbdsendscan(c, SF11, 0);		break;	case KF|12:		kbdsendscan(c, SF12, 0);		break;	case '0':		kbdsendscan(c, S0, 0);		break;	case '1':	case '2':	case '3':	case '4':	case '5':	case '6':	case '7':	case '8':	case '9':		kbdsendscan(c, S1+r-'1', 0);		break;	default:		kbdsendrune(c, r);		break;	}}