+ if (xterm_mouse) {
+ int encstate = 0, r, c;
+ char abuf[16];
+ static int is_down = 0;
+
+ switch(b) {
+ case MBT_LEFT:
+ encstate = 0x20; /* left button down */
+ break;
+ case MBT_MIDDLE:
+ encstate = 0x21;
+ break;
+ case MBT_RIGHT:
+ encstate = 0x22;
+ break;
+ case MBT_WHEEL_UP:
+ encstate = 0x60;
+ break;
+ case MBT_WHEEL_DOWN:
+ encstate = 0x61;
+ break;
+ }
+ switch(a) {
+ case MA_DRAG:
+ if (xterm_mouse == 1)
+ return;
+ encstate += 0x20;
+ break;
+ case MA_RELEASE:
+ encstate = 0x23;
+ is_down = 0;
+ break;
+ case MA_CLICK:
+ if (is_down == b)
+ return;
+ is_down = b;
+ break;
+ }
+ if (shift)
+ encstate += 0x04;
+ if (ctrl)
+ encstate += 0x10;
+ r = y + 33;
+ c = x + 33;
+
+ sprintf(abuf, "\033[M%c%c%c", encstate, c, r);
+ ldisc_send(abuf, 6);
+ return;
+ }
+
+ b = translate_button(b);
+
+ if (b == MBT_SELECT && a == MA_CLICK) {