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 {
+ die "Missing PGN position data." if (!defined($pgn_file_number) || !defined($pgn_start_position));
+ $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, $_;
+ }
+ 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;
+}