plan 9 kernel history: overview | file list | diff list

1994/0503/carrera/kbd.c (diff list | history)

1994/0428/sys/src/9/carrera/kbd.c:190,2011994/0503/sys/src/9/carrera/kbd.c:190,201 (short | long | prev | next)
1994/0306    
void 
1993/0907    
kbdintr(void) 
{ 
	int c, i, nk; 
1994/0503    
	int c, i; 
1994/0306    
	static int esc1, esc2; 
	static int caps; 
	static int ctl; 
	static int num; 
	static int lstate; 
1994/0503    
	static int collecting, nk; 
1993/0907    
	static uchar kc[5]; 
1994/0306    
	static int shift; 
	int keyup; 
1994/0428/sys/src/9/carrera/kbd.c:257,2951994/0503/sys/src/9/carrera/kbd.c:257,277
1994/0306    
	if(!(c & Spec)){ 
		if(ctl) 
			c &= 0x1f; 
1993/0907    
		switch(lstate){ 
		case 1: 
1994/0306    
			kc[0] = c; 
1993/0907    
			lstate = 2; 
1994/0306    
			if(c == 'X') 
1993/0907    
				lstate = 3; 
			break; 
		case 2: 
1994/0306    
			kc[1] = c; 
1993/0907    
			c = latin1(kc); 
			nk = 2; 
		putit: 
			lstate = 0; 
			if(c != -1) 
				kbdputc(kbdq, c); 
1994/0306    
			else for(i=0; i<nk; i++) 
				kbdputc(kbdq, kc[i]); 
1993/0907    
			break; 
		case 3: 
		case 4: 
		case 5: 
1994/0306    
			kc[lstate-2] = c; 
1993/0907    
			lstate++; 
			break; 
		case 6: 
1994/0306    
			kc[4] = c; 
1993/0907    
			c = unicode(kc); 
			nk = 5; 
			goto putit; 
		default: 
1994/0503    
		if(!collecting){ 
1994/0306    
			kbdputc(kbdq, c); 
1993/0907    
			break; 
1994/0503    
			return; 
1993/0907    
		} 
1994/0503    
		kc[nk++] = c; 
		c = latin1(kc, nk); 
		if(c < -1)	/* need more keystrokes */ 
			return; 
		if(c != -1)	/* valid sequence */ 
			kbdputc(kbdq, c); 
		else	/* dump characters */ 
			for(i=0; i<nk; i++) 
				kbdputc(kbdq, kc[i]); 
		nk = 0; 
		collecting = 0; 
1994/0306    
		return; 
1993/0907    
	} 
1994/0306    
	else { 
1994/0428/sys/src/9/carrera/kbd.c:304,3101994/0503/sys/src/9/carrera/kbd.c:286,293
1994/0306    
			shift = 1; 
			return; 
		case Latin: 
			lstate = 1; 
1994/0503    
			collecting = 1; 
			nk = 0; 
1994/0306    
			return; 
		case Ctrl: 
			ctl = 1; 
1994/0428/sys/src/9/carrera/kbd.c:369,3741994/0503/sys/src/9/carrera/kbd.c:352,358
1993/0907    
kbdinit(void) 
{ 
	int i; 
1994/0503    
return 0; 
1994/0428    
 
1993/0907    
	/* 
	 *  empty the buffer 


source code copyright © 1990-2005 Lucent Technologies; see license
Plan 9 distribution
comments to russ cox (rsc@swtch.com)