gnugo-devel
[Top][All Lists]
Advanced

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

Re[2]: [gnugo-devel] sgf cleaning continued


From: Paul Pogonyshev
Subject: Re[2]: [gnugo-devel] sgf cleaning continued
Date: Thu, 12 Sep 2002 22:37:37 +0300

Gunnar wrote:

>> [comments from sgf_3_9.3]

> This patch mostly looks good except that it doesn't apply. Apparently
> tabs in the context has been converted to spaces in the patch causing
> patch to detect conflicting changes. This can be worked around with
> the -l option to patch (ignores whitespace) but then the patch still
> turns out to be malformed.

sorry for that. my connection is sometimes terrible and i tried to
diff not all files at once, but did it in several steps, being afraid
it would never manage to finish diff on all files. then i placed the
patches produced one after another, thinking it would work.

>>  [part of new code from play_ascii.c]

> This looks strange. The movenumber variable is no longer declared at
> all and it looks like it's only possible to go to the first and last
> moves, not to an arbitrary move number.

this is probably caused by the same reason. movenumber is declared in
my local copy.

so, here is another try. i'm not sure if there's a way to redirect
output under windows (except for dos programs). however, previous
patches worked, so i think this one should too.

Paul


Index: sgf/sgftree.h
===================================================================
RCS file: /cvsroot/gnugo/gnugo/sgf/sgftree.h,v
retrieving revision 1.11
diff -u -r1.11 sgftree.h
--- sgf/sgftree.h       10 Sep 2002 20:06:02 -0000      1.11
+++ sgf/sgftree.h       12 Sep 2002 19:29:45 -0000
@@ -134,6 +134,9 @@
 void sgftree_clear(SGFTree *tree);
 int  sgftree_readfile(SGFTree *tree, const char *infilename);
 
+int sgftreeBack(SGFTree *tree);
+int sgftreeForward(SGFTree *tree);
+
 void sgftreeAddPlay(SGFTree *tree, int color, int movex, int movey);
 void sgftreeAddPlayLast(SGFTree *tree, int color, int movex, int movey);
 void sgftreeAddStone(SGFTree *tree, int color, int movex, int movey);
Index: sgf/sgftree.c
===================================================================
RCS file: /cvsroot/gnugo/gnugo/sgf/sgftree.c,v
retrieving revision 1.10
diff -u -r1.10 sgftree.c
--- sgf/sgftree.c       10 Sep 2002 20:06:02 -0000      1.10
+++ sgf/sgftree.c       12 Sep 2002 19:29:45 -0000
@@ -37,14 +37,51 @@
   SGFNode *savetree = tree->root;
 
   tree->root = readsgffile(infilename);
-  tree->lastnode = NULL;
   if (tree->root == NULL) {
     tree->root = savetree;
     return 0;
   }
+  tree->lastnode = NULL;
+  return 1;
+}
+
+
+/* Go back one node in the tree. If lastnode is NULL, go to the last
+   node (the one in main variant which has no children) */
+
+int
+sgftreeBack(SGFTree *tree)
+{
+  if (tree->lastnode) {
+    if (tree->lastnode->parent)
+      tree->lastnode = tree->lastnode->parent;
+    else
+      return 0;
+  }
+  else
+    while (sgftreeForward(tree));
   return 1;
 }
 
+
+/* Go forward one node in the tree. If lastnode is NULL, go to the
+   tree root */
+
+int
+sgftreeForward(SGFTree *tree)
+{
+  if (tree->lastnode) {
+    if (tree->lastnode->child)
+      tree->lastnode = tree->lastnode->child;
+    else
+      return 0;
+  }
+  else
+    tree->lastnode = tree->root;
+  return 1;
+}
+
+
 /* ================================================================ */
 /*                        High level functions                      */
 /* ================================================================ */
@@ -54,6 +91,8 @@
  * except if lastnode is NULL, then the current end of game is used.
  */
 
