]> git.sesse.net Git - remoteglot/blobdiff - remoteglot.pl
Say what move we're analyzing from.
[remoteglot] / remoteglot.pl
index 1b2e49a8d89057d6cbe0fc3edaadf21ee8582747..b36487d2987cad84a4654741e8eb594c95fe5ec9 100755 (executable)
@@ -375,41 +375,18 @@ sub style12_to_fen {
 
        $pos{'fen'} = $fen;
        $pos{'move_num'} = $x[26];
+       $pos{'last_move'} = $x[29];
 
        return \%pos;
 }
 
-sub prefix_pv {
-       my ($move_num, $toplay) = @_;
-
-       if ($toplay eq 'B') {
-               return "$move_num. ..";
-       } else {
-               return "";
-       }
-}
-
 sub prettyprint_pv {
-       my ($board, $move_num, $toplay, @pvs) = @_;
-
-       if (!defined($board) || !defined($move_num) || !defined($toplay)) {
-               die "Missing data";
-       }
+       my ($board, @pvs) = @_;
+       
        if (scalar @pvs == 0 || !defined($pvs[0])) {
                return ();
        }
-
-       my ($prefix, $next_move, $next_toplay);
-       if ($toplay eq 'W') {
-               $prefix = "$move_num.";
-               $next_move = $move_num;
-               $next_toplay = 'B';
-       } else {
-               $prefix = "";
-               $next_move = $move_num + 1;
-               $next_toplay = 'W';
-       }
-
+       
        my @nb = @$board;
 
        my $pv = shift @pvs;
@@ -424,12 +401,6 @@ sub prettyprint_pv {
        if ($piece eq '-') {
                die "Invalid move";
        }
-       if ($piece eq uc($piece) && $toplay eq 'B') {
-               die "Black tried to move a white piece";
-       }
-       if ($piece eq lc($piece) && $toplay eq 'W') {
-               die "White tried to move a black piece";
-       }
 
        # white short castling
        if ($pv eq 'e1g1' && $piece eq 'K') {
@@ -441,7 +412,7 @@ sub prettyprint_pv {
                substr($nb[7], 7, 1, '-');
                substr($nb[7], 5, 1, 'R');
                                
-               return ($prefix . '0-0', prettyprint_pv(\@nb, $next_move, $next_toplay, @pvs));
+               return ('0-0', prettyprint_pv(\@nb, @pvs));
        }
 
        # white long castling
@@ -454,7 +425,7 @@ sub prettyprint_pv {
                substr($nb[7], 0, 1, '-');
                substr($nb[7], 3, 1, 'R');
                                
-               return ($prefix . '0-0-0', prettyprint_pv(\@nb, $next_move, $next_toplay, @pvs));
+               return ('0-0-0', prettyprint_pv(\@nb, @pvs));
        }
 
        # black short castling
@@ -467,7 +438,7 @@ sub prettyprint_pv {
                substr($nb[0], 7, 1, '-');
                substr($nb[0], 5, 1, 'r');
                                
-               return ($prefix . '0-0', prettyprint_pv(\@nb, $next_move, $next_toplay, @pvs));
+               return ('0-0', prettyprint_pv(\@nb, @pvs));
        }
 
        # black long castling
@@ -480,7 +451,7 @@ sub prettyprint_pv {
                substr($nb[0], 0, 1, '-');
                substr($nb[0], 3, 1, 'r');
                                
-               return ($prefix . '0-0-0', prettyprint_pv(\@nb, $next_move, $next_toplay, @pvs));
+               return ('0-0-0', prettyprint_pv(\@nb, @pvs));
        }
 
        # check if the from-piece is a pawn
@@ -567,7 +538,7 @@ sub prettyprint_pv {
                $pretty .= '+';
        }
 
-       return ($prefix . $pretty, prettyprint_pv(\@nb, $next_move, $next_toplay, @pvs));
+       return ($pretty, prettyprint_pv(\@nb, @pvs));
 }
 
 sub output_screen {
@@ -583,18 +554,12 @@ sub output_screen {
        eval {
                my $dummy;
                if (exists($uciinfo{'pv'})) {
-                       $dummy = prettyprint_pv($pos_calculating->{'board'},
-                               $pos_calculating->{'move_num'},
-                               $pos_calculating->{'toplay'},
-                               @{$uciinfo{'pv'}});
+                       $dummy = prettyprint_pv($pos_calculating->{'board'}, @{$uciinfo{'pv'}});
                }
        
                my $mpv = 1;
                while (exists($uciinfo{'pv' . $mpv})) {
-                       $dummy = prettyprint_pv($pos_calculating->{'board'},
-                               $pos_calculating->{'move_num'},
-                               $pos_calculating->{'toplay'},
-                               @{$uciinfo{'pv' . $mpv}});
+                       $dummy = prettyprint_pv($pos_calculating->{'board'}, @{$uciinfo{'pv' . $mpv}});
                        ++$mpv;
                }
        };
@@ -603,12 +568,22 @@ sub output_screen {
                return;
        }
 
-       my $text = '';
+       my $text = 'Analysis';
+       if ($pos_calculating->{'last_move'} ne 'none') {
+               if ($pos_calculating->{'toplay'} eq 'W') {
+                       $text .= sprintf ' after %u. ... %s', ($pos_calculating->{'move_num'}-1), $pos_calculating->{'last_move'};
+               } else {
+                       $text .= sprintf ' after %u. %s', $pos_calculating->{'move_num'}, $pos_calculating->{'last_move'};
+               }
+               if (exists($uciid{'name'})) {
+                       $text .= ',';
+               }
+       }
 
        if (exists($uciid{'name'})) {
-               $text .= "Analysis by $uciid{'name'}:\n\n";
+               $text .= " by $uciid{'name'}:\n\n";
        } else {
-               $text .= "Analysis:\n\n";
+               $text .= ":\n\n";
        }
 
        return unless (exists($pos_calculating->{'board'}));
@@ -625,27 +600,6 @@ sub output_screen {
                        }
                }
        }
-                       
-       my @text_pvs = ();
-       if (exists($uciinfo{'pv1'}) && exists($uciinfo{'pv2'})) {
-               # multi-PV
-               my $mpv = 1;
-               while (exists($uciinfo{'pv' . $mpv})) {
-                       $text_pvs[$mpv] = prefix_pv($pos_calculating->{'move_num'}, $pos_calculating->{'toplay'}) .
-                               join(' ', prettyprint_pv($pos_calculating->{'board'},
-                                       $pos_calculating->{'move_num'},
-                                       $pos_calculating->{'toplay'},
-                                       @{$uciinfo{'pv' . $mpv}}));
-                       ++$mpv;
-               }
-       } else {
-               # single-PV
-               $text_pvs[0] = prefix_pv($pos_calculating->{'move_num'}, $pos_calculating->{'toplay'}) .
-                       join(' ', prettyprint_pv($pos_calculating->{'board'},
-                               $pos_calculating->{'move_num'},
-                               $pos_calculating->{'toplay'},
-                               @{$uciinfo{'pv'}}));
-       }
 
        if (exists($uciinfo{'pv1'}) && exists($uciinfo{'pv2'})) {
                # multi-PV
@@ -666,14 +620,16 @@ sub output_screen {
                        }
 
                        $text .= ":\n";
-                       $text .= "  $text_pvs[$mpv]\n\n";
+                       $text .= "  " . join(', ', prettyprint_pv($pos_calculating->{'board'}, @{$uciinfo{'pv' . $mpv}})) . "\n";
+                       $text .= "\n";
                        ++$mpv;
                }
        } else {
                # single-PV
                my $score = long_score(\%uciinfo, $pos_calculating, '');
                $text .= "  $score\n" if defined($score);
-               $text .= "  PV: $text_pvs[0]\n";
+               $text .=  "  PV: " . join(', ', prettyprint_pv($pos_calculating->{'board'}, @{$uciinfo{'pv'}}));
+               $text .=  "\n";
 
                if (exists($uciinfo{'nodes'}) && exists($uciinfo{'nps'}) && exists($uciinfo{'depth'})) {
                        $text .= sprintf "  %u nodes, %7u nodes/sec, depth %u ply",
@@ -717,14 +673,16 @@ sub output_screen {
                                $tell_text .= sprintf " (%2u ply)", $uciinfo{'depth' . $mpv};
                        }
 
-                       $tell_text .= ": $text_pvs[$mpv]\n";
+                       $tell_text .= ": ";
+                       $tell_text .= join(', ', prettyprint_pv($pos_calculating->{'board'}, @{$uciinfo{'pv' . $mpv}}));
+                       $tell_text .= "\n";
                        ++$mpv;
                }
        } else {
                # single-PV
                my $score = long_score(\%uciinfo, $pos_calculating, '');
                $tell_text .= "  $score\n" if defined($score);
-               $tell_text .= "  PV: $text_pvs[0]";
+               $tell_text .= "  PV: " . join(', ', prettyprint_pv($pos_calculating->{'board'}, @{$uciinfo{'pv'}}));
                if (exists($uciinfo{'depth'})) {
                        $tell_text .= sprintf " (depth %u ply)", $uciinfo{'depth'};
                }