From 2101800306b229d0df929bfef2034566df930a1f Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Sat, 13 Dec 2014 15:53:16 +0100 Subject: [PATCH] Load and display the root PGN. --- www/book.html | 1 + www/css/remoteglot.css | 4 ++++ www/js/book.js | 1 + www/opening-stats.pl | 39 ++++++++++++++++++++++++++++++++++++++- 4 files changed, 44 insertions(+), 1 deletion(-) diff --git a/www/book.html b/www/book.html index 38b0335..4889b86 100644 --- a/www/book.html +++ b/www/book.html @@ -50,6 +50,7 @@ +

diff --git a/www/css/remoteglot.css b/www/css/remoteglot.css index 32402b2..bbd9b70 100644 --- a/www/css/remoteglot.css +++ b/www/css/remoteglot.css @@ -113,6 +113,10 @@ p { min-width: 400px; overflow: hidden; } +#rootgame { + white-space: pre; + font-family: monospace; +} /* If the board is too wide for the screen, shrink it to fit, * and then put the analysis below. */ diff --git a/www/js/book.js b/www/js/book.js index 796b04e..ab5e411 100644 --- a/www/js/book.js +++ b/www/js/book.js @@ -61,6 +61,7 @@ var direction = 1; 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]; diff --git a/www/opening-stats.pl b/www/opening-stats.pl index d303435..9a2ccbc 100755 --- a/www/opening-stats.pl +++ b/www/opening-stats.pl @@ -24,6 +24,14 @@ chomp (my $line = <$chld_out>); 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; +} -- 2.39.2