#include <u.h> | |
#include <libc.h> | |
#include <draw.h> | |
#include <thread.h> | |
#include <keyboard.h> | |
void | |
closekeyboard(Keyboardctl *kc) | |
{ | |
Rune r; | |
if(kc == nil) | |
return; | |
/* postnote(PNPROC, kc->pid, "kill"); */ | |
do; while(nbrecv(kc->c, &r) > 0); | |
chanfree(kc->c); | |
free(kc); | |
} | |
static | |
void | |
_ioproc(void *arg) | |
{ | |
Rune r; | |
Keyboardctl *kc; | |
kc = arg; | |
threadsetname("kbdproc"); | |
for(;;){ | |
if(_displayrdkbd(display, &r) < 0) | |
threadexits("read error"); | |
send(kc->c, &r); | |
} | |
} | |
Keyboardctl* | |
initkeyboard(char *file) | |
{ | |
Keyboardctl *kc; | |
kc = mallocz(sizeof(Keyboardctl), 1); | |
if(kc == nil) | |
return nil; | |
USED(file); | |
kc->c = chancreate(sizeof(Rune), 20); | |
chansetname(kc->c, "kbdc"); | |
proccreate(_ioproc, kc, 32*1024); | |
return kc; | |
} | |