However, when testing with Netrunner2, an upper-left left-button click sends this:
27 1b
91 5b '['
77 4d 'M'
48 30 '0'
41 29 ')'
41 29 ')'
What mouse protocol is this and do you have a reference document?
Hey Rob,
I'd be happy to (try to) help!
The latest NetRunner is beta 19 which uses either XTERM(?) or maybe VT200(?) mouse support. I used whatever the default was in PUTTY at the time so that it'd be compatible with Mystic "out of the box".
I used to have a bookmark that had a reference but I can't seem to find it at the moment. I read through my code and I did have some source code notes
that I can pass along, and a chunk of code from PUTTY that can be used as a reference to its various mouse modes.
(Some observations that I just made by looking at my code:)
(It looks like the X/Y coordinates are just the ascii character corresponding to the X/Y coordinate with with +32 added to it to avoid conflict with low ascii control characters. So coordinates 1, 1 would be represented as Ascii#33;Ascii#33. This means its limited to a terminal size of 223x223 though which is something I overlooked at the time. It also looks like Mystic sends esc[?1000h to the Unix terminal when running in Unix to enable mouse reporting, so that seems like a clue we can Google to find out officially what it is. NetRunner also translates a wheel spin to either the up or down arrow ANSI escape sequence for max usefulness with non-mouse-aware BBSes)
Notes:
(* PUTTY
ESC[Ma;b;c
// low two bits of "a" encode button: 0=MB1 pressed, 1=2 pressed, 2=3
// pressed, 3=release
// next 3 bits encode modifiers (4=shift,8=meta,16=control)
// b,c are x and y coordinates of cursor
int encstate = 0, r, c, wheel;
char abuf[32];
int len = 0;
if (term->ldisc) {
switch (braw) {
case MBT_LEFT:
encstate = 0x00; /* left button down */
wheel = FALSE;
break;
case MBT_MIDDLE:
encstate = 0x01;
wheel = FALSE;
break;
case MBT_RIGHT:
encstate = 0x02;
wheel = FALSE;
break;
case MBT_WHEEL_UP:
encstate = 0x40;
wheel = TRUE;
break;
case MBT_WHEEL_DOWN:
encstate = 0x41;
wheel = TRUE;
break;
default:
return;
}
if (wheel) {
if (a != MA_CLICK)
return;
} else switch (a) {
case MA_DRAG:
if (term->xterm_mouse == 1)
return;
encstate += 0x20;
break;
case MA_RELEASE:
if (!term->xterm_extended_mouse)
encstate = 0x03;
term->mouse_is_down = 0;
break;
case MA_CLICK:
if (term->mouse_is_down == braw)
return;
term->mouse_is_down = braw;
break;
default:
return;
}
if (shift)
encstate += 0x04;
if (ctrl)
encstate += 0x10;
r = y + 1;
c = x + 1;
if (term->xterm_extended_mouse) {
len = sprintf(abuf, "\033[<%d;%d;%d%c", encstate, c, r, a == MA_RELEASE ? 'm' : 'M');
} else if (term->urxvt_extended_mouse) {
len = sprintf(abuf, "\033[%d;%d;%dM", encstate + 32, c, r);
} else if (c <= 223 && r <= 223) {
len = sprintf(abuf, "\033[M%c%c%c", encstate + 32, c + 32, r + 32);
}
*)
--- Mystic BBS v1.12 A46 2020/05/17 (Windows/64)
* Origin: Sector 7 | Mystic WHQ (1:129/215)