gnugo-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[gnugo-devel] trevor_1_14.1


From: Trevor Morris
Subject: [gnugo-devel] trevor_1_14.1
Date: Wed, 07 Nov 2001 12:36:07 -0500

http://www.public32.com/games/go/trevor_1_14.1
 - regression view includes node counts, SGF link, and -t output.
 - GTP echo_err added to allow echoing to STDERR.
 - owl tuning.

The "-t" output is most cool.

Here's a preview:
  http://www.public32.com/regtest/?trevor:200
After this gets into CVS, I'll run another regression, so the trace
information will be available in the usual place.


Index: interface/play_gtp.c
===================================================================
RCS file: /cvsroot/gnugo/gnugo/interface/play_gtp.c,v
retrieving revision 1.41
diff -u -b -r1.41 play_gtp.c
--- interface/play_gtp.c        2001/11/07 05:41:30     1.41
+++ interface/play_gtp.c        2001/11/07 17:30:43
@@ -82,6 +82,7 @@
 DECLARE(gtp_dragon_stones);
 DECLARE(gtp_dump_stack);
 DECLARE(gtp_echo);
+DECLARE(gtp_echo_err);
 DECLARE(gtp_eval_eye);
 DECLARE(gtp_final_score);
 DECLARE(gtp_final_status);
@@ -157,6 +158,7 @@
   {"dragon_stones",           gtp_dragon_stones},
   {"dump_stack",                     gtp_dump_stack},
   {"echo" ,                   gtp_echo},
+  {"echo_err" ,               gtp_echo_err},
   {"estimate_score",          gtp_estimate_score},
   {"eval_eye",                       gtp_eval_eye},
   {"final_score",             gtp_final_score},
@@ -285,6 +287,8 @@
 }
 
 
