From: Thomas Csovcsity <thc.fr13nd@gmail.com> --- programs/conhost/conhost.c | 40 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/programs/conhost/conhost.c b/programs/conhost/conhost.c index de0f239f204..ec84df0ba7e 100644 --- a/programs/conhost/conhost.c +++ b/programs/conhost/conhost.c @@ -2269,6 +2269,46 @@ static void process_csi_sequence_console( struct screen_buffer *screen_buffer, c set_output_info( screen_buffer, &info_params, sizeof(info_params) ); } break; + case 'H': + unsigned int x = 0, y = 0, value = 0, i; + TRACE("This is an CUP seq with %lld length and [%s] as payload! seq_p %p\n",len, debugstr_wn( seq, len ), seq); + + for (i = 0; i < len; i++) + { + if ( seq[i] != ';' && seq[i] != 'H' ) + value = 10 * value + seq[i] - '0'; + else if ( seq[i] == ';' ) + { + if ( value != 0 ) + { + y = value; + value = 0; + } + else + y = 1; + } + else if ( seq[i] == 'H') + { + if ( y == 0 && value == 0) + { + x = 1; + y = 1; + } else if ( y == 0 && value != 0 ) + { + y = value; + x = 1; + } else /* ( x != 0 && value != 0 ) */ + x = value; + } + else + { + ERR("CSI CUP parsing failed, this should not happen!\n"); + break; + } + } + screen_buffer->cursor_x = x-1; + screen_buffer->cursor_y = y-1; + break; default: FIXME( "unhandled sequence %s switch char [%s] len[%lld]\n", debugstr_wn( seq, len ), debugstr_wn( &seq[len], 1 ), len); break; -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9973