The following patches apply to sgf2misc-2.7.1 available in
http://www.cwi.nl:80/~jansteen/sgf2misc/sgf2misc-2.7.1.tar.gz
With those patches, sgf2misc acts as a converter from SGF format
to the GO format (a variant of the Ishi format).

The patches include:
- d_screen.c: allow compilation with gcc
- Makefile: avoid curses (problems on Linux and MSDOS)
- sgf2misc.c: make SF the default output format
- d_sf.c: output the header required by Goscorer (it crashes without it)
- sgfread.c: accept W[] and B[] to mean pass (FF[4] standard)

Compile sgf2misc with -DSGF2GO=1 and rename the executable sgf2go.
To use it: sgf2go < file.sgf > file.go

An MSDOS executable compiled with gcc is available in
http://www.teaser.fr/~jlgailly/sgf2go.exe
A Linux executable is in http://www.teaser.fr/~jlgailly/sgf2go

Jean-loup Gailly
jloup@mail.dotcom.fr

*** d_screen.c~	Sun Aug 13 14:06:34 1995
--- d_screen.c	Sat Aug 23 11:08:16 1997
***************
*** 58,64 ****
  /* #[typedef:		*/
  
  typedef struct win_info {
!     void *	win_id;		/* Object representation on the screen	*/
      int		win_x;		/* X pos  of the object (approp. unit)	*/
      int		win_y;		/* Y pos  of the object (approp. unit)	*/
      int		win_w;		/* Width  of the object (approp. unit)	*/
--- 58,64 ----
  /* #[typedef:		*/
  
  typedef struct win_info {
!     WINDOW *	win_id;		/* Object representation on the screen	*/
      int		win_x;		/* X pos  of the object (approp. unit)	*/
      int		win_y;		/* Y pos  of the object (approp. unit)	*/
      int		win_w;		/* Width  of the object (approp. unit)	*/

*** Makefile~	Sat Aug 23 11:31:50 1997
--- Makefile	Sat Aug 23 11:30:37 1997
***************
*** 94,100 ****
  #	1. remove "d_screen.o" from the MODULES list
  #	2. comment out the line "LIB = -lcurses -ltermcap"
  #
! # NOCURSES=-DNOCURSES=1
  
  #
  # The C compiler to use. If you have gcc you might prefer to use it
--- 94,100 ----
  #	1. remove "d_screen.o" from the MODULES list
  #	2. comment out the line "LIB = -lcurses -ltermcap"
  #
! NOCURSES=-DNOCURSES=1
  
  #
  # The C compiler to use. If you have gcc you might prefer to use it
***************
*** 163,169 ****
  #########################################################################
  INC	= -I. ${XINC} -I/usr/include
  CFLAGS	= -DGOMACROS=\"${GOMACROS}\" -DGOPROLOG=\"${GOPROLOG}\" -DPBMBIN=\"${PBMBIN}\" -DPBMFNT=\"${SGFPPM}\" -DPBMSZ=${PBMSZ} ${INC} ${XCFLAGS} ${NONANSI} ${NOCURSES}
! LIB	= -lcurses -ltermcap
  SH	= /bin/sh
  
  GOWIDGET	= ${SGFLIB}/gowidget
--- 163,169 ----
  #########################################################################
  INC	= -I. ${XINC} -I/usr/include
  CFLAGS	= -DGOMACROS=\"${GOMACROS}\" -DGOPROLOG=\"${GOPROLOG}\" -DPBMBIN=\"${PBMBIN}\" -DPBMFNT=\"${SGFPPM}\" -DPBMSZ=${PBMSZ} ${INC} ${XCFLAGS} ${NONANSI} ${NOCURSES}
! # LIB	= -lcurses -ltermcap
  SH	= /bin/sh
  
  GOWIDGET	= ${SGFLIB}/gowidget
***************
*** 270,280 ****
  #
  SRC_TOT	= ${SRC_DOC} ${SRC_C} ${SRC_H} ${SRC_RUN} ${SRC_ETC} ${SRC_ST}
  
  MODULES	=	gogame.o	\
  		gorules.o	\
  		sgf2misc.o	\
  		d_ascii.o	\
- 		d_screen.o	\
  		d_tex.o		\
  		d_pstex.o	\
  		d_sgf.o		\
--- 270,281 ----
  #
  SRC_TOT	= ${SRC_DOC} ${SRC_C} ${SRC_H} ${SRC_RUN} ${SRC_ETC} ${SRC_ST}
  
+ #		d_screen.o	\
+ 
  MODULES	=	gogame.o	\
  		gorules.o	\
  		sgf2misc.o	\
  		d_ascii.o	\
  		d_tex.o		\
  		d_pstex.o	\
  		d_sgf.o		\
*** sgf2misc.c~	Sun Aug 13 15:34:44 1995
--- sgf2misc.c	Sat Aug 23 14:07:14 1997
***************
*** 149,155 ****
--- 149,159 ----
  
  char *	      program   = "sgf2misc";	/* Program name			*/
  int	      file_fmt  = FMT_SGF;	/* Input format (SGF, LIB, STD)	*/
+ #ifdef SGF2GO
+ int	      prn_dev   = DEVICE_SF;
+ #else
  int	      prn_dev   = DEVICE_PSTEX;	/* PSTEX,TEX,ASCII,SCREEN,DB,NUL*/
+ #endif
  int	      paper_size= PAPER_DEFAULT;/* PAPER_{DEFAULT,LETTER,A4WIDE,A4} */
  FILE *	      fw;			/* Output channel for text	*/
  int	      verbose   = 0;		/* Verbose mode			*/
*** d_sf.c~	Sun Aug 13 14:06:46 1995
--- d_sf.c	Sat Aug 23 14:03:30 1997
***************
*** 79,84 ****
--- 79,93 ----
      CHAIN  *c;
      char   *indent = (g->gm_parent) ? "\t" : "";
  
+ #ifdef SGF2GO
+     fprintf(fw, "EVENT\nBOARDSIZE 19\nCOM\n");
+     fprintf(fw, "Black _%s_ (%s), White _%s_ (%s)\nENDCOM\n",
+ 			(g->gm_pb) ? g->gm_pb : "",
+ 			(g->gm_br) ? g->gm_br : "",
+ 			(g->gm_pw) ? g->gm_pw : "",
+ 			(g->gm_wr) ? g->gm_wr : "");
+ #endif
+ 
      for (m = g->gm_move; m; m = m->mv_next) {
  
  	switch (m->mv_place) {
*** sgfread.c~	Mon Oct 30 00:26:07 1995
--- sgfread.c	Sat Aug 23 14:31:06 1997
***************
*** 174,180 ****
      int		j	= *(line+1) - 'a';
      PLACE	place	= i + (j * g->gm_sz);
  
!     if (i == 't' - 'a' && j == 't' - 'a') pass_store(g, AUTO_NR, BLACK);
      else				  move_store(g, AUTO_NR, BLACK, place);
  }
  
--- 174,181 ----
      int		j	= *(line+1) - 'a';
      PLACE	place	= i + (j * g->gm_sz);
  
!     if (*line == '\0' || (i == 't' - 'a' && j == 't' - 'a'))
!        pass_store(g, AUTO_NR, BLACK);
      else				  move_store(g, AUTO_NR, BLACK, place);
  }
  
***************
*** 190,196 ****
      int		j	= *(line+1) - 'a';
      PLACE	place	= i + (j * g->gm_sz);
  
!     if (i == 't' - 'a' && j == 't' - 'a') pass_store(g, AUTO_NR, WHITE);
      else				  move_store(g, AUTO_NR, WHITE, place);
  }
  
--- 191,198 ----
      int		j	= *(line+1) - 'a';
      PLACE	place	= i + (j * g->gm_sz);
  
!     if (*line == '\0' || (i == 't' - 'a' && j == 't' - 'a'))
!        pass_store(g, AUTO_NR, WHITE);
      else				  move_store(g, AUTO_NR, WHITE, place);
  }
  
