var show_lines = function(data, game) {
var moves = data['moves'];
$('#numviewers').text(data['opening']);
+ $('#rootgame').text(data['root_pgn']);
var total_num = 0;
for (var i = 0; i < moves.length; ++i) {
var move = moves[i];
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) {
}
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;
}
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;
+}