52 lines
737 B
C
52 lines
737 B
C
#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;
|
|
}
|
|
|