Plan 9 from Bell Labs’s /usr/web/sources/extra/9hist/carrera/kbd.c

Copyright © 2021 Plan 9 Foundation.
Distributed under the MIT License.
Download the Plan 9 distribution.


## diffname carrera/kbd.c 1993/0907
## diff -e /dev/null /n/fornaxdump/1993/0907/sys/src/brazil/carrera/kbd.c
0a
#include	"u.h"
#include	"../port/lib.h"
#include	"mem.h"
#include	"dat.h"
#include	"fns.h"
#include	"io.h"
#include	"../port/error.h"

#include	"devtab.h"

enum
{
	/*
	 *  commands
	 */
	Krdcmd=		0x20,	/* read command byte */
	Kwrcmd=		0x60,	/* write command byte */
	Kselftest=	0xAA,	/* self test */
	Ktest=		0xAB,	/* keyboard test */
	Kdisable=	0xAD,	/* disable keyboard */
	Kenable=	0xAE,	/* enable keyboard */
	Krdin=		0xC0,	/* read input port */
	Krdout=		0xD0,	/* read output port */
	Kwrout=		0xD1,	/* write output port */
	Krdtest=	0xE0,	/* read test inputs */
	Kwrlights=	0xED,	/* set lights */
	Kreset=		0xF0,	/* soft reset */
	/*
	 *  magic characters
	 */
	Msetscan=	0xF0,	/* set scan type (0 == unix) */
	Menable=	0xF4,	/* enable the keyboard */
	Mdisable=	0xF5,	/* disable the keyboard */
	Mdefault=	0xF6,	/* set defaults */
	Mreset=		0xFF,	/* reset the keyboard */
	/*
	 *  responses from keyboard
	 */
	Rok=		0xAA,		/* self test OK */
	Recho=		0xEE,		/* ??? */
	Rack=		0xFA,		/* command acknowledged */
	Rfail=		0xFC,		/* self test failed */
	Rresend=	0xFE,		/* ??? */
	Rovfl=		0xFF,		/* input overflow */
	/*
	 *  command register bits
	 */
	Cintena=	1<<0,	/* enable output interrupt */
	Csystem=	1<<2,	/* set system */
	Cinhibit=	1<<3,	/* inhibit override */
	Cdisable=	1<<4,	/* disable keyboard */
	/*
	 *  output port bits
	 */
	Osoft=		1<<0,	/* soft reset bit (must be 1?) */
	Oparity=	1<<1,	/* force bad parity */
	Omemtype=	1<<2,	/* simm type (1 = 4Mb, 0 = 1Mb)	*/
	Obigendian=	1<<3,	/* big endian */
	Ointena=	1<<4,	/* enable interrupt */
	Oclear=		1<<5,	/* clear expansion slot interrupt */
	/*
	 *  status bits
	 */
	Sobf=		1<<0,	/* output buffer full */
	Sibf=		1<<1,	/* input buffer full */
	Ssys=		1<<2,	/* set by self-test */
	Slast=		1<<3,	/* last access was to data */
	Senabled=	1<<4,	/* keyboard is enabled */
	Stxtimeout=	1<<5,	/* transmit to kybd has timed out */
	Srxtimeout=	1<<6,	/* receive from kybd has timed out */
	Sparity=	1<<7,	/* parity on byte was even */
	/*
	 *  light bits
	 */
	L1=		1<<0,	/* light 1, network activity */
	L2=		1<<2,	/* light 2, caps lock */
	L3=		1<<1,	/* light 3, no label */
};

#define KBDCTL	(*(uchar*)(KeyboardIO+Keyctl))
#define KBDDAT	(*(uchar*)(KeyboardIO+Keydat))
#define OUTWAIT	while(KBDCTL & Sibf); kdbdly(1)
#define INWAIT	while(!(KBDCTL & Sobf)); kdbdly(1)
#define ACKWAIT INWAIT ; if(KBDDAT != Rack) print("bad response\n"); kdbdly(1)

enum
{
	Spec=	0x80,

	PF=	Spec|0x20,	/* num pad function key */
	View=	Spec|0x00,	/* view (shift window up) */
	F=	Spec|0x40,	/* function key */
	Shift=	Spec|0x60,
	Break=	Spec|0x61,
	Ctrl=	Spec|0x62,
	Latin=	Spec|0x63,
	Up=	Spec|0x70,	/* key has come up */
	No=	Spec|0x7F,	/* no mapping */

