patch 9.0.0772: the libvterm code is outdated

Problem:    The libvterm code is outdated.
Solution:   Include libvterm changes from revision 790 to 801.
diff --git a/src/libvterm/t/26state_query.test b/src/libvterm/t/26state_query.test
index c543b92..e4513de 100644
--- a/src/libvterm/t/26state_query.test
+++ b/src/libvterm/t/26state_query.test
@@ -6,6 +6,11 @@
 PUSH "\e[c"
   output "\e[?1;2c"
 
+!XTVERSION
+RESET
+PUSH "\e[>q"
+  output "\eP>|libvterm(0.2)\e\\"
+
 !DSR
 RESET
 PUSH "\e[5n"
@@ -57,6 +62,6 @@
   output "\x{9b}0n"
 PUSH "\e F"
 
-!Truncation on attempted buffer overflow
-PUSH "\e[6n" x 30
-  output "\e[10;10R" x 25
+#!Truncation on attempted buffer overflow
+#PUSH "\e[6n" x 30
+#  output "\e[10;10R" x 25
diff --git a/src/libvterm/t/60screen_ascii.test b/src/libvterm/t/60screen_ascii.test
index e679b98..57729c5 100644
--- a/src/libvterm/t/60screen_ascii.test
+++ b/src/libvterm/t/60screen_ascii.test
@@ -18,11 +18,11 @@
   ?screen_eol 0,3 = 1
 PUSH "\e[H"
   movecursor 0,0
-  ?screen_chars 0,0,1,80 = "ABC"
+  ?screen_row 0 = "ABC"
   ?screen_text 0,0,1,80 = 0x41,0x42,0x43
 PUSH "E"
   movecursor 0,1
-  ?screen_chars 0,0,1,80 = "EBC"
+  ?screen_row 0 = "EBC"
   ?screen_text 0,0,1,80 = 0x45,0x42,0x43
 
 WANTSCREEN -c
@@ -30,14 +30,14 @@
 !Erase
 RESET
 PUSH "ABCDE\e[H\e[K"
-  ?screen_chars 0,0,1,80 = 
+  ?screen_row 0 = ""
   ?screen_text 0,0,1,80 = 
 
 !Copycell
 RESET
 PUSH "ABC\e[H\e[@"
 PUSH "1"
-  ?screen_chars 0,0,1,80 = "1ABC"
+  ?screen_row 0 = "1ABC"
 
 RESET
 PUSH "ABC\e[H\e[P"
@@ -48,7 +48,7 @@
 !Space padding
 RESET
 PUSH "Hello\e[CWorld"
-  ?screen_chars 0,0,1,80 = "Hello World"
+  ?screen_row 0 = "Hello World"
   ?screen_text 0,0,1,80 = 0x48,0x65,0x6c,0x6c,0x6f,0x20,0x57,0x6f,0x72,0x6c,0x64
 
 !Linefeed padding
@@ -60,10 +60,10 @@
 !Altscreen
 RESET
 PUSH "P"
-  ?screen_chars 0,0,1,80 = "P"
+  ?screen_row 0 = "P"
 PUSH "\e[?1049h"
-  ?screen_chars 0,0,1,80 = 
+  ?screen_row 0 = ""
 PUSH "\e[2K\e[HA"
-  ?screen_chars 0,0,1,80 = "A"
+  ?screen_row 0 = "A"
 PUSH "\e[?1049l"
-  ?screen_chars 0,0,1,80 = "P"
+  ?screen_row 0 = "P"
diff --git a/src/libvterm/t/61screen_unicode.test b/src/libvterm/t/61screen_unicode.test
index 6f5602d..8bde2bd 100644
--- a/src/libvterm/t/61screen_unicode.test
+++ b/src/libvterm/t/61screen_unicode.test
@@ -7,7 +7,7 @@
 # U+00E9 = 0xC3 0xA9  name: LATIN SMALL LETTER E WITH ACUTE
 RESET
 PUSH "\xC3\x81\xC3\xA9"
-  ?screen_chars 0,0,1,80 = 0xc1,0xe9
+  ?screen_row 0 = 0xc1,0xe9
   ?screen_text 0,0,1,80 = 0xc3,0x81,0xc3,0xa9
   ?screen_cell 0,0 = {0xc1} width=1 attrs={} fg=rgb(240,240,240) bg=rgb(0,0,0)
 