+
+
 /* Function:  Report the version number of the program.
  * Arguments: none
  * Fails:     never
@@ -2299,6 +2303,19 @@
 {
   return gtp_success(id, "%s", s);
 }
+
+
+/* Function:  Echo the parameter to stdout AND stderr
+ * Arguments: string
+ * Fails:     never
+ * Returns:   nothing
+ */
+static int
+gtp_echo_err(char *s, int id)
+{
+  fprintf(stderr, "%s", s);
+  return gtp_success(id, "%s", s);
+}
 
 /* Function:  List all known commands
  * Arguments: none
Index: patterns/owl_defendpats.db
===================================================================
RCS file: /cvsroot/gnugo/gnugo/patterns/owl_defendpats.db,v
retrieving revision 1.21
diff -u -b -r1.21 owl_defendpats.db
--- patterns/owl_defendpats.db  2001/11/06 16:36:51     1.21
+++ patterns/owl_defendpats.db  2001/11/07 17:30:50
@@ -699,6 +699,20 @@
 :8,-,value(80)
 
 
+# new pattern (3.1.14) trevor
+# see trevor:401
+# Possible to sacrifice to gain tempo here.
+Pattern D217c
+
+O.X?     expand eye-space
+O.*.
+.x..
+
+:8,s,value(10)
+
+
+
+
 Pattern D218
 
 xx...X.        slide (usually inferior to play on third line)
@@ -1941,6 +1955,21 @@
 
 ; !x_somewhere(a) || !x_somewhere(b)
 
+
+
+# new pattern (3.1.14) trevor
+# Needed in trevor:403
+
+Pattern D624
+
+O.??      Block on first line to make eye.
+O.OX
+ox*?
+
+:8,-,value(40)
+
+
+
 #########################################################
 #                                                       #
 #            Make eyeshape in the center                #
@@ -3590,6 +3619,34 @@
 
 ;owl_escape_value(a)>0
 
+Pattern D1134
+# tm new pattern (3.1.14)
+# Give a very low value, unless add lots of constraints.
+# See trevor:520.
+
+XXO      Cut!
+O*X
+OX.
+?..
+
+:8,-,value(5)
+
+
+Pattern D1135
+# tm new pattern (3.1.14)
+# See trevor:330
+
+O*.    connect out, threaten cut
+X.?
+
+:8,-,value(35)
+
+O*a
+cB?
+
+; owl_escape_value(a)>0 &&
+; oplay_attack(*,a,c)
+
 
 ########################################################
 #                                                       #
Index: regression/eval3.sh
===================================================================
RCS file: /cvsroot/gnugo/gnugo/regression/eval3.sh,v
retrieving revision 1.2
diff -u -b -r1.2 eval3.sh
--- regression/eval3.sh 2001/10/28 14:38:17     1.2
+++ regression/eval3.sh 2001/11/07 17:30:50
@@ -1,5 +1,4 @@
 #!/bin/sh
 nice -n 19 ./regress.pl \
-  --goprog "../interface/gnugo.exe --mode gtp --quiet" \
   --verbose 1  \
   -a 1
Index: regression/regress.pl
===================================================================
RCS file: /cvsroot/gnugo/gnugo/regression/regress.pl,v
retrieving revision 1.8
diff -u -b -r1.8 regress.pl
--- regression/regress.pl       2001/10/30 16:42:00     1.8
+++ regression/regress.pl       2001/11/07 17:30:55
@@ -36,7 +36,6 @@
 
 package REGRESS;
 
-use IPC::Open2;
 use IPC::Open3;
 use IO::Handle;
 use Getopt::Long;
@@ -47,6 +46,7 @@
 use strict;
 use warnings;
 
+use Carp;
 
 STDOUT->autoflush(1);
 
@@ -84,7 +84,7 @@
   "KO_READING", ""
  );
 
-
+my $trace_output="";
 my $cur_passed;
 my $result;
 my $correct_re;
@@ -111,6 +111,7 @@
 my $filepos;
 my $goprog_in ;                # stdin of computer player
 my $goprog_out;                # stdout of computer player
+my $goprog_err;                # stderr of computer player
 my $passes;
 my $unexpected_pass;
 my $failures;
@@ -132,6 +133,9 @@
 my @failed_links;
 my @FAILED_links;
 
+my @counters = qw/life_node owl_node reading_node trymove/;
+
+my %counters;
 
 my $next_cmd = "";
 my $prev_cmd = "";
@@ -150,6 +154,10 @@
   exit;
 }
 
+if (!$goprog) {
+  $goprog = "../interface/gnugo.exe --mode gtp --quiet -t";  
+}
+
 die $helpstring unless defined $goprog;
 
 
@@ -171,20 +179,20 @@
 # create FileHandles
 $goprog_in  = new FileHandle;          # stdin of computer player
 $goprog_out = new FileHandle;          # stdout of computer player
-$pidg = open2($goprog_out, $goprog_in, $goprog);
+$goprog_err = new FileHandle;          # stdout of computer player
+print "Go program: $goprog\n" if $verbose > 1;
+$pidg = open3($goprog_in, $goprog_out, $goprog_err, $goprog);
 print "goprog pid: $pidg\n" if $verbose > 1;
 my ($goprog_exe) = split (" ", $goprog);
 $goprog_timestamp = (stat $goprog_exe)->mtime;
 
 go_command("name");
-#print $goprog_in "name\n";
 $_ = <$goprog_out>;
 if (/^=\s*(.*)/) {
   ($goprog_name = $1) =~ s/\s*$//;
 }
 <$goprog_out>;
 go_command("version");
-#print $goprog_in "version\n";
 $_ = <$goprog_out>;
 if (/^=\s*(.*)/) {
   ($goprog_version = $1) =~ s/\s*$//;
@@ -194,7 +202,7 @@
 print "Name: " .  $goprog_name ." ". $goprog_version . "\n" if $verbose > 1;
 
 if ($one_gg_process) {
-  go_command("quit");#print $goprog_in "quit\n";
+  go_command("quit");
   print "waiting\n" if $verbose > 2;
   waitpid $pidg, 0;
   print "done waiting\n" if $verbose > 2;
@@ -229,16 +237,45 @@
 
 
 sub regress_file {
+  $testfile = shift;
+  print "$testfile\n" if $verbose;
+  
+  foreach (@counters) {
+    go_command("reset_${_}_counter");
+    eat();
+  }
+
+  -e "html" or mkdir "html" or die "Couldn't create html";
+  -e "html/$testfile" or mkdir "html/$testfile" or die "Couldn't create
html/$testfile";
+  
+  my $childpid;
   unless ($one_gg_process) {
     $goprog_in  = new FileHandle;              # stdin of computer player
     $goprog_out = new FileHandle;              # stdout of computer player
-    $pidg = open2($goprog_out, $goprog_in, $goprog);
+    $goprog_err = new FileHandle;              # stderr of computer player
+    $pidg = open3($goprog_in, $goprog_out, $goprog_err, $goprog);
     print "goprog pid: $pidg\n" if $verbose > 1;
+    unless ($childpid = fork) {
+      #Child.
+      chdir "html/$testfile" ;
+      open (TRACER, ">tracer.ttt");
+      while (<$goprog_err>) {
+        print TRACER $_;
+        if (/^FINISHED PROBLEM: (.*)/) {
+          close TRACER or die "Couldn't close temp trace file";
+          my $thisgtp = $1;
+          my ($num) = $thisgtp =~ /^(\d+)/ or die "Missing number: $thisgtp";
+          rename "tracer.ttt", "$num.trace"
+              or die "Couldn't rename tracer: $testfile, $num";
+          open (TRACER, ">tracer.ttt");
+        }
+      }
+      close TRACER;
+      exit;
   }
+  }
   
   
-  $testfile = shift;
-  print "$testfile\n" if $verbose;
 
   #main bit.
   $pidt = open ($testfile_out,"<$testfile");
@@ -257,10 +294,10 @@
   $filepos = 0;
   go_command("cputime");
   $cputime = <$goprog_out>;
-  print "cputime: $cputime\n" if $verbose > 1 or 1;
+  print "cputime: $cputime\n" if $verbose > 1;
   ($cputime) = ($cputime =~ /((\d|\.)+)/);
-  print "cputime: $cputime\n" if $verbose > 1 or 1;
   <$goprog_out>;  
+  
   my $skipping = 0;
   while (defined($next_cmd))
   {
@@ -280,6 +317,9 @@
           if ($3) { $fail = 1} else { $fail = 0};
           if ($4) {$ignore = 1} else {$ignore = 0};
 
+          go_command("echo_err FINISHED PROBLEM: $prev_cmd\n");
+          eat();  #ignore output!
+
           my $old_skipping = $skipping;
           $skipping = $numbers && ($num =~ $numbers);
           if ($old_skipping) {
@@ -327,9 +367,9 @@
            $top_moves = 1;
          }
        }
-       go_command($next_cmd); #print $goprog_in "$next_cmd\n";
+       go_command($next_cmd); 
        if ($top_moves) {
-         $top_moves = eat_move($goprog_out);
+         $top_moves = eat_one();
          if ($top_moves) {
            ($result, $_) = split(/ /, $top_moves, 2);
          } else {
@@ -338,7 +378,7 @@
          }
          print "TopMoves:$top_moves\n" if $verbose > 1;
        } else {
-         $result = eat_move($goprog_out);
+         $result = eat_one();
          if (!defined($result)) {$result="";}
        }
        print "RES: $result\n" if $verbose > 1;
@@ -365,7 +405,7 @@
        . "$unexpected_fail unexpected $fail_string\n";
 
   unless ($one_gg_process) {
-    go_command("quit");#print $goprog_in "quit\n";
+    go_command("quit");
     print "waiting\n" if $verbose > 2;
     waitpid $pidg, 0;
     print "done waiting\n" if $verbose > 2;
@@ -404,19 +444,34 @@
       $html_whole_gtp =~ /$listval=(.*?)<BR>/;
       if (defined($1)) {$astxt = $1;} else {$astxt = "";};
       print $brd "<$listval>$astxt</$listval>\n";
+    }
+    print $brd "<COUNTERS ";
+    foreach (@counters) {
+      go_command("get_${_}_counter");
+      my $counts = eat_one();
+      defined($counts) or confess "Missing count";
+      defined($counters{$_}) or confess "Missing counter";
+      my $countdelta = $counts - $counters{$_};
+      $counters{$_} = $counts;
+      print $brd address@hidden  $_="$countdelta"@;
     }
-    print $brd "<NODES owl=123 reading=123>\n";
+    print $brd ">\n";
+
 
     go_command("cputime");
     my $new_cputime = <$goprog_out>;
     ($new_cputime) = ($new_cputime =~ /((\d|\.)+)/);
-    print "cputime: ".$new_cputime."\n" if $verbose > 1 or 1;
+    print "cputime: ".$new_cputime."\n" if $verbose > 1;
     <$goprog_out>;  
-    print $brd "<TIME wall=0.123 CPU=" . sprintf("%.5f", $new_cputime -
$cputime) .  ">\n";
+    print $brd "<TIME wall=0.0 CPU=" . sprintf("%.5f", $new_cputime -
$cputime) .  ">\n";
     $cputime = $new_cputime;
 
     print $brd "<GTP_COMMAND>$prev_cmd</GTP_COMMAND>\n";
     print $brd $brdout;
+    
+    print $brd "<TRACE_OUTPUT>$trace_output</TRACE_OUTPUT>\n";
+    $trace_output= "";
+    
     print $brd "</GOPROB>\n";
     close $brd;
   }
@@ -433,11 +488,7 @@
 
 sub eat_board {
   go_command("query_boardsize");
-  my $line = "";
-  while ($line eq "") {
-    chop($line = <$goprog_out>) or die "No response!";
-  }
-  <$goprog_out>;
+  my $line = eat();
   (undef, $boardsize) = split(' ', $line, 2);
   $boardsize = $boardsize + 0;
   my $linesleft = $boardsize + 2;
@@ -665,23 +716,32 @@
 }
   
 
-sub eat_move {
-    my $h = shift;
-# ignore empty lines
+sub eat() {
+  # ignore empty lines
     my $line = "";
     while ($line eq "") {
-       chop($line = <$h>) or die "No response!";
+    chop($line = <$goprog_out>) or die "No response!";
+    $line =~ s/\s*$//smg;
     }
-    $line =~ s/\s*$//;
-    my ($equals, $move) = split(' ', $line, 2);
-    $line = <$h>;
+  <$goprog_out>;
+  return $line;
+}  
+
+
+sub eat_one {
+    my ($equals, $move) = split(' ', eat(), 2);
     return $move;
 }
 
 sub go_command {
-  $_ = shift;
-  print $goprog_in "$_\n";
-  print "CMD:$_\n" if $verbose > 1;
+  my $cmd = shift;
+  print $goprog_in "$cmd\n";
+  print "CMD:$cmd\n" if $verbose > 1;
+  foreach (@counters) {
+    if ($cmd =~ /reset_${_}_counter/) {
+      $counters{$_} = 0;
+    }
+  }
 }
 
 
Index: regression/regress.plx
===================================================================
RCS file: /cvsroot/gnugo/gnugo/regression/regress.plx,v
retrieving revision 1.2
diff -u -b -r1.2 regress.plx
--- regression/regress.plx      2001/11/01 15:14:12     1.2
+++ regression/regress.plx      2001/11/07 17:30:57
@@ -31,6 +31,15 @@
 # It is designed to be run as a CGI script.
 
 
+
+#BEGIN {
+#  use CGI::Carp qw(carpout);
+#  my $errfile = "C:/temp/web.err";
+#  #open (WEBERR, ">$errfile") or die "Couldn't open $errfile.";
+#  carpout(STDOUT);
+#}
+#
+
 use strict;
 use warnings;
 use FindBin;
@@ -38,11 +47,10 @@
 
 use GoImage::Stone;
 
+#use CGI::Carp;
 use CGI qw/:standard/;
 
 
-print "Content-type: text/html\n\n";
-
 my %colors = ("ALIVE", "green",
        "DEAD", "cyan",
        "CRITICAL", "red",
@@ -50,16 +58,37 @@
        "UNCHECKED", "magenta");
 
 my $query = new CGI;
+my ($tstfile, $num, $sortby, $sgf, $reset, $trace);
 
-my $tstfile = $query->param("tstfile");
-if ($tstfile && !($tstfile =~ /^[a-zA-Z0-9_]+\.tst$/)) {
-  print "bad test file: $tstfile\n";
+($tstfile, $num) = ($query->query_string() =~ /keywords=(.*)%3A(.*)/);
+
+if (!$tstfile) {
+  $tstfile = $query->param("tstfile");
+  $num = $query->param("num");
+  $sortby = $query->param("sortby");
+  $sgf = $query->param("sgf");
+  $reset = $query->param("reset");
+  $trace = $query->param("trace");
 }
+
 
-my $num = $query->param("num");
-my $sortby = $query->param("sortby");
 
-my $reset = $query->param("reset");
+print "HTTP/1.0 200 OK\r\n";
+print "Content-type: " .
+        do {
+          my $plain = $trace;
+          if ($sgf) { "application/x-go-sgf" }
+          elsif ($plain) { "text/plain" }
+          else {"text/html"; }
+        } . "\r\n\r\n";
+
+if ($tstfile) {
+  $tstfile .= '.tst' if $tstfile !~ /.tst$/;
+}
+if ($tstfile && !($tstfile =~ /^[a-zA-Z0-9_]+\.tst$/)) {
+  print "bad test file: $tstfile\n";
+  exit;
+}
 
 if ($reset) {
   unlink glob("html/*.html");
@@ -67,6 +96,19 @@
   print "Cleaned up!<HR>\n";
 }
 
+if ($trace) {
+  open (TRACER, "html/$tstfile/$num.trace") or
+    do {print "Couldn't find trace file: $!";  exit;};
+  while (<TRACER>) {
+    print;
+  }
+  close TRACER;
+  exit;
+}
+
+
+
+
 my %points;
 my %attribs;
 
@@ -115,7 +157,7 @@
   @address@hidden = (0,0,0,0);
 
   foreach my $k1 (sort keys %hha) { #$k1 = filename
-    print I qq@<TR>\n <TD><A
href="regress.plx?tstfile=$k1&sortby=result">$k1</A></TD>\n@;
+    print I qq@<TR>\n <TD><A
href="?tstfile=$k1&sortby=result">$k1</A></TD>\n@;
     foreach my $k2 (@pflist) {
       my $c = 0;
       $c = @{$hha{$k1}{$k2}} if $hha{$k1}{$k2};
@@ -123,7 +165,7 @@
       if (!($k2 =~ /passed/) and $c) {
         print I " <TD>$c:<BR>\n";
         foreach (sort {$a<=>$b} @{$hha{$k1}{$k2}}) {
-          print I qq@  <A HREF="regress.plx?tstfile=$k1&num=$_">$_</A>\n@;
+          print I qq@  <A HREF="?tstfile=$k1&num=$_">$_</A>\n@;
         }
         print I " </TD>\n";
       } else {
@@ -158,6 +200,7 @@
   $_;
 }
  
+my @counters = qw/life_node owl_node reading_node trymove/;
 
 if ($num) {
 #CASE 2 - problem detail.
@@ -167,18 +210,41 @@
   close FILE;
   game_parse($content);
   
+  if ($sgf) {
+    &sgfFile;
+    exit;
+  }
+  
   print qq@<HTML><HEAD><TITLE>$tstfile test $attribs{"num"}
details.</TITLE></HEAD>\n@;
   print qq@<BODY><TABLE border=1>\n@;
-  print qq@<TR><TD>number:</TD><TD>$attribs{"num"}</TD></TR>\n@;
-  print qq@<TR><TD>status:</TD><TD>$attribs{"status"}</TD></TR>\n@;
-  print qq@<TR><TD>correct:</TD><TD>$attribs{"correct"}</TD></TR>\n@;
-  print qq@<TR><TD>answer:</TD><TD>$attribs{"answer"}</TD></TR>\n@;
-  print qq@<TR><TD>gtp:</TD><TD>$attribs{"gtp_command"}</TD></TR>\n@;
-  print qq@<TR><TD>description:</TD><TD>$attribs{"description"}</TD></TR>\n@;
-  print qq@<TR><TD>category:</TD><TD>$attribs{"category"}</TD></TR>\n@;
-  print qq@<TR><TD>severity:</TD><TD>$attribs{"severity"}</TD></TR>\n@;
-  print qq@</TABLE>\n\n@;
+  print qq@
+ <TR>
+   <TD>number:</TD><TD>$attribs{"num"}</TD><TD>&nbsp;</TD>
+   <TD>cputime:</TD><TD>$attribs{"cputime"}</TD>
+ </TR><TR>
+   <TD>status:</TD><TD>$attribs{"status"}</TD><TD>&nbsp;</TD>
+   <TD>$counters[0]:</TD><TD>$attribs{"$counters[0]_counter"}</TD>
+ <TR>
+   <TD>correct:</TD><TD>$attribs{"correct"}</TD><TD>&nbsp;</TD>
+   <TD>$counters[1]:</TD><TD>$attribs{"$counters[1]_counter"}</TD>
+ <TR>
+   <TD>answer:</TD><TD>$attribs{"answer"}</TD><TD>&nbsp;</TD>
+    <TD>$counters[2]:</TD><TD>$attribs{"$counters[2]_counter"}</TD>
+ <TR>
+   <TD>gtp:</TD><TD>$attribs{"gtp_command"}</TD><TD>&nbsp;</TD>
+   <TD>$counters[3]:</TD><TD>$attribs{"$counters[3]_counter"}</TD>
+ </TR><TR><TD>category:</TD><TD>$attribs{"category"}</TD>
+ </TR><TR><TD>severity:</TD><TD>$attribs{"severity"}</TD>
+ </TR><TR><TD>description:</TD><TD>$attribs{"description"}</TD>
+ </TR>
+</TABLE>\n\n@;
   print qq@<HR>\n\n@;
+  print qq@
+<TABLE border=0>
+<TR><TD><A HREF="?tstfile=$tstfile&num=$num&sgf=1">SGF File</A>
+</TD><TD>&nbsp;&nbsp;&nbsp;<A
HREF="?tstfile=$tstfile&num=$num&trace=1">Trace File</A>
+</TD></TR></TABLE>
+@;
 
   my $boardsize = $attribs{"boardsize"};  #need to add to export.
 
@@ -226,22 +292,23 @@
   my $gtpall = $attribs{gtp_all};
   $gtpall  =~ s/<BR>//mg;
   $gtpall  =~ s/\s+$//mg;
-  $gtpall  =~ address@hidden ((?:\w|[-.\\/])+)  \s* (\d*) @xm or die
$attribs{gtp_all};
+  $gtpall  =~ address@hidden ((?:\w|[-.\\/])+)  \s* (\d*) @xm 
+    or $gtpall =~m/(.*?)/;  #Problems!!!!  
+  
   my $cmdline = "gq -l $1 " . ($2 ? "-L $2 " : "");
-  if ($gtpall =~ m@ .* (owl_[attackdefend]*) \s* ([A-Z]\d{1,2}) \s* $ @x) {
+  if ($gtpall =~ m@ .* (owl_(?:attack|defend)*) \s* ([A-Z]\d{1,2}) \s* $
@x) {
     $cmdline .= "--decide-dragon $2 -o x.sgf" ;
   } elsif ($gtpall =~ m@ .* (gg_genmove\s+[whiteblack]*)  \s* address@hidden) {
     $cmdline .= "-t";
-  } elsif ($gtpall =~ m@ .* ([attackdefend]*) \s* ([A-Z]\d{1,2}) \s* $ @x) {
+  } elsif ($gtpall =~ m@ .* (attack|defend) \s* ([A-Z]\d{1,2}) \s* $ @x) {
     $cmdline .= "--decide-string $2 -o x.sgf";
   } else {
-    $cmdline .= " <BR> (directive unrecognized): '$gtpall'";
+    $cmdline .= " <BR> (directive unrecognized)";
   }
   print qq@<HR>\n\n@;
   print qq@<TABLE border=1>\n@;
   print qq@ <TR><TD>CMD Line Hint:</TD><TD>$cmdline</TD></TR>\n@;
   print qq@ <TR><TD>Full
GTP:</TD><TD>$attribs{gtp_all}</TD></TR>\n</TABLE>\n@;
-  print qq@<HR>\nSGF board not generated - does anybody care?@;
   
   print "\n\n</HTML>";
  # print %attribs;
@@ -275,13 +342,13 @@
   print TF "<H3>$tstfile regression results - _VERSION_</H3>\n";
   print TF qq@<TABLE border=1>
 <tr>
-  <TH><A HREF="regress.plx?tstfile=$tstfile&sortby=filepos">line</A></TH>
-  <TH><A href="regress.plx?tstfile=$tstfile&sortby=num">number</A></TH>
-  <TH><A href="regress.plx?tstfile=$tstfile&sortby=result">result</A></TH>
+  <TH><A HREF="?tstfile=$tstfile&sortby=filepos">line</A></TH>
+  <TH><A href="?tstfile=$tstfile&sortby=num">number</A></TH>
+  <TH><A href="?tstfile=$tstfile&sortby=result">result</A></TH>
   <TH>expected </TH>
   <TH>got</TH>
   <TH>gtp</TH>
-  <TH><A href="regress.plx?tstfile=$tstfile&sortby=cputime">cputime</A></TH>
+  <TH><A href="?tstfile=$tstfile&sortby=cputime">cputime</A></TH>
 </TR>\n@;
 
   my @files = glob("html/$tstfile/*.xml");
@@ -343,7 +410,7 @@
   
   foreach my $curfile (sort {filesby($sortby)} keys %files) {
     my %h = %{$files{$curfile}};
-    my $numURL = qq@<A
HREF="regress.plx?tstfile=$tstfile&num=$h{num}">$h{num}</A>@;
+    my $numURL = qq@<A HREF="?tstfile=$tstfile&num=$h{num}">$h{num}</A>@;
     my $r = $h{result};
     $r =~ address@hidden([A-Z]*)$@<B>$1</B>@;
     print TF
"<TR><TD>$h{filepos}</TD><TD>$numURL</TD><TD>$r</TD><TD>$h{expected}</TD>"
@@ -393,8 +460,14 @@
     if $content =~ m@<SEVERITY>(.*?)</SEVERITY>@s;
   $attribs{"gtp_command"} = $1
     if $content =~ m@<GTP_COMMAND>(.*?)</GTP_COMMAND>@s;
+  $attribs{"cputime"} = $1
+    if $content =~ m@<TIME.*?CPU=((\d|\.)*)@s;
   $attribs{"boardsize"} = $1
     if $content =~ m@<BOARD[^>]*size=(\d+)@s;
+  foreach (@counters) {
+    $attribs{$_."_counter"} = $1
+      if $content =~ m@<COUNTER[^>]*$_="?(\d+)@s;
+  }
   $content =~ address@hidden<POINT@<address@hidden;
   while ($content =~ s@<POINT(.*?)></POINT>@@s) {
     my $pattr = $1;
@@ -423,16 +496,45 @@
 }
 
 
+sub sgfFile() {
+  my $boardsize = $attribs{"boardsize"};  #need to add to export.
 
-#sub GTPtoSGF {
-#  $_ = shift;
-#  if (! /([A-Z])([0-9]{1,2})/) {
-#    return ;
-#  }
-#  $_ = ord($1) - ord("A") + 1;
-#  if ($_ > (ord("I") - ord("A") + 1)) { $_--; }
-#  chr(ord("a") + $_ - 1) . chr(ord("a") + $boardsize - $2);
-#}
-#
-#
+  my $ret="";
+  $ret .= "(;\nFF[4]GM[1]SZ[$boardsize]\nAP[regress.plx]\n";
+   
+  for (my $j = $boardsize; $j > 0; $j--) {
+    my $jA = $j;
+    $jA .= " " if ($j <= 9);
+    for (my $i = 1; $i <= $boardsize; $i++) {
+      my $iA = ord('A') + $i - 1;
+      if ($iA >= ord('I')) { $iA++; }
+      $iA = chr($iA);  
+      my $coord = $iA.$j;
+      my $bw = pval($coord, "stone");
+      
+      if ($bw eq "black") {
+        $ret .= "AB\[" . GTPtoSGF($coord, $boardsize) . "]";
+      } elsif ($bw eq "white") {
+        $ret .= "AW\[" . GTPtoSGF($coord, $boardsize) . "]";
+      }
+    }
+  }
+  $ret.=")";
+  
+  $ret =~ s/((A[BW]\[..\]){12})/$1\n/g;
+  
+  print $ret;
+}
+
+
+sub GTPtoSGF {
+  local $_ = shift;
+  my $boardsize = shift;
+  if (! /([A-Z])([0-9]{1,2})/) {
+    return ;
+  }
+  $_ = ord($1) - ord("A") + 1;
+  if ($_ > (ord("I") - ord("A") + 1)) { $_--; }
+  chr(ord("a") + $_ - 1) . chr(ord("a") + $boardsize - $2);
+}
 





reply via email to

[Prev in Thread] Current Thread [Next in Thread]