	Tmask=	Spec|0x60,
};

uchar keymap[] = {
[0]	No,	No,	No,	No,	No,	No,	No,	F|1,
	'\033',	No,	No,	No,	No,	'\t',	'`',	F|2,
[0x10]	No,	Ctrl,	Shift,	Shift,	Shift,	'q',	'1',	F|3,
	No,	Shift,	'z',	's',	'a',	'w',	'2',	F|4,
[0x20]	No,	'c',	'x',	'd',	'e',	'4',	'3',	F|5,
	No,	' ',	'v',	'f',	't',	'r',	'5',	F|6,
[0x30]	No,	'n',	'b',	'h',	'g',	'y',	'6',	F|7,
	No,	View,	'm',	'j',	'u',	'7',	'8',	F|8,
[0x40]	No,	',',	'k',	'i',	'o',	'0',	'9',	F|9,
	No,	'.',	'/',	'l',	';',	'p',	'-',	F|10,
[0x50]	No,	No,	'\'',	No,	'[',	'=',	F|11,	'\r',
	Latin,	Shift,	'\n',	']',	'\\',	No,	F|12,	Break,
[0x60]	View,	View,	Break,	Shift,	'\177',	No,	'\b',	No,
	No,	'1',	View,	'4',	'7',	',',	No,	No,
[0x70]	'0',	'.',	'2',	'5',	'6',	'8',	PF|1,	PF|2,
	No,	'\n',	'3',	No,	PF|4,	'9',	PF|3,	No,
[0x80]	No,	No,	No,	No,	'-',	No,	No,	No,
};

uchar skeymap[] = {
[0]	No,	No,	No,	No,	No,	No,	No,	F|1,
	'\033',	No,	No,	No,	No,	'\t',	'~',	F|2,
[0x10]	No,	Ctrl,	Shift,	Shift,	Shift,	'Q',	'!',	F|3,
	No,	Shift,	'Z',	'S',	'A',	'W',	'@',	F|4,
[0x20]	No,	'C',	'X',	'D',	'E',	'$',	'#',	F|5,
	No,	' ',	'V',	'F',	'T',	'R',	'%',	F|6,
[0x30]	No,	'N',	'B',	'H',	'G',	'Y',	'^',	F|7,
	No,	View,	'M',	'J',	'U',	'&',	'*',	F|8,
[0x40]	No,	'<',	'K',	'I',	'O',	')',	'(',	F|9,
	No,	'>',	'?',	'L',	':',	'P',	'_',	F|10,
[0x50]	No,	No,	'"',	No,	'{',	'+',	F|11,	'\r',
	Latin,	Shift,	'\n',	'}',	'|',	No,	F|12,	Break,
[0x60]	View,	View,	Break,	Shift,	'\177',	No,	'\b',	No,
	No,	'1',	View,	'4',	'7',	',',	No,	No,
[0x70]	'0',	'.',	'2',	'5',	'6',	'8',	PF|1,	PF|2,
	No,	'\n',	'3',	No,	PF|4,	'9',	PF|3,	No,
[0x80]	No,	No,	No,	No,	'-',	No,	No,	No,
};


struct Kbd
{
	Lock;
	int l;
} kbd;

void
kdbdly(int l)
{
	int i;

	l *= 21;
	for(i=0; i<l; i++)
		;
}

/*
 *  wait for a keyboard event (or some max time)
 */
int
kbdwait(void)
{
	int tries;

	for(tries = 0; tries < 2000; tries++){
		if(KBDCTL & Sobf){
			kdbdly(1);
			return 1;
		}
		kdbdly(1);
	}
	return 0;
}

/*
 *  wait for a keyboard acknowledge (or some max time)
 */
int
kbdackwait(void)
{
	if(kbdintr())
		return KBDDAT;
	return 0;
}