@@ -16,7 +16,7 @@
 RESET
 PUSH "0123\e[H"
 PUSH "\xEF\xBC\x90"
-  ?screen_chars 0,0,1,80 = 0xff10,0x32,0x33
+  ?screen_row 0 = 0xff10,0x32,0x33
   ?screen_text 0,0,1,80 = 0xef,0xbc,0x90,0x32,0x33
   ?screen_cell 0,0 = {0xff10} width=2 attrs={} fg=rgb(240,240,240) bg=rgb(0,0,0)
 
@@ -25,7 +25,7 @@
 RESET
 PUSH "0123\e[H"
 PUSH "e\xCC\x81"
-  ?screen_chars 0,0,1,80 = 0x65,0x301,0x31,0x32,0x33
+  ?screen_row 0 = 0x65,0x301,0x31,0x32,0x33
   ?screen_text 0,0,1,80 = 0x65,0xcc,0x81,0x31,0x32,0x33
   ?screen_cell 0,0 = {0x65,0x301} width=1 attrs={} fg=rgb(240,240,240) bg=rgb(0,0,0)
 
diff --git a/src/libvterm/t/62screen_damage.test b/src/libvterm/t/62screen_damage.test
index 32cac2d..3b1b238 100644
--- a/src/libvterm/t/62screen_damage.test
+++ b/src/libvterm/t/62screen_damage.test
@@ -152,4 +152,4 @@
 DAMAGEFLUSH
   moverect 1..25,0..80 -> 0..24,0..80
   damage 24..25,0..80
-  ?screen_chars 23,0,24,5 = "ABE"
+  ?screen_row 23 = "ABE"
diff --git a/src/libvterm/t/63screen_resize.test b/src/libvterm/t/63screen_resize.test
index 87b88d6..6835222 100644
--- a/src/libvterm/t/63screen_resize.test
+++ b/src/libvterm/t/63screen_resize.test
@@ -28,20 +28,20 @@
 RESET
 RESIZE 25,80
 PUSH "Top\e[10HLine 10"
-  ?screen_chars 0,0,1,80 = "Top"
-  ?screen_chars 9,0,10,80 = "Line 10"
+  ?screen_row 0 = "Top"
+  ?screen_row 9 = "Line 10"
   ?cursor = 9,7
 RESIZE 20,80
-  ?screen_chars 0,0,1,80 = "Top"
-  ?screen_chars 9,0,10,80 = "Line 10"
+  ?screen_row 0 = "Top"
+  ?screen_row 9 = "Line 10"
   ?cursor = 9,7
 
 !Resize shorter with content must scroll
 RESET
 RESIZE 25,80
 PUSH "Top\e[25HLine 25\e[15H"
-  ?screen_chars 0,0,1,80 = "Top"
-  ?screen_chars 24,0,25,80 = "Line 25"
+  ?screen_row 0 = "Top"
+  ?screen_row 24 = "Line 25"
   ?cursor = 14,0
 WANTSCREEN b
 RESIZE 20,80
@@ -50,8 +50,8 @@
   sb_pushline 80 =
   sb_pushline 80 =
   sb_pushline 80 =
-  ?screen_chars 0,0,1,80 = 
-  ?screen_chars 19,0,20,80 = "Line 25"
+  ?screen_row 0  = ""
+  ?screen_row 19 = "Line 25"
   ?cursor = 9,0
 
 !Resize shorter does not lose line with cursor
@@ -62,11 +62,11 @@
 WANTSCREEN b
 PUSH "\e[24HLine 24\r\nLine 25\r\n"
   sb_pushline 80 =
-  ?screen_chars 23,0,24,10 = "Line 25"
+  ?screen_row 23 = "Line 25"
   ?cursor = 24,0
 RESIZE 24,80
   sb_pushline 80 =
-  ?screen_chars 22,0,23,10 = "Line 25"
+  ?screen_row 22 = "Line 25"
   ?cursor = 23,0
 
 !Resize shorter does not send the cursor to a negative row
@@ -90,8 +90,8 @@
 WANTSCREEN -b
 RESIZE 25,80
 PUSH "Line 1\e[25HBottom\e[15H"
-  ?screen_chars 0,0,1,80 = "Line 1"
-  ?screen_chars 24,0,25,80 = "Bottom"
+  ?screen_row 0  = "Line 1"
+  ?screen_row 24 = "Bottom"
   ?cursor = 14,0
 WANTSCREEN b
 RESIZE 30,80
