ulong eread(ulong keys, Event *e) { Ebuf *eb; int i, id; if(keys == 0) return 0; for(;;){ for(i=0; i<nslave; i++) if((keys & (1<<i)) && eslave[i].head){ id = 1<<i; if(i == Smouse) e->mouse = emouse(); else if(i == Skeyboard) e->kbdc = ekbd(); else if(i == Stimer) eslave[i].head = 0; else{ eb = ebread(&eslave[i]); e->n = eb->n; if(eslave[i].fn) id = (*eslave[i].fn)(id, e, eb->buf, eb->n); else memmove(e->data, eb->buf, eb->n); free(eb); } return id; } extract(); } }
Mouse emouse(void) { Mouse m; Ebuf *eb; static but[2]; int b; if(Smouse < 0) drawerror(display, "events: mouse not initialized"); for(;;){ eb = ebread(&eslave[Smouse]); if(!ecanmouse()) break; free(eb); /* drop queued mouse events */ } m.xy.x = atoi((char*)eb->buf+1+0*12); m.xy.y = atoi((char*)eb->buf+1+1*12); b = atoi((char*)eb->buf+1+2*12); m.buttons = b; m.msec = atoi((char*)eb->buf+1+3*12); if (logfid) fprint(logfid, "b: %d xy: %P\n", m.buttons, m.xy); free(eb); return m; }
int ekbd(void) { Ebuf *eb; Rune r; if(Skeyboard < 0) drawerror(display, "events: keyboard not initialzed"); eb = ebread(&eslave[Skeyboard]); chartorune(&r, (char*)eb->buf); free(eb); return r; }
int ekbd(void) { Ebuf *eb; int c; if(Skeyboard < 0) drawerror(display, "events: keyboard not initialzed"); eb = ebread(&eslave[Skeyboard]); c = eb->u.rune; free(eb); return c; }
Mouse emouse(void) { Mouse m; Ebuf *eb; if(Smouse < 0) drawerror(display, "events: mouse not initialized"); eb = ebread(&eslave[Smouse]); m = eb->u.mouse; free(eb); return m; }