int
kbdintr(void)
{
	int c, i, nk;
	uchar ch, code;
	static uchar kc[5];
	static int shifted, ctrled, lstate;

	kbdwait();
	code = KBDDAT;

	/*
	 *  key has gone up
	 */
	if(code == Up) {
		kbdwait();
		ch = keymap[KBDDAT];
		if(ch == Ctrl)
			ctrled = 0;
		else if(ch == Shift)
			shifted = 0;
		return 0;
	}

	if(code > 0x87)
		return 1;

	/*
	 *  convert
	 */
	if(shifted)
		ch = skeymap[code];
	else
		ch = keymap[code];
iprint("code %d %d\n", code, ch);
	/*
 	 *  normal character
	 */
	if(!(ch & Spec)){
		if(ctrled)
			ch &= 0x1f;
		switch(lstate){
		case 1:
			kc[0] = ch;
			lstate = 2;
			if(ch == 'X')
				lstate = 3;
			break;
		case 2:
			kc[1] = ch;
			c = latin1(kc);
			nk = 2;
		putit:
			lstate = 0;
			if(c != -1)
				kbdputc(kbdq, c);
			else {
				for(i=0; i<nk; i++)
					kbdputc(kbdq, kc[i]);
			}
			break;
		case 3:
		case 4:
		case 5:
			kc[lstate-2] = ch;
			lstate++;
			break;
		case 6:
			kc[4] = ch;
			c = unicode(kc);
			nk = 5;
			goto putit;
		default:
			kbdputc(kbdq, ch);
			break;
		}
		return 0;
	}

	/*
	 *  filter out function keys
	 */
	if((Tmask&ch) == (Spec|F))
		return 0;

	/*
	 *  special character
	 */
	switch(ch){
	case Shift:
		shifted = 1;
		break;
	case Break:
		break;
	case Ctrl:
		ctrled = 1;
		break;
	case Latin:
		lstate = 1;
		break;
	default:
		kbdputc(kbdq, ch);
	}
	return 0;
}

void
lights(int l)
{
	int s;
	int tries;

	s = splhi();
	for(tries = 0; tries < 2000 && (KBDCTL & Sibf); tries++)
		;
	kdbdly(1);
	KBDDAT = Kwrlights;
	kbdackwait();
	for(tries = 0; tries < 2000 && (KBDCTL & Sibf); tries++)
		;
	kdbdly(1);
	KBDDAT = kbd.l = l;
	kbdackwait();
	splx(s);
}

static void
empty(void)
{
	int i;

	/*
	 *  empty the buffer
	 */
	kdbdly(20);
	while(KBDCTL & Sobf){
		i = KBDDAT;
		USED(i);
		kdbdly(1);
	}
}

int
kbdinit(void)
{
	int i;

	/*
	 *  empty the buffer
	 */
	while(KBDCTL & Sobf){
		i = KBDDAT;
		USED(i);
	}


	/*
	 *  disable the interface
	 */
	OUTWAIT;
	KBDCTL = Kwrcmd;
	OUTWAIT;
	KBDDAT = Csystem | Cinhibit | Cdisable | Cintena;

	/*
	 *  set unix scan on the keyboard
	 */
	OUTWAIT;
	KBDDAT = Mdisable;
	INWAIT;
	if(KBDDAT != Rack)
		return 0;
	OUTWAIT;
	KBDDAT = Msetscan;
	ACKWAIT;
	OUTWAIT;
	KBDDAT = 0;
	ACKWAIT;
	OUTWAIT;
	KBDDAT = Menable;

	/*
	 *  enable the interface
	 */
	OUTWAIT;
	KBDCTL = Kwrcmd;
	OUTWAIT;
	KBDDAT = Csystem | Cinhibit | Cintena;
	OUTWAIT;
	KBDCTL = Kenable;
	empty();

	return 1;
}
.
## diffname carrera/kbd.c 1993/0908
## diff -e /n/fornaxdump/1993/0907/sys/src/brazil/carrera/kbd.c /n/fornaxdump/1993/0908/sys/src/brazil/carrera/kbd.c
223d
213,215d
211a
	upcode = 0;
.
209a
		upcode = 0;
.
204,205c
		upcode = 1;
		return 0;
	}

	if(code > 0x87)
		return 1;

	if(upcode){
		ch = keymap[code];
.
195a
	static int upcode;
.
170d
155c
	l *= 21;	/* experimentally determined */
.
## diffname carrera/kbd.c 1993/1001
## diff -e /n/fornaxdump/1993/0908/sys/src/brazil/carrera/kbd.c /n/fornaxdump/1993/1001/sys/src/brazil/carrera/kbd.c
185a
}

