27 Keyboardctl *keyboardctl;
33 threadsetname("main");
34 mousectl = initmouse(nil, display->image);
36 fprint(2, "samterm: mouse init failed: %r\n");
37 threadexitsall("mouse");
40 keyboardctl = initkeyboard(nil);
41 if(keyboardctl == nil){
42 fprint(2, "samterm: keyboard init failed: %r\n");
43 threadexitsall("kbd");
53 if(readmouse(mousectl) < 0)
66 block = (1<<RKeyboard)|(1<<RPlumb);
73 return mousep->buttons&(1<<(but-1));
79 plumbbase = malloc(plumbbuf[i].n);
82 memmove(plumbbase, plumbbuf[i].data, plumbbuf[i].n);
84 plumbstop = plumbbase + plumbbuf[i].n;
98 alts[RPlumb].c = plumbc;
100 alts[RPlumb].op = CHANRCV;
101 if((block & (1<<RPlumb)) || plumbc == nil)
102 alts[RPlumb].op = CHANNOP;
104 alts[RHost].c = hostc;
106 alts[RHost].op = CHANRCV;
107 if(block & (1<<RHost))
108 alts[RHost].op = CHANNOP;
110 alts[RKeyboard].c = keyboardctl->c;
111 alts[RKeyboard].v = &r;
112 alts[RKeyboard].op = CHANRCV;
113 if(block & (1<<RKeyboard))
114 alts[RKeyboard].op = CHANNOP;
116 alts[RMouse].c = mousectl->c;
117 alts[RMouse].v = &mousectl->Mouse;
118 alts[RMouse].op = CHANRCV;
119 if(block & (1<<RMouse))
120 alts[RMouse].op = CHANNOP;
122 alts[RResize].c = mousectl->resizec;
123 alts[RResize].v = nil;
124 alts[RResize].op = CHANRCV;
125 if(block & (1<<RResize))
126 alts[RResize].op = CHANNOP;
128 alts[NRes].op = CHANEND;
132 if(display->bufp > display->buf)
133 flushimage(display, 1);
137 hostp = hostbuf[i].data;
138 hoststop = hostbuf[i].data + hostbuf[i].n;
151 /* do the resize in line if we've finished initializing and we're not in a blocking state */
152 if(hasunlocked && block==0 && RESIZED())
165 if(!(got & (1<<RHost)))
168 if(hostp == hoststop)
186 while((c = rcvchar()) == -1){
200 if(got & ((1<<RPlumb) & ~block)){
201 plumbp += chartorune(&r, (char*)plumbp);
202 if(plumbp >= plumbstop){
221 if(nbrecv(keyboardctl->c, &r) > 0){
239 if(recv(keyboardctl->c, &r) < 0){
240 fprint(2, "samterm: keybard recv error: %r\n");
254 if(got & (1<<RKeyboard)){
257 got &= ~(1<<RKeyboard);
260 while(plumbc!=nil && nbrecv(plumbc, &i)>0){
281 if(getwindow(display, Refnone) < 0)
282 panic("can't reattach to window");