@@ -100,9 +100,9 @@
   sb_popline 80
   sb_popline 80
   sb_popline 80
-  ?screen_chars 0,0,1,80 = "ABCDE"
-  ?screen_chars 5,0,6,80 = "Line 1"
-  ?screen_chars 29,0,30,80 = "Bottom"
+  ?screen_row 0  = "ABCDE"
+  ?screen_row 5  = "Line 1"
+  ?screen_row 29 = "Bottom"
   ?cursor = 19,0
 WANTSCREEN -b
 
@@ -112,6 +112,6 @@
 RESIZE 25,80
 PUSH "Main screen\e[?1049h\e[HAlt screen"
 RESIZE 30,80
-  ?screen_chars 0,0,1,3 = "Alt"
+  ?screen_row 0 = "Alt screen"
 PUSH "\e[?1049l"
-  ?screen_chars 0,0,1,3 = "Mai"
+  ?screen_row 0 = "Main screen"
diff --git a/src/libvterm/t/65screen_protect.test b/src/libvterm/t/65screen_protect.test
index 718f853..ec412a5 100644
--- a/src/libvterm/t/65screen_protect.test
+++ b/src/libvterm/t/65screen_protect.test
@@ -4,13 +4,13 @@
 !Selective erase
 RESET
 PUSH "A\e[1\"qB\e[\"qC"
-  ?screen_chars 0,0,1,3 = 0x41,0x42,0x43
+  ?screen_row 0 = "ABC"
 PUSH "\e[G\e[?J"
-  ?screen_chars 0,0,1,3 = 0x20,0x42
+  ?screen_row 0 = " B"
 
 !Non-selective erase
 RESET
 PUSH "A\e[1\"qB\e[\"qC"
-  ?screen_chars 0,0,1,3 = 0x41,0x42,0x43
+  ?screen_row 0 = "ABC"
 PUSH "\e[G\e[J"
-  ?screen_chars 0,0,1,3 = 
+  ?screen_row 0 = ""
diff --git a/src/libvterm/t/harness.c b/src/libvterm/t/harness.c
index 07babb6..4e24198 100644
--- a/src/libvterm/t/harness.c
+++ b/src/libvterm/t/harness.c
@@ -1001,7 +1001,14 @@
         size_t len;
         while(linep[0] == ' ')
           linep++;
-        if(sscanf(linep, "%d,%d,%d,%d", &rect.start_row, &rect.start_col, &rect.end_row, &rect.end_col) < 4) {
+        if(sscanf(linep, "%d,%d,%d,%d", &rect.start_row, &rect.start_col, &rect.end_row, &rect.end_col) == 4)
+          ; // fine
+        else if(sscanf(linep, "%d", &rect.start_row) == 1) {
+          rect.end_row = rect.start_row + 1;
+          rect.start_col = 0;
+          vterm_get_size(vt, NULL, &rect.end_col);
+        }
+        else {
           printf("! screen_chars unrecognised input\n");
           goto abort_line;
         }
diff --git a/src/libvterm/t/run-test.pl b/src/libvterm/t/run-test.pl
index 2e359cc..7d5cc7b 100644
--- a/src/libvterm/t/run-test.pl
+++ b/src/libvterm/t/run-test.pl
@@ -139,17 +139,23 @@
    # ?screen_row assertion is emulated here
    elsif( $line =~ s/^\?screen_row\s+(\d+)\s*=\s*// ) {
       my $row = $1;
-      my $row1 = $row + 1;
-      my $want = eval($line);
+      my $want;
+
+      if( $line =~ m/^"/ ) {
+         $want = eval($line);
+      }
+      else {
+         # Turn 0xDD,0xDD,... directly into bytes
+         $want = pack "C*", map { hex } split m/,/, $line;
+      }
 
       do_onetest if defined $command;
 
-      # TODO: may not be 80
-      $hin->print( "\?screen_chars $row,0,$row1,80\n" );
+      $hin->print( "\?screen_chars $row\n" );
       my $response = <$hout>;
       chomp $response;
 
-      $response = pack "C*", map hex, split m/,/, $response;
+      $response = pack "C*", map { hex } split m/,/, $response;
       if( $response ne $want ) {
          print "# line $linenum: Assert ?screen_row $row failed:\n" .
                "# Expected: $want\n" .