Charles.Forsyth20060303a828770d19 years agoHistory
83 lines · 1.3 KB · Brainfuck
RawDownload
implement Ir; include "sys.m";sys: Sys;FD: import sys; include "ir.m"; rawon: ref FD; init(keys, pid: chan of int): int{	dfd: ref FD; 	sys = load Sys Sys->PATH; 	dfd = sys->open("/dev/keyboard", sys->OREAD);	if(dfd == nil)		return -1; 	spawn reader(keys, pid, dfd);	return 0;} reader(keys, pid: chan of int, dfd: ref FD){	n: int; 	nb := 0;	b:= array[1] of byte;	buf := array[10] of byte;	pid <-= sys->pctl(0,nil);	for(;;) {		n = sys->read(dfd, b, 1);		if(n != 1)			break;		if(nb>= len buf){			sys->print("irsim: confused by input\n");			break;		} 		buf[nb++] = b[0];		nutf := sys->utfbytes(buf, nb);		if(nutf > 0){			s := string buf[0:nutf];			keys <-= s[0];			nb = 0;		}	}	keys <-= Ir->EOF;} translate(key: int): int{	n := Ir->Error; 	case key {	'0' =>	n = Ir->Zero;	'1' =>	n = Ir->One;	'2' =>	n = Ir->Two;	'3' =>	n = Ir->Three;	'4' =>	n = Ir->Four;	'5' =>	n = Ir->Five;	'6' =>	n = Ir->Six;	'7' =>	n = Ir->Seven;	'8' =>	n = Ir->Eight;	'9' =>	n = Ir->Nine;	'r' =>	n = Ir->ChanUP;	'c' =>	n = Ir->ChanDN;	't' =>	n = Ir->VolUP;	'v' =>	n = Ir->VolDN;	'k' =>	n = Ir->FF;	'j' =>	n = Ir->Rew;	'i' =>	n = Ir->Up;	'm' =>	n = Ir->Dn;	'x' =>	n = Ir->Rcl;	'\n' =>	n = Ir->Select;	' ' =>	n = Ir->Enter;	16r7f =>	n = Ir->Power;	} 	return n;}