Blob
1 #include <u.h>2 #include <libc.h>3 #include <draw.h>4 #include <thread.h>5 #include <keyboard.h>7 void8 closekeyboard(Keyboardctl *kc)9 {10 Rune r;12 if(kc == nil)13 return;15 /* postnote(PNPROC, kc->pid, "kill"); */17 do; while(nbrecv(kc->c, &r) > 0);18 chanfree(kc->c);19 free(kc);20 }22 static23 void24 _ioproc(void *arg)25 {26 Rune r;27 Keyboardctl *kc;29 kc = arg;30 threadsetname("kbdproc");31 for(;;){32 if(_displayrdkbd(display, &r) < 0)33 threadexits("read error");34 send(kc->c, &r);35 }36 }38 Keyboardctl*39 initkeyboard(char *file)40 {41 Keyboardctl *kc;43 kc = mallocz(sizeof(Keyboardctl), 1);44 if(kc == nil)45 return nil;46 USED(file);47 kc->c = chancreate(sizeof(Rune), 20);48 chansetname(kc->c, "kbdc");49 proccreate(_ioproc, kc, 32*1024);50 return kc;51 }