+/* FIXME: do we need node parameter here? it is never used. */
+
 SGFNode *
 sgftreeNodeCheck(SGFTree *tree, SGFNode *node)
 {
@@ -228,7 +267,7 @@
 
 
 /*
- * Start a new variant. Returns a pointer to the new node.
+ * Start a new variant.
  */
 
 void
@@ -240,13 +279,13 @@
 
 
 /*
- * Start a new variant as first child. Returns a pointer to the new node.
+ * Start a new variant as first child.
  */
 
 void
 sgftreeStartVariantFirst(SGFTree *tree)
 {
-  SGFNode *node = sgftreeNodeCheck(tree, node);
+  SGFNode *node = sgftreeNodeCheck(tree, NULL);
   tree->lastnode = sgfStartVariantFirst(node);
 }
 
Index: interface/play_gtp.c
===================================================================
RCS file: /cvsroot/gnugo/gnugo/interface/play_gtp.c,v
retrieving revision 1.87
diff -u -r1.87 play_gtp.c
--- interface/play_gtp.c        9 Sep 2002 21:20:11 -0000       1.87
+++ interface/play_gtp.c        12 Sep 2002 19:29:51 -0000
@@ -618,7 +618,7 @@
 {
   char filename[GTP_BUFSIZE];
   char untilstring[GTP_BUFSIZE];
-  SGFNode *sgf;
+  SGFTree sgftree;
   Gameinfo gameinfo;
   int nread;
   int color_to_move;
@@ -627,24 +627,24 @@
   if (nread < 1)
     return gtp_failure("missing filename");
   
-  if ((sgf = readsgffile(filename)) == NULL)
+  if (!sgftree_readfile(&sgftree, filename))
     return gtp_failure("cannot open or parse '%s'", filename);
 
   gameinfo_clear(&gameinfo, 19, 5.5); /* Probably unnecessary. */
-  gameinfo_load_sgfheader(&gameinfo, sgf);
+  gameinfo_load_sgfheader(&gameinfo, sgftree.root);
 
   if (nread == 1)
-    color_to_move = gameinfo_play_sgftree_rot(&gameinfo, sgf, NULL,
+    color_to_move = gameinfo_play_sgftree_rot(&gameinfo, &sgftree, NULL,
                                              gtp_orientation);
   else
-    color_to_move = gameinfo_play_sgftree_rot(&gameinfo, sgf, untilstring,
+    color_to_move = gameinfo_play_sgftree_rot(&gameinfo, &sgftree, untilstring,
                                               gtp_orientation);
 
   handicap = gameinfo.handicap;
   gtp_internal_set_boardsize(board_size);
   reset_engine();
 
-  sgfFreeNode(sgf);
+  sgfFreeNode(sgftree.root);
 
   gtp_start_response(GTP_SUCCESS);
   gtp_mprintf("%C", color_to_move);
Index: interface/play_gmp.c
===================================================================
RCS file: /cvsroot/gnugo/gnugo/interface/play_gmp.c,v
retrieving revision 1.11
diff -u -r1.11 play_gmp.c
--- interface/play_gmp.c        10 Sep 2002 20:06:02 -0000      1.11
+++ interface/play_gmp.c        12 Sep 2002 19:29:52 -0000
@@ -145,8 +145,7 @@
            break;
          }
          sgftreeAddComment(&sgftree, "undone");
-         /* FIXME: Add a function in sgftree.c to do this. */
-         sgftree.lastnode = sgftree.lastnode->parent;
+         sgftreeBack(&sgftree);
          to_move = OTHER_COLOR(to_move);
        }
        continue;
Index: interface/play_ascii.c
===================================================================
RCS file: /cvsroot/gnugo/gnugo/interface/play_ascii.c,v
retrieving revision 1.25
diff -u -r1.25 play_ascii.c
--- interface/play_ascii.c      10 Sep 2002 20:06:02 -0000      1.25
+++ interface/play_ascii.c      12 Sep 2002 19:29:55 -0000
@@ -47,7 +47,6 @@
 static int showdead = 0;
 static int emacs = 0;
 SGFTree sgftree;
-SGFNode *curnode = 0;
 static int last_move_i;      /* The position of the last move */
 static int last_move_j;      /* -""-                          */
 
@@ -60,7 +59,6 @@
 static void showcapture(char *line);
 static void showdefense(char *line);
 static void ascii_goto(Gameinfo *gameinfo, char *line);
-static int ascii2pos(char *line, int *i, int *j);
 
 /* If sgf game info is written can't reset parameters like handicap, etc. */
 static int sgf_initialized;
@@ -416,16 +414,16 @@
  */
 
 static void
-init_sgf(Gameinfo *ginfo, SGFNode *root)
+init_sgf(Gameinfo *ginfo)
 {
   if (sgf_initialized)
     return;
   sgf_initialized = 1;
 
-  sgf_write_header(root, 1, random_seed, komi, level, chinese_rules);
-  sgfOverwritePropertyInt(root, "HA", ginfo->handicap);
+  sgf_write_header(sgftree.root, 1, random_seed, komi, level, chinese_rules);
+  sgfOverwritePropertyInt(sgftree.root, "HA", ginfo->handicap);
   if (ginfo->handicap > 0)
-    gnugo_recordboard(root);
+    gnugo_recordboard(sgftree.root);
 }
 
 
@@ -439,7 +437,7 @@
   int i, j;
   int move_val;
 
-  init_sgf(gameinfo, sgftree.root);
+  init_sgf(gameinfo);
   
   /* Generate computer move. */
   move_val = gnugo_genmove(&i, &j, gameinfo->to_move);
@@ -459,8 +457,8 @@
     *passes = 0;
 
   gnugo_play_move(i, j, gameinfo->to_move);
-  sgffile_add_debuginfo(curnode, move_val);
-  curnode = sgfAddPlay(curnode, gameinfo->to_move, i, j);
+  sgffile_add_debuginfo(sgftree.lastnode, move_val);
+  sgftreeAddPlay(&sgftree, gameinfo->to_move, i, j);
   sgffile_output(&sgftree);
 
   gameinfo->to_move = OTHER_COLOR(gameinfo->to_move);
@@ -476,7 +474,7 @@
 {
   int i, j;
 
-  if (!ascii2pos(command, &i, &j)) {
+  if (!string_to_location(board_size, command, &i, &j)) {
     printf("\nInvalid move: %s\n", command);
     return;
   }
@@ -488,10 +486,10 @@
 
   *passes = 0;
   TRACE("\nyour move: %m\n\n", i, j);
-  init_sgf(gameinfo, sgftree.root);
+  init_sgf(gameinfo);
   gnugo_play_move(i, j, gameinfo->to_move);
-  sgffile_add_debuginfo(curnode, 0);
-  curnode = sgfAddPlay(curnode, gameinfo->to_move, i, j);
+  sgffile_add_debuginfo(sgftree.lastnode, 0);
+  sgftreeAddPlay(&sgftree, gameinfo->to_move, i, j);
   sgffile_output(&sgftree);
 
   last_move_i = i;
@@ -504,7 +502,7 @@
   if (force) {
     gameinfo->computer_player = OTHER_COLOR(gameinfo->computer_player);
     gameinfo->to_move = OTHER_COLOR(gameinfo->to_move);
-    sgfAddComment(curnode, "forced");
+    sgftreeAddComment(&sgftree, "forced");
     return;
   }
   gameinfo->to_move = OTHER_COLOR(gameinfo->to_move);
@@ -520,16 +518,16 @@
 do_pass(Gameinfo *gameinfo, int *passes, int force)
 {
   (*passes)++;
-  init_sgf(gameinfo, sgftree.root);
+  init_sgf(gameinfo);
   gnugo_play_move(-1, -1, gameinfo->to_move);
-  sgffile_add_debuginfo(curnode, 0);
-  curnode = sgfAddPlay(curnode, gameinfo->to_move, -1, -1);
+  sgffile_add_debuginfo(sgftree.lastnode, 0);
+  sgftreeAddPlay(&sgftree, gameinfo->to_move, -1, -1);
   sgffile_output(&sgftree);
 
   gameinfo->to_move = OTHER_COLOR(gameinfo->to_move);
   if (force) {
     gameinfo->computer_player = OTHER_COLOR(gameinfo->computer_player);
-    sgfAddComment(curnode, "forced");
+    sgftreeAddComment(&sgftree, "forced");
     return;
   }
   computer_move(gameinfo, passes);
@@ -569,9 +567,8 @@
     
     if (filename) {
       gameinfo_load_sgfheader(gameinfo, sgftree.root);
-      gameinfo->to_move = gameinfo_play_sgftree(gameinfo, sgftree.root, until);
+      gameinfo->to_move = gameinfo_play_sgftree(gameinfo, &sgftree, until);
       sgf_initialized = 1;
-      curnode = sgftreeNodeCheck(&sgftree, 0);
     }
     else {
       if (sgfGetIntProperty(sgftree.root, "SZ", &sz)) 
@@ -583,7 +580,6 @@
        gameinfo->to_move = WHITE;
       }
       sgf_initialized = 0;
-      curnode = sgftree.root;
     }
     
     printf("\nBeginning ASCII mode game.\n\n");
@@ -617,7 +613,7 @@
          sgftreeWriteResult(&sgftree,
                             gameinfo->to_move == WHITE ? -1000.0 : 1000.0,
                             1);
-         sgffile_output(&sgftree);
+          sgffile_output(&sgftree);
        case END:
        case EXIT:
        case QUIT:
@@ -793,33 +789,29 @@
        case UNDO:
        case CMD_BACK:
          if (gnugo_undo_move(1)) {
-           sgfAddComment(curnode, "undone");
-           curnode = curnode->parent;
+            sgftreeAddComment(&sgftree, "undone");
+           sgftreeBack(&sgftree);
            gameinfo->to_move = OTHER_COLOR(gameinfo->to_move);
          }
          else
            printf("\nCan't undo.\n");
          break;
        case CMD_FORWARD:
-         if (curnode->child) {
-           gameinfo->to_move = gnugo_play_sgfnode(curnode->child,
+         if (sgftreeForward(&sgftree))
+           gameinfo->to_move = gnugo_play_sgfnode(sgftree.lastnode,
                                                   gameinfo->to_move);
-           curnode = curnode->child;
-         }
          else
            printf("\nEnd of game tree.\n");
          break;
        case CMD_LAST:
-         while (curnode->child) {
-           gameinfo->to_move = gnugo_play_sgfnode(curnode->child,
+         while (sgftreeForward(&sgftree))
+           gameinfo->to_move = gnugo_play_sgfnode(sgftree.lastnode,
                                                   gameinfo->to_move);
-           curnode = curnode->child;
-         }
          break;
        case COMMENT:
          printf("\nEnter comment. Press ENTER when ready.\n");
          fgets(line, 80, stdin);
-         sgfAddComment(curnode, line);
+         sgftreeAddComment(&sgftree, line);
          break;
        case SCORE:
          showscore = !showscore;
@@ -873,7 +865,7 @@
            /* discard newline */
            tmpstring[strlen(tmpstring)-1] = 0;
            /* make sure we are saving proper handicap */
-           init_sgf(gameinfo, sgftree.root);
+           init_sgf(gameinfo);
            writesgf(sgftree.root, tmpstring);
            printf("You may resume the game");
            printf(" with -l %s --mode ascii\n", tmpstring);
@@ -895,9 +887,8 @@
             /* to avoid changing handicap etc. */
             sgf_initialized = 1;
             gameinfo_load_sgfheader(gameinfo, sgftree.root);
-            gameinfo_play_sgftree(gameinfo, sgftree.root, NULL);
+            gameinfo_play_sgftree(gameinfo, &sgftree, NULL);
            sgfOverwritePropertyInt(sgftree.root, "HA", gameinfo->handicap);
-           curnode = sgftreeNodeCheck(&sgftree, 0);
          }
          else
            printf("Please specify a filename\n");
@@ -941,7 +932,7 @@
        if (tmpstring) {
          /* discard newline */
          tmpstring[strlen(tmpstring)-1] = 0;
-          init_sgf(gameinfo, sgftree.root);
+          init_sgf(gameinfo);
          writesgf(sgftree.root, tmpstring);
        }
        else
@@ -1036,7 +1027,7 @@
       ascii_showboard();
     }
     else {
-      if (!ascii2pos(line, &i, &j) || BOARD(i, j) == EMPTY)
+      if (!string_to_location(board_size, line, &i, &j) || BOARD(i, j) == 
EMPTY)
        printf("\ninvalid!\n");
       else {
        int status = dragon_status(POS(i, j));
@@ -1055,7 +1046,7 @@
 {
   int i, j, x, y;
   if (line)
-    if (!ascii2pos(line, &i, &j) || BOARD(i, j) == EMPTY) {
+    if (!string_to_location(board_size, line, &i, &j) || BOARD(i, j) == EMPTY) 
{
       printf("\ninvalid point!\n");
       return;
     }
@@ -1071,7 +1062,7 @@
 {
   int i, j, x, y;
   if (line)
-    if (!ascii2pos(line, &i, &j) || BOARD(i, j) == EMPTY) {
+    if (!string_to_location(board_size, line, &i, &j) || BOARD(i, j) == EMPTY) 
{
       printf("\ninvalid point!\n");
       return;
     }
@@ -1090,50 +1081,18 @@
 static void
 ascii_goto(Gameinfo *gameinfo, char *line)
 {
-  int movenumber = 0;
+  char *movenumber = line;
+
   if (!line)
     return;
   if (!strncmp(line, "last", 4))
-    movenumber = 9999;
+    movenumber = "9999";
   else {
     if (!strncmp(line, "first", 4))
-      movenumber = 1;
-    else
-      sscanf(line, "%i", &movenumber);
+      movenumber = "1";
   }
-  printf("goto %i\n", movenumber);
-  curnode = sgftree.root;
-  gameinfo->to_move = gnugo_play_sgftree(curnode, &movenumber, &curnode);
-  return;
-}
-
-
-/* Convert a coordinate pair from ascii text to two integers.
- * FIXME: Check that this function is indeed equivalent to
- * string_to_location() and then replace it.
- */
-static int
-ascii2pos(char *line, int *i, int *j)
-{
-  int d;
-  char c;
-  if (sscanf(line, "%c%d", &c, &d) != 2)
-    return 0;
-
-  /* No 'I' in the coordinate system. */
-  if (tolower((int) c) == 'i')
-    return 0;
-  
-  *j = tolower((int) c) - 'a';
-  if (tolower((int) c) > 'i')
-    --*j;
-  
-  *i = board_size - d;
-
-  if (*i < 0 || *i >= board_size || *j < 0 || *j >= board_size)
-    return 0;
-  
-  return 1;
+  printf("goto %s\n", movenumber);
+  gameinfo_play_sgftree(gameinfo, &sgftree, movenumber);
 }
 
 
Index: interface/main.c
===================================================================
RCS file: /cvsroot/gnugo/gnugo/interface/main.c,v
retrieving revision 1.48
diff -u -r1.48 main.c
--- interface/main.c    10 Sep 2002 20:09:52 -0000      1.48
+++ interface/main.c    12 Sep 2002 19:29:58 -0000
@@ -874,8 +874,8 @@
       exit(EXIT_FAILURE);
     }
     
-    gameinfo_play_sgftree_rot(&gameinfo, sgftree.root,
-                             untilstring, orientation);
+    gameinfo_play_sgftree_rot(&gameinfo, &sgftree, untilstring,
+                             orientation);
   }
   else
   /* Initialize and empty sgf tree if there was no infile. */
Index: interface/debugboard/main.c
===================================================================
RCS file: /cvsroot/gnugo/gnugo/interface/debugboard/main.c,v
retrieving revision 1.8
diff -u -r1.8 main.c
--- interface/debugboard/main.c 7 Mar 2002 05:35:28 -0000       1.8
+++ interface/debugboard/main.c 12 Sep 2002 19:29:59 -0000
@@ -71,7 +71,7 @@
 
 
 Gameinfo  gameinfo;
-SGFNode  *sgf_root;
+SGFTree   sgftree;
 
 int       current_color = WHITE;
 
@@ -100,7 +100,7 @@
 
   /* Try to open the infile. */
   infilename = argv[1];
-  if ((sgf_root = readsgffile(infilename)) == NULL) {
+  if (!sgftree_readfile(&sgftree, infilename)) {
     fprintf(stderr, "Cannot open or parse '%s'\n", infilename);
     exit(1);
   }
@@ -118,7 +118,7 @@
   josekidb = 1;
   
   gameinfo_clear(&gameinfo, 19, 5.5);
-  next = gameinfo_play_sgftree(&gameinfo, sgf_root, until);
+  next = gameinfo_play_sgftree(&gameinfo, &sgftree, until);
 
 
   /* Check if there is enough screen space. */
Index: engine/interface.c
===================================================================
RCS file: /cvsroot/gnugo/gnugo/engine/interface.c,v
retrieving revision 1.28
diff -u -r1.28 interface.c
--- engine/interface.c  10 Sep 2002 20:06:01 -0000      1.28
+++ engine/interface.c  12 Sep 2002 19:30:00 -0000
@@ -477,7 +477,7 @@
  */
 
 int
-gameinfo_play_sgftree_rot(Gameinfo *gameinfo, SGFNode *head,
+gameinfo_play_sgftree_rot(Gameinfo *gameinfo, SGFTree *tree,
                          const char *untilstr, int orientation)
 {
   int bs, handicap;
@@ -488,15 +488,13 @@
   int until = 9999;
   int addstone = 0;          /* handicap stone detector */
   
-  SGFNode *node;
-  
-  if (!sgfGetFloatProperty(head, "KM", &komi)) {
+  if (!sgfGetFloatProperty(tree->root, "KM", &komi)) {
     if (gameinfo->handicap == 0)
       komi = 5.5;
     else
       komi = 0.5;
   }
-  if (!sgfGetIntProperty(head, "SZ", &bs))
+  if (!sgfGetIntProperty(tree->root, "SZ", &bs))
     bs = 19;
   gnugo_clear_board(bs);
   gnugo_set_komi(komi);
@@ -518,7 +516,7 @@
     }
   }
   
-  if (sgfGetIntProperty(head, "HA", &handicap) && handicap > 1) {
+  if (sgfGetIntProperty(tree->root, "HA", &handicap) && handicap > 1) {
     gameinfo->handicap = handicap;
     next = WHITE;
   }
@@ -529,11 +527,11 @@
    *
    * The sgf routines map AB[aa][bb][cc] into AB[aa]AB[bb]AB[cc]
    */
-  for (node = head; node; node = node->child) {
+  for (tree->lastnode = NULL; sgftreeForward(tree);) {
     SGFProperty *prop;
     int i, j;
       
-    for (prop = node->props; prop; prop = prop->next) {
+    for (prop = tree->lastnode->props; prop; prop = prop->next) {
       DEBUG(DEBUG_LOADSGF, "%c%c[%s]\n", 
            prop->name & 0xff, (prop->name >> 8), prop->value);
       switch (prop->name) {
@@ -561,7 +559,7 @@
        /* following really should not be needed for proper sgf file */
        if (movenum != 0 && !addstone) {
          gnugo_sethand(gameinfo->handicap, 0);
-         sgfOverwritePropertyInt(head, "HA", gameinfo->handicap);
+         sgfOverwritePropertyInt(tree->root, "HA", gameinfo->handicap);
        }
 
        /* Due to a bad comment in the SGF FF3 definition (in the
@@ -583,17 +581,21 @@
        /* following really should not be needed for proper sgf file */
        if (movenum != 0 && !addstone) {
          gnugo_sethand(gameinfo->handicap, 0);
-         sgfOverwritePropertyInt(head, "HA", gameinfo->handicap);
+         sgfOverwritePropertyInt(tree->root, "HA", gameinfo->handicap);
        }
 
        if (movenum == until - 1) {
          gameinfo->to_move = next;
+         /* go back so that variant will be added to the proper node */
+         sgftreeBack(tree);
          return next;
        }
              
        if (get_moveXY(prop, &i, &j, board_size))
          if (i == untilm && j == untiln) {
            gameinfo->to_move = next;
+            /* go back so that variant will be added to the proper node */
+           sgftreeBack(tree);
            return next;
          }
 
@@ -645,9 +647,9 @@
 /* Same as previous function, using standard orientation */
 
 int
-gameinfo_play_sgftree(Gameinfo *gameinfo, SGFNode *head, const char *untilstr)
+gameinfo_play_sgftree(Gameinfo *gameinfo, SGFTree *tree, const char *untilstr)
 {
-  return gameinfo_play_sgftree_rot(gameinfo, head, untilstr, 0);
+  return gameinfo_play_sgftree_rot(gameinfo, tree, untilstr, 0);
 }
 
 
Index: engine/gnugo.h
===================================================================
RCS file: /cvsroot/gnugo/gnugo/engine/gnugo.h,v
retrieving revision 1.65
diff -u -r1.65 gnugo.h
--- engine/gnugo.h      10 Sep 2002 20:09:52 -0000      1.65
+++ engine/gnugo.h      12 Sep 2002 19:30:01 -0000
@@ -170,9 +170,9 @@
 void gameinfo_print(Gameinfo *ginfo);
 void gameinfo_load_sgfheader(Gameinfo *gameinfo, SGFNode *head);
 void gameinfo_play_move(Gameinfo *ginfo, int i, int j, int color);
-int  gameinfo_play_sgftree_rot(Gameinfo *gameinfo, SGFNode *head,
+int  gameinfo_play_sgftree_rot(Gameinfo *gameinfo, SGFTree *tree,
                               const char *untilstr, int orientation);
-int  gameinfo_play_sgftree(Gameinfo *gameinfo, SGFNode *head,
+int  gameinfo_play_sgftree(Gameinfo *gameinfo, SGFTree *tree,
                           const char *untilstr);





reply via email to

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