home *** CD-ROM | disk | FTP | other *** search
/ Giga Games 1 / Giga Games.iso / net / go / prog / sgf2mi13.taz / sgf2mi13 / game2asc.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-02-27  |  3.2 KB  |  125 lines

  1. /* #[info:            */
  2. /************************************************************************
  3.  *                                    *
  4.  *      ####     #    #    # #####           #     ####   ###        *
  5.  *     #        # #   ##  ## #      ###     # #   #      #           *
  6.  *     #       #   #  # ## # #     #   #   #   #  #     #            *
  7.  *     #  ##  ####### #    # ###      #   #######  ###  #            *
  8.  *     #    # #     # #    # #       #    #     #     # #            *
  9.  *     #    # #     # #    # #      #     #     #     #  #           *
  10.  *      ####  #     # #    # ##### ###### #     # ####    ###        *
  11.  *                                    *
  12.  *                Jan van der Steen                *
  13.  *                                    *
  14.  *          Centre for Mathematics and Computer Science        *
  15.  *              Amsterdam, the Netherlands            *
  16.  *                                    *
  17.  *----------------------------------------------------------------------*
  18.  * File      : game2asc.c                         *
  19.  * Purpose : Emit a Go Game Using ASCII characters            *
  20.  * Version : 1.4                         *
  21.  * Modified: 2/14/93 13:39:05                        *
  22.  * Author  : Jan van der Steen (jansteen@cwi.nl)             *
  23.  ************************************************************************/
  24. /* #]info:            */ 
  25. /* #[include:            */
  26.  
  27. #include <stdio.h>
  28. #include <stdlib.h>
  29. #include <string.h>
  30. #include "gogame.h"
  31. #include "game2asc.h"
  32.  
  33. /* #]include:            */ 
  34. /* #[define:            */
  35.  
  36. #define    COORDINATES    "A B C D E F G H J K L M N O P Q R S T"
  37.  
  38. /* #]define:            */ 
  39. /* #[prototype:            */
  40.  
  41. #ifdef __STDC__
  42. #    define    PROTO(s) s
  43. #else
  44. #    define    PROTO(s) ()
  45. #endif
  46.  
  47. static void    ascii_chain    PROTO((GOGAME *gogame, char *prefix));
  48.  
  49. #undef PROTO
  50.  
  51. /* #]prototype:            */ 
  52.  
  53. /* #[ascii_position:        */
  54.  
  55. void
  56. ascii_position(gogame, title, prefix)
  57. /*
  58.  * Print the final position
  59.  */
  60. GOGAME *gogame;
  61. char   *title;
  62. char   *prefix;
  63. {
  64.     PLACE p;
  65.     int   n = (2*gogame->gm_size - (int)strlen(title))/2 + 3;
  66.  
  67.     fprintf(stdout, "%s\n", prefix);
  68.     fprintf(stdout, "%s   %s\n", prefix, COORDINATES);
  69.     for (p = 0; p < gogame->gm_size*gogame->gm_size; p++) {
  70.     GONODE *node = NODE(gogame,p);
  71.  
  72.     if (p % gogame->gm_size == 0) {
  73.         fprintf(stdout, "%s%2d ",
  74.             prefix,
  75.             gogame->gm_size - NODE2J(gogame, node));
  76.     }
  77.     if (node->gn_stone == (GOMOVE *) 0) putc('.', stdout);
  78.     else
  79.     switch(node->gn_stone->mv_side) {
  80.         case BLACK    : putc('@', stdout); break;
  81.         case WHITE    : putc('O', stdout); break;
  82.         default    : putc('?', stdout); break;
  83.     }
  84.     putc(' ', stdout);
  85.     if ((p+1) % gogame->gm_size == 0)
  86.         fprintf(stdout, "%2d\n", gogame->gm_size - NODE2J(gogame, node));
  87.     }
  88.     fprintf(stdout, "%s   %s\n", prefix, COORDINATES);
  89.  
  90.     /*
  91.      * Print the title (centered below the Goban)
  92.      */
  93.     fprintf(stdout, "%s\n", prefix);
  94.     fprintf(stdout, "%s"  , prefix); while (n-- > 0) putc(' ', stdout);
  95.     fprintf(stdout, "%s\n", title );
  96.     fprintf(stdout, "%s\n", prefix);
  97. }
  98.  
  99. /* #]ascii_position:        */ 
  100. /* #[game2ascii:        */
  101.  
  102. void
  103. game2ascii(gogame)
  104. GOGAME *gogame;
  105. {
  106.     char  title[256];
  107.  
  108.     /*
  109.      * Construct title from the name of the players
  110.      */
  111.     sprintf(title,
  112.         "%s (%s) versus %s (%s)",
  113.         (gogame->gm_black) ? gogame->gm_black : "NN",
  114.         (gogame->gm_brank) ? gogame->gm_brank : "NR",
  115.         (gogame->gm_white) ? gogame->gm_white : "NN",
  116.         (gogame->gm_wrank) ? gogame->gm_wrank : "NR");
  117.  
  118.     /*
  119.      * Print the final position
  120.      */
  121.     ascii_position(gogame, title, "%\t");
  122. }
  123.  
  124. /* #]game2ascii:        */ 
  125.