void
mouseintr(void)
{
	uchar code;

	kbdwait();
	code = KBDDAT;
	print("mouse intr %d\n", code);
.
171d
169c
		if(KBDCTL & Sobf)
.
## diffname carrera/kbd.c 1993/1003
## diff -e /n/fornaxdump/1993/1001/sys/src/brazil/carrera/kbd.c /n/fornaxdump/1993/1003/sys/src/brazil/carrera/kbd.c
393a

	mousecmd(0xEA);
	mousecmd(0xF4);
.
392a
	OUTWAIT;
	KBDCTL = Kmseena;
.
390c
	KBDDAT = Csystem | Cinhibit | Cintena | Cmseint;
.
344a
/*
 *  send a command to the mouse
 */
static int
mousecmd(int cmd)
{
	int tries;
	unsigned int c;

	c = 0;
	tries = 0;
	do{
		if(tries++ > 2)
			break;
		OUTWAIT;
		KBDCTL = 0xD4;
		OUTWAIT;
		KBDDAT = cmd;
		OUTWAIT;
		kbdwait();
		c = KBDDAT;
	} while(c == 0xFE || c == 0);
	if(c != 0xFA){
		print("mouse returns %2.2ux to the %2.2ux command\n", c, cmd);
		return -1;
	}
	return 0;
}

.
193,194c
	c = KBDDAT;

	/* 
	 *  check byte 0 for consistency
	 */
	if(nb==0 && (c&0xc8)!=0x08)
		return;

	msg[nb] = c;
	if(++nb == 3){
		nb = 0;
		if(msg[0] & 0x10)
			msg[1] |= 0xFF00;
		if(msg[0] & 0x20)
			msg[2] |= 0xFF00;

		buttons = b[msg[0]&7];
		dx = msg[1];
		dy = -msg[2];
		mousetrack(buttons, dx, dy);
	}
.
190c
	uchar c;
	static int nb;
	int buttons, dx, dy;
	static short msg[3];
	static uchar b[] = {0, 1, 4, 5, 2, 3, 6, 7, 0, 1, 2, 5, 2, 3, 6, 7 };
.
48a
	Cmseint=	1<<1,	/* enable mouse interrupt */
.
21a
	Kmseena=	0xA8,	/* enable mouse */
.
## diffname carrera/kbd.c 1994/0201
## diff -e /n/fornaxdump/1993/1003/sys/src/brazil/carrera/kbd.c /n/fornaxdump/1994/0201/sys/src/brazil/carrera/kbd.c
451,452c
	mousecmd(0xEA);	/* streaming */
	mousecmd(0xE8);	/* set resolution */
	mousecmd(3);
	mousecmd(0xF4);	/* enabled */
.
## diffname carrera/kbd.c 1994/0306
## diff -e /n/fornaxdump/1994/0201/sys/src/brazil/carrera/kbd.c /n/fornaxdump/1994/0306/sys/src/brazil/carrera/kbd.c
446,449d
444c
	KBDDAT = ccc;
.
442c
	KBDCTL = 0x60;
.
438,440d
421,436c
	/* enable kbd xfers and interrupts */
	ccc &= ~Ckbddis;
	ccc |= Csf | Ckbdint | Cscs1 | Cmouseint;
.
417,419c
	KBDCTL = 0x20;
	if(kbdwait() == 0) {
		print("kbdinit: can't read ccc\n");
		ccc = 0;
	} else
		ccc = KBDDAT;
.
413,415c
	/* wait for a quiescent controller */
.
337,351c
	USED(l);
.
331c
	kbdputc(kbdq, c);
.
306,329c
	else {
		switch(c){
		case Caps:
			caps ^= 1;
			return;
		case Num:
			num ^= 1;
			return;
		case Shift:
			shift = 1;
			return;
		case Latin:
			lstate = 1;
			return;
		case Ctrl:
			ctl = 1;
			return;
		}
.
304c
		return;
.
301c
			kbdputc(kbdq, c);
.
296c
			kc[4] = c;
.
292c
			kc[lstate-2] = c;
.
284,287c
			else for(i=0; i<nk; i++)
				kbdputc(kbdq, kc[i]);
.
277c
			kc[1] = c;
.
273c
			if(c == 'X')
.
271c
			kc[0] = c;
.
266,268c
	if(!(c & Spec)){
		if(ctl)
			c &= 0x1f;
.
259,262c
	if(keyup){
		switch(c){
		case Shift:
			shift = 0;
			break;
		case Ctrl:
			ctl = 0;
			break;
		}
		return;
	}
.
257c
	 *  keyup only important for shifts
.
255a
	if(caps && c<='z' && c>='a')
		c += 'A' - 'a';

.
254c
	else if(esc2){
		esc2--;
		return;
	}
	else if(shift)
		c = kbtabshift[c];
	else
		c = kbtab[c];
.
245,252c
	if(esc1){
		c = kbtabesc1[c];
		esc1 = 0;
.
242,243c
	keyup = c&0x80;
	c &= 0x7f;
	if(c > sizeof kbtab){
		print("unknown key %ux\n", c|keyup);
		return;
	}
.
237,239c
	if(c == 0xe0){
		esc1 = 1;
		return;
	} else if(c == 0xe1){
		esc2 = 2;
		return;
.
235c
	 *  e0's is the first of a 2 character sequence
.
232c
	c = KBDDAT;
.
228,229c
	static int shift;
	int keyup;
.
226c
	static int esc1, esc2;
	static int caps;
	static int ctl;
	static int num;
	static int lstate;
.
222c
void
.
178,188d
150a
static uchar ccc;
.
145d
125,142c
uchar kbtabesc1[] =
{
[0x00]	No,	No,	No,	No,	No,	No,	No,	No,
[0x08]	No,	No,	No,	No,	No,	No,	No,	No,
[0x10]	No,	No,	No,	No,	No,	No,	No,	No,
[0x18]	No,	No,	No,	No,	'\n',	Ctrl,	No,	No,
[0x20]	No,	No,	No,	No,	No,	No,	No,	No,
[0x28]	No,	No,	Shift,	No,	No,	No,	No,	No,
[0x30]	No,	No,	No,	No,	No,	'/',	No,	Print,
[0x38]	Latin,	No,	No,	No,	No,	No,	No,	No,
[0x40]	No,	No,	No,	No,	No,	No,	Break,	Home,
[0x48]	Up,	Pgup,	No,	Left,	No,	Right,	No,	End,
[0x50]	Down,	Pgdown,	Ins,	Del,	No,	No,	No,	No,
[0x58]	No,	No,	No,	No,	No,	No,	No,	No,
.
105,122c
uchar kbtabshift[] =
{
[0x00]	No,	0x1b,	'!',	'@',	'#',	'$',	'%',	'^',
[0x08]	'&',	'*',	'(',	')',	'_',	'+',	'\b',	'\t',
[0x10]	'Q',	'W',	'E',	'R',	'T',	'Y',	'U',	'I',
[0x18]	'O',	'P',	'{',	'}',	'\n',	Ctrl,	'A',	'S',
[0x20]	'D',	'F',	'G',	'H',	'J',	'K',	'L',	':',
[0x28]	'"',	'~',	Shift,	'|',	'Z',	'X',	'C',	'V',
[0x30]	'B',	'N',	'M',	'<',	'>',	'?',	Shift,	'*',
[0x38]	Latin,	' ',	Ctrl,	KF|1,	KF|2,	KF|3,	KF|4,	KF|5,
[0x40]	KF|6,	KF|7,	KF|8,	KF|9,	KF|10,	Num,	KF|12,	'7',
[0x48]	'8',	'9',	'-',	'4',	'5',	'6',	'+',	'1',
[0x50]	'2',	'3',	'0',	'.',	No,	No,	No,	KF|11,
[0x58]	KF|12,	No,	No,	No,	No,	No,	No,	No,
.
90,102c
[0x00]	No,	0x1b,	'1',	'2',	'3',	'4',	'5',	'6',
[0x08]	'7',	'8',	'9',	'0',	'-',	'=',	'\b',	'\t',
[0x10]	'q',	'w',	'e',	'r',	't',	'y',	'u',	'i',
[0x18]	'o',	'p',	'[',	']',	'\n',	Ctrl,	'a',	's',
[0x20]	'd',	'f',	'g',	'h',	'j',	'k',	'l',	';',
[0x28]	'\'',	'`',	Shift,	'\\',	'z',	'x',	'c',	'v',
[0x30]	'b',	'n',	'm',	',',	'.',	'/',	Shift,	'*',
[0x38]	Latin,	' ',	Ctrl,	KF|1,	KF|2,	KF|3,	KF|4,	KF|5,
[0x40]	KF|6,	KF|7,	KF|8,	KF|9,	KF|10,	Num,	KF|12,	'7',
[0x48]	'8',	'9',	'-',	'4',	'5',	'6',	'+',	'1',
[0x50]	'2',	'3',	'0',	'.',	No,	No,	No,	KF|11,
[0x58]	KF|12,	No,	No,	No,	No,	No,	No,	No,
.
88c
uchar kbtab[] = 
.
74,79c

	Spec=		0x80,

	PF=		Spec|0x20,	/* num pad function key */
	View=		Spec|0x00,	/* view (shift window up) */
	KF=		Spec|0x40,	/* function key */
	Shift=		Spec|0x60,
	Break=		Spec|0x61,
	Ctrl=		Spec|0x62,
	Latin=		Spec|0x63,
	Caps=		Spec|0x64,
	Num=		Spec|0x65,
	Middle=		Spec|0x66,
	No=		0x00,		/* peter */

	Home=		KF|13,
	Up=		KF|14,
	Pgup=		KF|15,
	Print=		KF|16,
	Left=		View,
	Right=		View,
	End=		'\r',
	Down=		View,
	Pgdown=		View,
	Ins=		KF|20,
	Del=		0x7F,
.
47,63d
45a

.
14,37d
12a
	/* controller command byte */
	Cscs1=		(1<<6),		/* scan code set 1 */
	Cmousedis=	(1<<5),		/* mouse disable */
	Ckbddis=	(1<<4),		/* kbd disable */
	Csf=		(1<<2),		/* system flag */
	Cmouseint=	(1<<1),		/* mouse interrupt enable */
	Ckbdint=	(1<<0),		/* kbd interrupt enable */

.
## diffname carrera/kbd.c 1994/0415
## diff -e /n/fornaxdump/1994/0306/sys/src/brazil/carrera/kbd.c /n/fornaxdump/1994/0415/sys/src/brazil/carrera/kbd.c
372c
return;
.
## diffname carrera/kbd.c 1994/0423
## diff -e /n/fornaxdump/1994/0415/sys/src/brazil/carrera/kbd.c /n/fornaxdump/1994/0423/sys/src/brazil/carrera/kbd.c
372c

.
## diffname carrera/kbd.c 1994/0427
## diff -e /n/fornaxdump/1994/0423/sys/src/brazil/carrera/kbd.c /n/fornaxdump/1994/0427/sys/src/brazil/carrera/kbd.c
372c
return 0;
.
## diffname carrera/kbd.c 1994/0428
## diff -e /n/fornaxdump/1994/0427/sys/src/brazil/carrera/kbd.c /n/fornaxdump/1994/0428/sys/src/brazil/carrera/kbd.c
372c

.
## diffname carrera/kbd.c 1994/0503
## diff -e /n/fornaxdump/1994/0428/sys/src/brazil/carrera/kbd.c /n/fornaxdump/1994/0503/sys/src/brazil/carrera/kbd.c
371a
return 0;
.
307c
			collecting = 1;
			nk = 0;
.
292a
		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;
.
291c
			return;
.
260,289c
		if(!collecting){
.
198c
	static int collecting, nk;
.
193c
	int c, i;
.
## diffname carrera/kbd.c 1994/0504
## diff -e /n/fornaxdump/1994/0503/sys/src/brazil/carrera/kbd.c /n/fornaxdump/1994/0504/sys/src/brazil/carrera/kbd.c
355d
## diffname carrera/kbd.c 1994/0621
## diff -e /n/fornaxdump/1994/0504/sys/src/brazil/carrera/kbd.c /n/fornaxdump/1994/0621/sys/src/brazil/carrera/kbd.c
355a
	kbdq = qopen(4*1024, 0, 0, 0);

.
## diffname carrera/kbd.c 1994/0902
## diff -e /n/fornaxdump/1994/0621/sys/src/brazil/carrera/kbd.c /n/fornaxdump/1994/0902/sys/src/brazil/carrera/kbd.c
356a
	qnoblock(kbdq, 1);
.
## diffname carrera/kbd.c 1994/0910
## diff -e /n/fornaxdump/1994/0902/sys/src/brazil/carrera/kbd.c /n/fornaxdump/1994/0910/sys/src/brazil/carrera/kbd.c
393a

void
mousectl(char *cmd)
{
	int s;

	if(strncmp(cmd, "reset", 5) == 0){
		s = splhi();
		mousecmd(0xF6);
		mousecmd(0xEA);	/* streaming */
		mousecmd(0xE8);	/* set resolution */
		mousecmd(3);
		mousecmd(0xF4);	/* enabled */
		splx(s);
	}
}
.
## diffname carrera/kbd.c 1995/0207
## diff -e /n/fornaxdump/1994/0910/sys/src/brazil/carrera/kbd.c /n/fornaxdump/1995/0207/sys/src/brazil/carrera/kbd.c
408a
	else
		error(Ebadctl);
.
## diffname carrera/kbd.c 1995/1101
## diff -e /n/fornaxdump/1995/0207/sys/src/brazil/carrera/kbd.c /n/fornaxdump/1995/1101/sys/src/brazil/carrera/kbd.c
345c
		/*print("mouse returns %2.2ux to the %2.2ux command\n", c, cmd);/**/
.
## diffname carrera/kbd.c 1995/1216
## diff -e /n/fornaxdump/1995/1101/sys/src/brazil/carrera/kbd.c /n/fornaxdump/1995/1216/sys/src/brazil/carrera/kbd.c
408a
	else if(strcmp(cmd, "accelerated") == 0){
		s = splhi();
		mousecmd(0xE7);
		splx(s);
	}
.
## diffname carrera/kbd.c 1996/0223
## diff -e /n/fornaxdump/1995/1216/sys/src/brazil/carrera/kbd.c /n/fornaxdump/1996/0223/sys/src/brazil/carrera/kbd.c
9d
## diffname carrera/kbd.c 1997/0327
## diff -e /n/fornaxdump/1996/0223/sys/src/brazil/carrera/kbd.c /n/emeliedump/1997/0327/sys/src/brazil/carrera/kbd.c
8a
#include	<libg.h>
#include	"screen.h"
.
## diffname carrera/kbd.c 1997/1101
## diff -e /n/emeliedump/1997/0327/sys/src/brazil/carrera/kbd.c /n/emeliedump/1997/1101/sys/src/brazil/carrera/kbd.c
9c
#define	Image	IMAGE
#include	<draw.h>
.
## diffname carrera/kbd.c 1997/1105
## diff -e /n/emeliedump/1997/1101/sys/src/brazil/carrera/kbd.c /n/emeliedump/1997/1105/sys/src/brazil/carrera/kbd.c
358a
	if(kbdq == nil)
		panic("kbdinit");
.
## diffname carrera/kbd.c 1998/0417
## diff -e /n/emeliedump/1997/1105/sys/src/brazil/carrera/kbd.c /n/emeliedump/1998/0417/sys/src/brazil/carrera/kbd.c
413c
	else if(strcmp(field[0], "accelerated") == 0){
.
404c
	if(strncmp(field[0], "reset", 5) == 0){
.
400c
mousectl(char* field[], int)
.
## diffname carrera/kbd.c 1999/0119
## diff -e /n/emeliedump/1998/0417/sys/src/brazil/carrera/kbd.c /n/emeliedump/1999/0119/sys/src/brazil/carrera/kbd.c
10a
#include	<cursor.h>
.
## diffname carrera/kbd.c 1999/1005
## diff -e /n/emeliedump/1999/0119/sys/src/brazil/carrera/kbd.c /n/emeliedump/1999/1005/sys/src/brazil/carrera/kbd.c
202c
	static Rune kc[5];
.
111c
Rune kbtabesc1[] =
.
95c
Rune kbtabshift[] =
.
79c
Rune kbtab[] = 
.
50c
	KF=		0xF000,	/* function key (begin Unicode private space) */
.
## diffname carrera/kbd.c 1999/1104
## diff -e /n/emeliedump/1999/1005/sys/src/brazil/carrera/kbd.c /n/emeliedump/1999/1104/sys/src/9/carrera/kbd.c
68c
	Pgdown=		KF|19,
.
64,65c
	Left=		KF|17,
	Right=		KF|18,
.
## diffname carrera/kbd.c 2001/0527 # deleted
## diff -e /n/emeliedump/1999/1104/sys/src/9/carrera/kbd.c /n/emeliedump/2001/0527/sys/src/9/carrera/kbd.c
1,421d

Bell Labs OSI certified Powered by Plan 9

(Return to Plan 9 Home Page)

Copyright © 2021 Plan 9 Foundation. All Rights Reserved.
Comments to webmaster@9p.io.