-my %book_cache = ();
-sub book_info {
- my ($fen, $board, $toplay) = @_;
-
- if (exists($book_cache{$fen})) {
- return $book_cache{$fen};
- }
-
- my $ret = `./booklook $fen`;
- return "" if ($ret =~ /Not found/ || $ret eq '');
-
- my @moves = ();
-
- for my $m (split /\n/, $ret) {
- my ($move, $annotation, $win, $draw, $lose, $rating, $rating_div) = split /,/, $m;
-
- my $pmove;
- if ($move eq '') {
- $pmove = '(current)';
- } else {
- ($pmove) = prettyprint_pv_no_cache($board, $move);
- $pmove .= $annotation;
- }
-
- my $score;
- if ($toplay eq 'W') {
- $score = 1.0 * $win + 0.5 * $draw + 0.0 * $lose;
- } else {
- $score = 0.0 * $win + 0.5 * $draw + 1.0 * $lose;
- }
- my $n = $win + $draw + $lose;
-
- my $percent;
- if ($n == 0) {
- $percent = " ";
- } else {
- $percent = sprintf "%4u%%", int(100.0 * $score / $n + 0.5);
- }
-
- push @moves, [ $pmove, $n, $percent, $rating ];
- }
-
- @moves[1..$#moves] = sort { $b->[2] cmp $a->[2] } @moves[1..$#moves];
-
- my $text = "Book moves:\n\n Perf. N Rating\n\n";
- for my $m (@moves) {
- $text .= sprintf " %-10s %s %6u %4s\n", $m->[0], $m->[2], $m->[1], $m->[3]
- }
-
- return $text;
-}
-