X-Git-Url: https://git.sesse.net/?p=remoteglot-book;a=blobdiff_plain;f=www%2Fopening-stats.pl;h=9a2ccbc4ad32380598abc2d9a17d6a46e2a4fa59;hp=3a02cf9fde6fcd917b5d3cbc6237c9a3949c4ce2;hb=2101800306b229d0df929bfef2034566df930a1f;hpb=55481cd69d21b31bfdcc6e33853ea475ed16f622 diff --git a/www/opening-stats.pl b/www/opening-stats.pl index 3a02cf9..9a2ccbc 100755 --- a/www/opening-stats.pl +++ b/www/opening-stats.pl @@ -21,9 +21,17 @@ my $hex = unpack('H*', $pos->bitpacked_fen); print $chld_in $hex, "\n"; chomp (my $line = <$chld_out>); -my ($white, $draw, $black, $opening_num, $white_avg_elo, $black_avg_elo, $num_elo, $timestamp, $pgn_start_position, @moves) = split / /, $line; +my ($white, $draw, $black, $opening_num, $white_avg_elo, $black_avg_elo, $num_elo, $timestamp, $pgn_file_number, $pgn_start_position, @moves) = split / /, $line; my $opening = $openings{$opening_num} // 'A00: Start position'; +my $root_pgn; +eval { + $root_pgn = read_root_pgn($pgn_file_number, $pgn_start_position); +}; +if ($@) { + $root_pgn = "Could not find root PGN. ($@)"; +} + # Explore one move out. my @json_moves = (); for my $move (@moves) { @@ -44,7 +52,7 @@ for my $move (@moves) { } print $cgi->header(-type=>'application/json'); -print JSON::XS::encode_json({ moves => \@json_moves, opening => $opening }); +print JSON::XS::encode_json({ moves => \@json_moves, opening => $opening, root_pgn => $root_pgn }); sub num { my $x = shift; @@ -65,3 +73,32 @@ sub read_openings { } close $fh; } + +sub read_root_pgn { + my @pgnnames; + open my $pgnnamesfh, "<", "../pgnnames.txt" + or die "../pgnnames.txt: $!"; + while (<$pgnnamesfh>) { + chomp; + push @pgnnames, $_; + warn "PGN name: $_"; + } + close $pgnnamesfh; + + if ($pgn_file_number > $#pgnnames) { + die "Unknown PGN file number $pgn_file_number"; + } + + my $root_pgn; + open my $pgnfh, "<", "../" . $pgnnames[$pgn_file_number] + or die $pgnnames[$pgn_file_number] . ": $!"; + sysseek($pgnfh, $pgn_start_position, 0) + or die "Could not seek to $pgn_start_position: $!"; + sysread($pgnfh, $root_pgn, 32768) + or die "Could not read PGN from $pgn_start_position at $pgnnames[$pgn_file_number]: $!"; + close $pgnfh; + $root_pgn =~ s/^.*?(\[Event )/$1/s; + $root_pgn =~ s/^(.+?)\[Event .*/$1/s; + + return $root_pgn; +}