Try to weed out invalid PVs before printing them; should return somewhat
authorSteinar H. Gunderson <sesse@debian.org>
Sat, 30 Jun 2007 15:19:11 +0000 (17:19 +0200)
committerSteinar H. Gunderson <sesse@debian.org>
Sat, 30 Jun 2007 15:19:11 +0000 (17:19 +0200)
less junk in the output.

remoteglot.pl

index eecad8f..50b3fba 100755 (executable)
@@ -264,6 +264,10 @@ sub prettyprint_pv {
        my $pretty;
        my $piece = substr($board->[$from_row], $from_col, 1);
 
+       if ($piece eq '-') {
+               die "Invalid move";
+       }
+
        # white short castling
        if ($pv eq 'e1g1' && $piece eq 'K') {
                my @nb = @$board;
@@ -406,6 +410,27 @@ sub prettyprint_pv {
 sub output_screen {
        #return;
 
+       #
+       # Check the PVs first. if they're invalid, just wait, as our data
+       # is most likely out of sync. This isn't a very good solution, as
+       # it can frequently miss stuff, but it's good enough for most users.
+       #
+       eval {
+               my $dummy;
+               if (exists($uciinfo{'pv'})) {
+                       $dummy = prettyprint_pv($ficsinfo{'board'}, @{$uciinfo{'pv'}});
+               }
+       
+               my $mpv = 1;
+               while (exists($uciinfo{'pv' . $mpv})) {
+                       $dummy = prettyprint_pv($ficsinfo{'board'}, @{$uciinfo{'pv' . $mpv}});
+                       ++$mpv;
+               }
+       };
+       if ($@) {
+               return;
+       }
+
        print  "\ecAnalysis:\n";
 
        return unless (exists($ficsinfo{'board'}));