[comp.sources.games] v11i067: igo - Internet Go V7.0, Part02/02

billr@saab.CNA.TEK.COM (Bill Randle) (11/20/90)

Submitted-by: Adrian Mariano <theorem@blake.u.washington.edu>
Posting-number: Volume 11, Issue 67
Archive-name: igo/Part02
Environment: BSD Unix, INET sockets


#! /bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of archive 2 (of 2)."
# Contents:  backup.c changes.c chkmve.c curse.c del.c dohand.c
#   doloop.c exit.c fill.c go.c handicap.c help.c init.c initboard.c
#   kill.c life.c loop.c looputil.c mesg.c movecur.c moveto.c nomove.c
#   plt.c printboard.c putpiece.c score.c setboard.c status.c
#   std.disclaimer strength.c tally.c traps.c util.c var.c
# Wrapped by billr@saab on Fri Nov 16 10:44:33 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'backup.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'backup.c'\"
else
echo shar: Extracting \"'backup.c'\" \(1386 characters\)
sed "s/^X//" >'backup.c' <<'END_OF_FILE'
X#include "std.disclaimer"
X#include "go.h"
X
Xint     ohama[2] = {
X    0, 0
X};
Xstatic int  ocur;
Xstatic  BOARD lastboard;
Xint     lhama[2] = {
X    0, 0
X};
X
X
Xsaveboard () {
X    int     i,
X            j;
X    ocur = curplr;
X    ohama[0] = hama[0];
X    ohama[1] = hama[1];
X
X    for (i = 0; i < MAXX; i++)
X	for (j = 0; j < MAXY; j++)
X	    backup.d[i][j] = board.d[i][j];
X}
X
Xsaveboard0 () {
X    int     i,
X            j;
X    for (i = 0; i < MAXX; i++)
X	for (j = 0; j < MAXY; j++)
X	    backup.d[i][j] = lastboard.d[i][j];
X}
X
Xsavelast () {
X    int     i,
X            j;
X    lhama[0] = hama[0];
X    lhama[1] = hama[1];
X    for (i = 0; i < MAXX; i++)
X	for (j = 0; j < MAXY; j++)
X	    lastboard.d[i][j] = board.d[i][j];
X}
X
Xrestlast () {
X    int     i,
X            j;
X    hama[0] = lhama[0];
X    hama[1] = lhama[1];
X    for (i = 0; i < MAXX; i++)
X	for (j = 0; j < MAXY; j++) {
X	    if (board.d[i][j] != lastboard.d[i][j]) {
X		Plt (&lastboard, i, j);
X	    }
X	    board.d[i][j] = lastboard.d[i][j];
X	}
X}
X
Xrestboard () {
X    int     i,
X            j;
X    hama[0] = ohama[0];
X    hama[1] = ohama[1];
X    curplr = ocur;
X    for (i = 0; i < MAXX; i++)
X	for (j = 0; j < MAXY; j++)
X	    board.d[i][j] = backup.d[i][j];
X}
X
Xint     compboard () {
X    int     i,
X            j;
X    for (i = 0; i < MAXX; i++)
X	for (j = 0; j < MAXY; j++)
X	    if (board.d[i][j] != backup.d[i][j])
X		return (-1);
X    return (0);
X}
END_OF_FILE
if test 1386 -ne `wc -c <'backup.c'`; then
    echo shar: \"'backup.c'\" unpacked with wrong size!
fi
# end of 'backup.c'
fi
if test -f 'changes.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'changes.c'\"
else
echo shar: Extracting \"'changes.c'\" \(819 characters\)
sed "s/^X//" >'changes.c' <<'END_OF_FILE'
X#include "std.disclaimer"
X
Xchanges () {
X    printf ("\
X----------------------------------------------------------------------\n\
X\n\
X  			        %s\n\
X		             By Greg Hale\n\
X                    Enhancements by Adrian Mariano\n\
X\n\
XWelcome to the oriental game of Go.  If you do not know how to play,\n\
XI recommend that you read the documentation or find someone who knows\n\
Xhow to play.\n\
X\n\
XThis program was developed at the Experimental Computing Facility at the\n\
XUniversity of California, Berkeley, by Greg Hale and enhanced by Adrian\n\
XMariano at the University of Washington.  Thanks to all the\n\
Xother members for their input, support, and test playing.\n\
X\n\
X----------------------------------------------------------------------\n \
X[Hit return to continue]\n\n",VERSION);
X	    getchar ();
X}
END_OF_FILE
if test 819 -ne `wc -c <'changes.c'`; then
    echo shar: \"'changes.c'\" unpacked with wrong size!
fi
# end of 'changes.c'
fi
if test -f 'chkmve.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'chkmve.c'\"
else
echo shar: Extracting \"'chkmve.c'\" \(1165 characters\)
sed "s/^X//" >'chkmve.c' <<'END_OF_FILE'
X#include "std.disclaimer"
X#include "go.h"
X
Xchkmve (c)
Xchar    c;
X{
X    switch (c) {
X    WHEN '4': 
X	case 'h': 
X	    movecur (-1, 0);
X	    return (1);
X    WHEN '2': 
X	case 'j': 
X	    movecur (0, 1);
X	    return (1);
X    WHEN '8': 
X	case 'k': 
X	    movecur (0, -1);
X	    return (1);
X    WHEN '6': 
X	case 'l': 
X	    movecur (1, 0);
X	    return (1);
X    WHEN '7': 
X	case 'y': 
X	    movecur (-1, -1);
X	    return (1);
X    WHEN '9': 
X	case 'u': 
X	    movecur (1, -1);
X	    return (1);
X    WHEN '1': 
X	case 'b': 
X	    movecur (-1, 1);
X	    return (1);
X    WHEN '3': 
X	case 'n': 
X	    movecur (1, 1);
X	    return (1);
X    WHEN 'H': 
X	    movecur (-FASTMOVE, 0);
X	    return (1);
X    WHEN 'J': 
X	    movecur (0, FASTMOVE);
X	    return (1);
X    WHEN 'K': 
X	    movecur (0, -FASTMOVE);
X	    return (1);
X    WHEN 'L': 
X	    movecur (FASTMOVE, 0);
X	    return (1);
X    WHEN 'Y': 
X	    movecur (-FASTMOVE, -FASTMOVE);
X	    return (1);
X    WHEN 'U': 
X	    movecur (FASTMOVE, -FASTMOVE);
X	    return (1);
X    WHEN 'B': 
X	    movecur (-FASTMOVE, FASTMOVE);
X	    return (1);
X    WHEN 'N': 
X	    movecur (FASTMOVE, FASTMOVE);
X	    return (1);
X    OTHERWISE: 
X	    return (0);
X    }
X}
END_OF_FILE
if test 1165 -ne `wc -c <'chkmve.c'`; then
    echo shar: \"'chkmve.c'\" unpacked with wrong size!
fi
# end of 'chkmve.c'
fi
if test -f 'curse.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'curse.c'\"
else
echo shar: Extracting \"'curse.c'\" \(1210 characters\)
sed "s/^X//" >'curse.c' <<'END_OF_FILE'
X#include "std.disclaimer"
X#include "go.h"
X
X
Xint     curpos = 0;
X#define OFFX (2*MAXX+2)
X#define MAXL 23
X
Xconnectmes () {
X    extern char *myname,
X                myhostname[];
X    mvaddstr (0, 0, "Waiting for other player to type  'go user@host.net' ");
X    refresh ();
X}
X
Xdoneconnectmes () {
X    clear ();
X    refresh ();
X}
X
XCLEAR () {
X    clear ();
X    refresh ();
X}
X
XDoQuit () {
X    char    c;
X    homemes ();
X    addmes ("- Opponent wants to score and quit.   Do you accept? (y/n)");
X    Beep ();
X    do
X	c = GetAKey0 ();
X    while (c != 'y' && c != 'n');
X    if (c == 'y') {
X	SEND (MACCEPT);
X	Score ();
X    }
X    else {
X	dodecline ();
X	SEND (MDECLINE);
X    }
X    move (0, 0);
X    clrtoeol ();
X    refresh ();
X}
X
X
X#define mesgy 1
X#define mesgy2 5
X#define mesgx 42
X
Xhomemes () {
X    int     y;
X    for (y = mesgy; y < mesgy2; y++) {
X	move (y, mesgx);
X	clrtoeol ();
X    }
X}
X
Xaddmes (mes)
Xchar   *mes;
X{
X    do {
X	move (curpos + mesgy, mesgx);
X	printw ("%.35s", mes);
X	curpos = (curpos + 1) % (mesgy2 - mesgy + 1);
X	move (curpos + mesgy, mesgx);
X	clrtoeol ();
X	if (strlen (mes) <= 35)
X	    break;
X	else
X	    mes += 35;
X    }
X    while (1);
X    refresh ();
X}
X
Xbeginline () {
X    move (curpos + mesgy, OFFX);
X}
END_OF_FILE
if test 1210 -ne `wc -c <'curse.c'`; then
    echo shar: \"'curse.c'\" unpacked with wrong size!
fi
# end of 'curse.c'
fi
if test -f 'del.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'del.c'\"
else
echo shar: Extracting \"'del.c'\" \(137 characters\)
sed "s/^X//" >'del.c' <<'END_OF_FILE'
X#include "std.disclaimer"
X#include "go.h"
X
Xdeletes (x, y)
Xint     x,
X        y;
X{
X    InitBoard (&marks);
X    killit (x, y, b (x, y));
X}
END_OF_FILE
if test 137 -ne `wc -c <'del.c'`; then
    echo shar: \"'del.c'\" unpacked with wrong size!
fi
# end of 'del.c'
fi
if test -f 'dohand.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'dohand.c'\"
else
echo shar: Extracting \"'dohand.c'\" \(460 characters\)
sed "s/^X//" >'dohand.c' <<'END_OF_FILE'
X#include "std.disclaimer"
X#include "go.h"
X
XDoHand (x, y, c)
Xint     x,
X        y,
X        c;
X{
X
X    sethand (x, y, (b (x, y) == c + 1 ? 0 : c + 1));
X    printscore ();
X}
X
Xsethand (x, y, v)
Xint     x,
X        y,
X        v;
X{
Xextern int handicaps;
X    if (b (x, y) != v) {
Xif (AreWe(HANDICAP)) {
X    if (v) handicaps++;
X    else handicaps--;
X    }
X	b (x, y) = v;
X	dolog (x, y, v);
X	Plt (&board, x, y);
X	SEND (MHANDICAP);
X	SendCoord (x, y);
X	sendint (v);
X    }
X}
END_OF_FILE
if test 460 -ne `wc -c <'dohand.c'`; then
    echo shar: \"'dohand.c'\" unpacked with wrong size!
fi
# end of 'dohand.c'
fi
if test -f 'doloop.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'doloop.c'\"
else
echo shar: Extracting \"'doloop.c'\" \(2071 characters\)
sed "s/^X//" >'doloop.c' <<'END_OF_FILE'
X#include "std.disclaimer"
X#include "go.h"
X
Xextern int  mesflg,
X            loadflg,
X            inverse;
X
X
XDoLoop () {
X    char    c;
X    c = GetAKey0 ();
X    if (mesflg)
X	domesg (c);
X    else
X	if ((c == 'e') || (!chkmve (c) && !disable)) {
X	    switch (c) {
X	    WHEN REDRAW: 
X		    DoRedraw ();
X#ifdef EVILCODE
X	    WHEN 'e': 
X		    SetStat (EXIT);
X		    SEND (MEXIT);
X#endif
X
X	    WHEN 'V': 
X		    if (inverse) {
X			for (c = 0; c < 6; c++)
X			    pieces[c] -= 128;
X			inverse = 0;
X		    }
X		    else {
X			for (c = 0; c < 6; c++)
X			    pieces[c] += 128;
X			inverse = 128;
X		    }
X		    DoRedraw ();
X	    WHEN 'S': 
X		    dosave ();
X	    WHEN '#': 
X		    doload ();
X	    WHEN 'q': 
X		    if (AreWe (SCORE)) {
X			SEND (MQUIT);
X			disable = 1;
X		    }
X	    WHEN 't': 
X		    if (AreWe (SCORE))
X			dotally ();
X
X	    WHEN 'c': 
X		    if (AreWe (SCORE)) {
X			docancel ();
X			SEND (MCANCEL);
X		    }
X
X	    WHEN 'C': 
X		    if (verify ("Clear the board (y/n)?")) {
X			SEND (MCLEAR);
X			doclear ();
X		    }
X
X	    WHEN 'm': 
X		    mesflg++;
X
X	    WHEN 'R': 
X		    if (verify ("Resign (y/n)?")) {
X			SEND (MRESIGN);
X			doresign (true);
X		    }
X
X	    WHEN 's': 
X		    if (AreWe (HANDICAP)) {
X			SEND (MSWITCH);
X			doswitch ();
X		    }
X		    else
X			if (AreWe (PLAY)) {
X			    SEND (MSCORE);
X			    doscore ();
X			}
X
X	    WHEN '/': 
X		    if (AreWe (PLAY)) {
X			ShowLast ();
X		    }
X		    else
X			Beep ();
X	    WHEN 'p': 
X		    if (AreWe (PLAY) && myturn) {
X			curplr = !curplr;
X			SEND (MPASS);
X		    }
X		    else
X			if (AreWe (HANDICAP)) {
X			    SEND (MPLAY);
X			    doplay ();
X			    printscore ();
X			}
X	    WHEN '?': 
X		    help ();
X		    PrintBoard (&board);
X
X	    WHEN 'z': 
X		    if (AreWe(PLAY)) DoHand (cx, cy, 0);
X	    WHEN 'x': 
X		    if (AreWe(PLAY)) DoHand (cx, cy, 1);
X
X	    WHEN ' ': 
X		case '0': 
X		    if (AreWe (HANDICAP))
X			sethand (cx, cy, !b (cx, cy));
X		    else
X			if (AreWe (SCORE))
X			    doscorehit (cx, cy);
X			else
X			    if (AreWe (PLAY) && myturn)
X				putpiece (cx, cy, curplr, true, true);
X		    printscore ();
X	    OTHERWISE: 
X		    ;
X	    }
X	}
X}
END_OF_FILE
if test 2071 -ne `wc -c <'doloop.c'`; then
    echo shar: \"'doloop.c'\" unpacked with wrong size!
fi
# end of 'doloop.c'
fi
if test -f 'exit.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'exit.c'\"
else
echo shar: Extracting \"'exit.c'\" \(118 characters\)
sed "s/^X//" >'exit.c' <<'END_OF_FILE'
X#include "std.disclaimer"
X#include "go.h"
XExit () {
X    unsetmode ();
X    endwin ();
X    closelog ();
X    exit (0);
X}
END_OF_FILE
if test 118 -ne `wc -c <'exit.c'`; then
    echo shar: \"'exit.c'\" unpacked with wrong size!
fi
# end of 'exit.c'
fi
if test -f 'fill.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'fill.c'\"
else
echo shar: Extracting \"'fill.c'\" \(412 characters\)
sed "s/^X//" >'fill.c' <<'END_OF_FILE'
X#include "std.disclaimer"
X#include "go.h"
X
Xstatic int  fillwith;
X
Xfill (x, y, type)
Xint     x,
X        y,
X        type;
X{
X    fillwith = type;
X    InitBoard (&marks);
X    fill0 (x, y);
X}
X
Xfill0 (x, y)
Xint     x,
X        y;
X{
X    if (ir (x, y) and b (x, y) == NONE and m (x, y) == NONE) {
X	m (x, y) = MARK;
X	b (x, y) = fillwith;
X	fill0 (x - 1, y);
X	fill0 (x + 1, y);
X	fill0 (x, y - 1);
X	fill0 (x, y + 1);
X    }
X}
END_OF_FILE
if test 412 -ne `wc -c <'fill.c'`; then
    echo shar: \"'fill.c'\" unpacked with wrong size!
fi
# end of 'fill.c'
fi
if test -f 'go.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'go.c'\"
else
echo shar: Extracting \"'go.c'\" \(233 characters\)
sed "s/^X//" >'go.c' <<'END_OF_FILE'
X#include "std.disclaimer"
X#include "go.h"
X
Xmain (argc, argv, envp)
Xint     argc;
Xchar  **argv,
X      **envp;
X{
X    if (argc <= 1)
X	helpstart (argv);
X    parseline (argc, argv);
X
X    sockmask[0] = 1;
X
X
X    main0 (argc, argv, envp);
X}
END_OF_FILE
if test 233 -ne `wc -c <'go.c'`; then
    echo shar: \"'go.c'\" unpacked with wrong size!
fi
# end of 'go.c'
fi
if test -f 'handicap.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'handicap.c'\"
else
echo shar: Extracting \"'handicap.c'\" \(1445 characters\)
sed "s/^X//" >'handicap.c' <<'END_OF_FILE'
X#include "std.disclaimer"
X#include "go.h"
X
X#define MAXHANDICAPS 9
X
Xhcap(x,y,log)
Xint x,y,log;
X{
X   extern FILE *logfile;
X  cx = x;
X  cy = y;
X  Handicap(!b(x,y));
X  if (log) fprintf(logfile,"[%c%c]",x+'a',y+'a');
X}
X
Xsethandi()
X{
X	extern int handicaps,handin;
X        int savelog;
X	extern int logflg;
X	extern FILE *logfile;
X
X	int h;
X	h = handicaps;
X	if (h>MAXHANDICAPS) h=MAXHANDICAPS;
X	SetStat(HANDICAP);
X	if (h<2) return;
X	if (savelog=logflg) {
X	  logflg=0;
X	  fprintf(logfile,"AddBlack");
X	}
X	switch (h) {
X	case 5:
X	  hcap(MAXX/2,MAXY/2,savelog);
X	case 4:
X	  hcap(handin,MAXY-1-handin,savelog);	  
X	case 3:
X	  hcap(MAXX-1-handin,handin,savelog);
X	case 2:
X	  hcap(MAXX-1-handin,MAXY-1-handin,savelog);
X	  hcap(handin,handin,savelog);
X	  break;
X	case 7:
X 	  hcap(MAXX/2,MAXY/2,savelog);
X	case 6:
X	  hcap(handin,handin,savelog);
X	  hcap(MAXX-1-handin,MAXY-1-handin,savelog);
X	  hcap(MAXX-1-handin,handin,savelog);
X	  hcap(handin,MAXY-1-handin,savelog);
X	  hcap(handin,MAXY/2,savelog);
X	  hcap(MAXX-1-handin,MAXY/2,savelog);
X	  break;
X	case 9:
X	  hcap(MAXX/2,MAXY/2,savelog);
X	case 8:
X	  hcap(handin,handin,savelog);
X	  hcap(MAXX-1-handin,MAXY-1-handin,savelog);
X	  hcap(MAXX-1-handin,handin,savelog);
X	  hcap(handin,MAXY-1-handin,savelog);
X	  hcap(handin,MAXY/2,savelog);
X	  hcap(MAXX-1-handin,MAXY/2,savelog);
X	  hcap(MAXX/2,handin,savelog);
X	  hcap(MAXX/2,MAXY-1-handin,savelog);
X	  break;
X	}
X	if (logflg=savelog) fprintf(logfile,"\n");
X
X}
X
X
X
X
X
END_OF_FILE
if test 1445 -ne `wc -c <'handicap.c'`; then
    echo shar: \"'handicap.c'\" unpacked with wrong size!
fi
# end of 'handicap.c'
fi
if test -f 'help.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'help.c'\"
else
echo shar: Extracting \"'help.c'\" \(1253 characters\)
sed "s/^X//" >'help.c' <<'END_OF_FILE'
X#include "std.disclaimer"
X#include "go.h"
X
X#define FD_INPUT 0
X
Xstatic char c;
X
Xhelp()
X{
X	clear();
X	refresh();
X	printf("\n\
X-- %s: by Greg Hale --\n\
X[12346789hjklyubnHJKLYUBN]: cursor movement.\n\
X<space>,[0]:select current point. (put/remove a stone or structure)\n\
X[p]:        start play/pass your turn.\n\
X[q]:        quit and print score. (CHOOSE AFTER SCORING)\n\
X[R]:        resign and give the win to the other player.\n\
X[m]:        send a message to the other player.\n\
X            press control-D exit.\n\
X[s]:        switch which player you are (black/white) in handicap mode,\n\
X            or turn on scoring mode when playing.\n\
X[t]:        tally (show how territory is defined in scoring mode)\n\
X[c]:        cancel scoring mode and restore game.\n\
X[C]:        clear the board.\n\
X[^c]:       leave the game.\n\
X[^l]:       redraw the screen.\n\
X[/]:        show the last move.\n\
X[?]:        help.\n\
X[V]:        toggle inverse <-> normal video.\n\
X[#]:        load a saved game.\n\
X[S]:        save the current board, turn, and score.\n\
X[z][x]:     set and unset moves for demonstrations.\n\
X\n\
X<hit any key to continue>",VERSION);
X	
X		refresh();
X		GetAKey0();
X		clear();
X	}
X	
X	
X	longhelp()
X	{
X		system(HELP_CMD);
X		exit(0);
X	}
X	
END_OF_FILE
if test 1253 -ne `wc -c <'help.c'`; then
    echo shar: \"'help.c'\" unpacked with wrong size!
fi
# end of 'help.c'
fi
if test -f 'init.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'init.c'\"
else
echo shar: Extracting \"'init.c'\" \(517 characters\)
sed "s/^X//" >'init.c' <<'END_OF_FILE'
X#include "std.disclaimer"
X#include <signal.h>
X#include "go.h"
XInit () {
X    extern int  tstp ();
X    int     max,
X            myts_tp (), myts_cont ();
X
X    MAXX = dimensions;
X    MAXY = dimensions;
X
X    initscr ();
X/*    signal (SIGTSTP, myts_tp);
X    signal (SIGCONT, myts_cont);*/
X    setmode ();
X
X    clear ();
X    refresh ();
X    InitBoard (&board);
X    SetStat (HANDICAP);
X}
X
Xsetmode () {
X    /* cbreak(); */
X    noecho ();
X    crmode ();
X}
X
Xunsetmode () {
X    /* nocbreak(); */
X    echo ();
X    nocrmode ();
X}
END_OF_FILE
if test 517 -ne `wc -c <'init.c'`; then
    echo shar: \"'init.c'\" unpacked with wrong size!
fi
# end of 'init.c'
fi
if test -f 'initboard.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'initboard.c'\"
else
echo shar: Extracting \"'initboard.c'\" \(189 characters\)
sed "s/^X//" >'initboard.c' <<'END_OF_FILE'
X#include "std.disclaimer"
X#include "go.h"
XInitBoard (br)
XBOARD * br;
X{
X    int     x,
X            y;
X    for (y = 0; y < MAXY; y++)
X	for (x = 0; x < MAXX; x++)
X	    br -> d[x][y] = NONE;
X}
END_OF_FILE
if test 189 -ne `wc -c <'initboard.c'`; then
    echo shar: \"'initboard.c'\" unpacked with wrong size!
fi
# end of 'initboard.c'
fi
if test -f 'kill.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'kill.c'\"
else
echo shar: Extracting \"'kill.c'\" \(620 characters\)
sed "s/^X//" >'kill.c' <<'END_OF_FILE'
X#include "std.disclaimer"
X#include "go.h"
X
X
XKill (x, y, type)
Xint     x,
X        y,
X        type;
X{
X    int     t;
X    InitBoard (&marks);
X    t = !(type - 1) + 1;
X    if (!IsSafe (x - 1, y))
X	killit (x - 1, y, t);
X    if (!IsSafe (x + 1, y))
X	killit (x + 1, y, t);
X    if (!IsSafe (x, y - 1))
X	killit (x, y - 1, t);
X    if (!IsSafe (x, y + 1))
X	killit (x, y + 1, t);
X}
X
X
Xkillit (x, y, t)
Xint     x,
X        y,
X        t;
X{
X    if (ir (x, y) && b (x, y) == t && t != NONE) {
X	setboard (x, y, NONE);
X	Plt (&board, x, y);
X	killit (x - 1, y, t);
X	killit (x + 1, y, t);
X	killit (x, y - 1, t);
X	killit (x, y + 1, t);
X    }
X}
END_OF_FILE
if test 620 -ne `wc -c <'kill.c'`; then
    echo shar: \"'kill.c'\" unpacked with wrong size!
fi
# end of 'kill.c'
fi
if test -f 'life.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'life.c'\"
else
echo shar: Extracting \"'life.c'\" \(1298 characters\)
sed "s/^X//" >'life.c' <<'END_OF_FILE'
X#include "std.disclaimer"
X#include "go.h"
X
XIsSafe (x, y)
Xint     x,
X        y;
X{
X    int     t;
X    if (!ir (x, y) || (t = b (x, y)) == NONE)
X	return (false);
X    InitBoard (&marks);
X    return (esc (x, y, t));
X}
X
Xesc (x, y, t)
Xint     x,
X        y,
X        t;
X{
X    if (!ir (x, y))
X	return (false);
X    if (b (x, y) == NONE)
X	return (true);
X    if (!m (x, y) && b (x, y) == t) {
X	m (x, y) = MARK;
X	return (esc (x - 1, y, t) ||
X		esc (x + 1, y, t) ||
X		esc (x, y - 1, t) ||
X		esc (x, y + 1, t));
X    }
X    return (false);
X}
X
X
XOwner (x, y)
Xint     x,
X        y;
X{
X    int     o;
X    InitBoard (&marks);
X    o = Owner0 (x, y);
X    return (o == -1 ? 3 : o);
X}
X
XOwner0 (x, y)
Xint     x,
X        y;
X{
X    int     c,
X            n;
X    if (m (x, y) || !ir (x, y))
X	return 3;
X    m (x, y) = 1;
X    if (b (x, y) != NONE)
X	return (b (x, y) + 3);
X    return (New (New (New (New (3, x - 1, y), x + 1, y), x, y - 1), x, y + 1));
X
X}
X
XNew (o, x2, y2)			/* 3= undetermined, 4=p1, 5=p2, -1=shared */
Xreg int o;
Xint     x2,
X        y2;
X{
X    reg int n;			/* old, new */
X    n = Owner0 (x2, y2);
X    if (o == 3)
X	return n;
X    if (n == 3)
X	return o;
X    if (o < 0)
X	return o;
X    return (n == o ? o : -1);
X}
X
Xint     ir (x, y)
Xint     x,
X        y;
X{
X    return ((x >= 0) && (x < MAXX) && (y >= 0) && (y < MAXY));
X}
END_OF_FILE
if test 1298 -ne `wc -c <'life.c'`; then
    echo shar: \"'life.c'\" unpacked with wrong size!
fi
# end of 'life.c'
fi
if test -f 'loop.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'loop.c'\"
else
echo shar: Extracting \"'loop.c'\" \(1236 characters\)
sed "s/^X//" >'loop.c' <<'END_OF_FILE'
X#include "std.disclaimer"
X#include "go.h"
X#include <strings.h>
X
X
Xextern int  errno;
Xextern int  mesflg,
X            curx,
X            cury;
X
X
XLoop () {
X    int     mask,
X            res;
X    char    message[20];
X    homemes ();
X     /* 	strcpy(message,"- "); strcat(message,VERSION); strcat(message," By Greg Hale"); addmes(message); */ addmes ("- Set up handicap.");
X    addmes ("- Press 'p' to play");
X
X    do {
X	myturn = (!player && curplr) || (player && !curplr);
X
X	if (AreWe (PLAY)) {
X	    if (myturn) {
X		notify (" Your turn");
X	    }
X	    else
X		notify (" Waiting for opponent");
X	}
X	else
X	    if (AreWe (HANDICAP)) {
X		notify (" Set Handicap");
X	    }
X	    else
X		if (AreWe (SCORE)) {
X		    notify (" Scoring");
X		}
X		else {
X		    notify (" What are we doing??");
X		}
X
X	if (mesflg)
X	    move (cury, curx);
X	else
X	    moveto (cx, cy);
X
X	refresh ();
X
X	mask = sockmask[0] | sockmask[1];
X	if (select (32, &mask, 0, 0, 0) == -1) {
X	    if (errno == EINTR) {
X		continue;
X	    }
X	    else
X		error (" Error- Select failed\n");
X	}
X	if (mask & sockmask[0]) {
X	    DoLoop ();
X	}
X	else
X	    if (mask == sockmask[1]) {
X		myturn = !myturn;
X		DoOther ();
X	    }
X	    else
X		error (" Error - bad select\n");
X
X    }
X    while (!AreWe (EXIT));
X}
END_OF_FILE
if test 1236 -ne `wc -c <'loop.c'`; then
    echo shar: \"'loop.c'\" unpacked with wrong size!
fi
# end of 'loop.c'
fi
if test -f 'looputil.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'looputil.c'\"
else
echo shar: Extracting \"'looputil.c'\" \(808 characters\)
sed "s/^X//" >'looputil.c' <<'END_OF_FILE'
X#include "std.disclaimer"
X#include "go.h"
X
X#define WAITTIME 2
X#define MVSCORE move(4,45);
X#define MVMESG move(20,1);
X
Xchar   *msg0,
X       *msg1,
X       *sc0,
X       *sc1,
X       *sc2,
X       *m0,
X       *m1,
X       *s1,
X       *s2,
X       *message;
X
Xint     koflg;
Xint     mes0time;
Xint     mes1time;
Xint     turn;
Xint     tally;
Xchar    c;
Xbool done;
Xbool sflg;
X
X
XNextPlr () {
X    curplr = !curplr;
X    turn++;
X    if (done)
X	done--;
X}
X
X
XFillit (i, x, y)
Xint     i,
X        x,
X        y;
X{
X    fill (x, y, i);
X    PrintBoard (&board);
X}
X
X
XHandicap (i)
Xint     i;
X{
Xint savehand;
Xextern int  handicaps;
X    savehand=handicaps;
X    if (AreWe (HANDICAP))
X	sethand (cx, cy, i);
X    handicaps=savehand;
X}
X
X
Xdotally () {
X    savelast ();
X    Tally ();
X    PrintBoard (&board);
X    GetAKey ();
X    restlast ();
X}
END_OF_FILE
if test 808 -ne `wc -c <'looputil.c'`; then
    echo shar: \"'looputil.c'\" unpacked with wrong size!
fi
# end of 'looputil.c'
fi
if test -f 'mesg.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'mesg.c'\"
else
echo shar: Extracting \"'mesg.c'\" \(1825 characters\)
sed "s/^X//" >'mesg.c' <<'END_OF_FILE'
X#include "std.disclaimer"
X#include "go.h"
X
Xextern char *opponent;
X
Xint     mesgx = 42;
Xint     mesgy = 7;
Xint     mesgx2 = 78;
Xint     mesgy2 = 14;
X
X
Xint     talkx = 42;
Xint     talky = 16;
Xint     talkx2 = 78;
Xint     talky2 = 23;
X
Xstatic char mesgbuf[1000];
Xint     cur;
Xint     curx;
Xint     cury;
Xint     mesflg;
X
X#define FD_INPUT 0
X
Xint     tcury;
X
Xnotify (s)
Xchar   *s;
X{
X    mvaddstr (0, 0, "123456                          ");
X    mvaddstr (0, 0, s);
X}
X
Xinitmesg () {
X    mesflg = 0;
X    cur = -1;
X    curx = mesgx;
X    cury = mesgy;
X
X    tcury = talky;
X
X
X    mvaddstr (0, mesgx, "   -- ");
X    mvaddstr (0, mesgx + 6, VERSION);
X    mvaddstr (0, mesgx + 12, ": By Greg Hale --");
X    mvaddstr (mesgy - 1, mesgx, "   -- your messages ^D end   --");
X    mvaddstr (talky - 1, talkx, "   -- opponent      ^D end   --");
X}
X
Xaddtalk (s)
Xchar   *s;
X{
X    logcomment (s, 2);
X    mvaddstr (tcury, talkx, s);
X    if (tcury++ == talky2)
X	tcury = talky;
X    move (tcury, talkx);
X    clrtoeol ();
X}
X
Xdomesg (c)
Xchar    c;
X{
X    if (c == '\b' || c == '\177') {
X	delchar ();
X    }
X    else
X	if (c == '\n') {
X	    sendbuf ();
X	    curx = mesgx;
X	    if (cury++ == mesgy2)
X		cury = mesgy;
X	    move (cury, curx);
X	    clrtoeol ();
X	}
X	else
X	    if (c == 004) {	/* ^D returns to board now */
X		mesflg = 0;
X		return (0);
X	    }
X	    else {
X		addchar (c);
X	    }
X    move (cury, curx);
X}
X
Xaddchar (c)
Xchar    c;
X{
X    mesgbuf[++cur] = c;
X    mvaddch (cury, curx, c);
X    if (curx++ == mesgx2) {
X	curx = mesgx;
X	if (cury++ == mesgy2)
X	    cury = mesgy;
X	sendbuf ();
X	move (cury, curx);
X	clrtoeol ();
X    }
X}
X
Xdelchar () {
X    if (cur >= 0 && curx > mesgx) {
X	curx--;
X	cur--;
X	mvaddch (cury, curx, ' ');
X    }
X}
X
Xsendbuf () {
X    mesgbuf[++cur] = '\0';
X    SEND (MMESSAGE);
X    SEND (mesgbuf);
X    cur = -1;
X    logcomment (mesgbuf, 1);
X}
END_OF_FILE
if test 1825 -ne `wc -c <'mesg.c'`; then
    echo shar: \"'mesg.c'\" unpacked with wrong size!
fi
# end of 'mesg.c'
fi
if test -f 'movecur.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'movecur.c'\"
else
echo shar: Extracting \"'movecur.c'\" \(149 characters\)
sed "s/^X//" >'movecur.c' <<'END_OF_FILE'
X#include "std.disclaimer"
X#include "go.h"
Xmovecur (x, y)
Xint     x,
X        y;
X{
X    cx = (cx + x + MAXX) % MAXX;
X    cy = (cy + y + MAXX) % MAXY;
X}
END_OF_FILE
if test 149 -ne `wc -c <'movecur.c'`; then
    echo shar: \"'movecur.c'\" unpacked with wrong size!
fi
# end of 'movecur.c'
fi
if test -f 'moveto.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'moveto.c'\"
else
echo shar: Extracting \"'moveto.c'\" \(91 characters\)
sed "s/^X//" >'moveto.c' <<'END_OF_FILE'
X#include "std.disclaimer"
X#include "go.h"
Xmoveto (x, y) {
X    move (y + 1, (x * 2) + 1);
X}
END_OF_FILE
if test 91 -ne `wc -c <'moveto.c'`; then
    echo shar: \"'moveto.c'\" unpacked with wrong size!
fi
# end of 'moveto.c'
fi
if test -f 'nomove.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'nomove.c'\"
else
echo shar: Extracting \"'nomove.c'\" \(435 characters\)
sed "s/^X//" >'nomove.c' <<'END_OF_FILE'
X#include "std.disclaimer"
X#include "go.h"
X
XNoMove (x, y, c, d)
Xint     x,
X        y,
X        c,
X        d;
X{
X    return (!IsSafe (x, y) &&
X	    nmv0 (x - 1, y, c, d) &&
X	    nmv0 (x + 1, y, c, d) &&
X	    nmv0 (x, y - 1, c, d) &&
X	    nmv0 (x, y + 1, c, d));
X}
X
Xnmv0 (x, y, c, d)
Xint     x,
X        y,
X        c,
X        d;
X{
X    return (!ir (x, y) ||
X	    (b (x, y) == c && IsSafe (x, y)) ||
X	    (b (x, y) == d && !IsSafe (x, y)));
X}
END_OF_FILE
if test 435 -ne `wc -c <'nomove.c'`; then
    echo shar: \"'nomove.c'\" unpacked with wrong size!
fi
# end of 'nomove.c'
fi
if test -f 'plt.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'plt.c'\"
else
echo shar: Extracting \"'plt.c'\" \(504 characters\)
sed "s/^X//" >'plt.c' <<'END_OF_FILE'
X#include "std.disclaimer"
X#include "go.h"
X
XPlt (br, x, y)
XBOARD * br;
Xint     x,
X        y;
X{
X    char    c;
X    moveto (x, y);
X    c = (pieces[br -> d[x][y]]);
X    if (c == pieces[0])
X	c = cp (x, y);
X    addch (c);
X}
X
Xcp (x, y)
Xint     x,
X        y;
X{
X    extern int  handin;
X    int     r;
X    if ((x == handin || x == MAXX - 1 - handin || x == (MAXX - 1) / 2) &&
X	    (y == handin || y == MAXY - 1 - handin || y == (MAXY - 1) / 2)) {
X	return (pieces[4]);
X    }
X    else {
X	return (pieces[0]);
X    }
X}
END_OF_FILE
if test 504 -ne `wc -c <'plt.c'`; then
    echo shar: \"'plt.c'\" unpacked with wrong size!
fi
# end of 'plt.c'
fi
if test -f 'printboard.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'printboard.c'\"
else
echo shar: Extracting \"'printboard.c'\" \(947 characters\)
sed "s/^X//" >'printboard.c' <<'END_OF_FILE'
X#include "std.disclaimer"
X#include "go.h"
X
XPrintBoard (br)
XBOARD * br;
X{
X    extern int  handin,
X                dimensions,
X                inverse;
X    int     x,
X            y;
X    touchwin (stdscr);
X    handin = (dimensions > 12) ? 3 : 2;
X    for (y = 1; y < MAXY + 1; y++)
X	for (x = 0; x < MAXX * 2; x++)
X	    mvaddch (y, x, 32 + inverse);
X    for (y = 0; y < MAXY; y++) {
X	for (x = 0; x < MAXX; x++) {
X	    Plt (br, x, y);
X	}
X	mvprintw (y + 1, MAXX * 2, "|%d", MAXY - y);
X    }
X    for (x = MAXX; x--;) {
X	char    c;
X	c = 'A' + x;
X	c = (c >= 'I') ? c + 1 : c;
X	mvaddch (MAXY + 1, x * 2 + 1, c);
X    }
X    initmesg ();
X    printscore ();
X    refresh ();
X}
X
Xprintscore () {
X    /* mvaddstr(MAXY+1,0,"Go - By Greg Hale"); */
X    move (21, 0);
X    addch (player ? '>' : ' ');
X    printw ("Player one [*] (captured O): %4d", hama[0]);
X    move (22, 0);
X    addch (!player ? '>' : ' ');
X    printw ("Player two [O] (captured *): %4d", hama[1]);
X}
END_OF_FILE
if test 947 -ne `wc -c <'printboard.c'`; then
    echo shar: \"'printboard.c'\" unpacked with wrong size!
fi
# end of 'printboard.c'
fi
if test -f 'putpiece.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'putpiece.c'\"
else
echo shar: Extracting \"'putpiece.c'\" \(1871 characters\)
sed "s/^X//" >'putpiece.c' <<'END_OF_FILE'
X#include "std.disclaimer"
X#include "sys/time.h"
X#include "go.h"
X#define DELAY 30000
X
Xint     lastx,
X        lasty;
X
Xextern int  logflg;
X
Xputpiece (cx, cy, cur, blinkflg, switchB)
Xint     cx,
X        cy;
Xint     cur;
Xint     blinkflg;
Xint     switchB;
X{
X    if (blinkflg)
X	Beep ();
X    if (b (cx, cy) == NONE) {
X	int     c,
X	        d;
X	savelast ();
X	c = !cur + 1;
X	d = cur + 1;
X	setboard (cx, cy, d);
X	if (NoMove (cx, cy, c, d)) {
X	    b (cx, cy) = 0;
X	    Plt (&board, cx, cy);
X	}
X	else {
X	    Kill (cx, cy, d);
X
X	    if (!compboard ()) {
X		homemes ();
X		addmes ("- That's a KO. You can't");
X		addmes ("  go there.");
X		restlast ();
X	    }
X	    else {
X		lastx = cx;
X		lasty = cy;
X		if (switchB) {
X		    SEND (MMOVE);
X		    SendCoord (cx, cy);
X		    sprintf (buf, "%d", cur);
X		    SEND (buf);
X		}
X		Plt (&board, cx, cy);
X		refresh ();
X		if (blinkflg)
X		    blink (cx, cy, d);
X		if (logflg)
X		    dolog (cx, cy, d);
X		if (switchB)
X		    NextPlr ();
X		saveboard0 ();
X	    }
X	}
X    }
X}
X
XShowLast () {
X    blink (lastx, lasty, b (lastx, lasty));
X}
X
Xblink (x, y, d)
Xint     x,
X        y,
X        d;
X{
X    extern int  numberblink;
X    int     blinks;
X    int     mask;
X    struct timeval  tv;
X    if (!AreWe (HANDICAP)) {
X	for (blinks = numberblink; blinks--;) {
X	    mask = sockmask[0];
X	    tv.tv_sec = 0;
X	    tv.tv_usec = 200000;
X	    if (select (sizeof (mask), &mask, 0, 0, &tv))
X		break;
X	    b (x, y) = b (x, y) ? 0 : d;
X	    Plt (&board, x, y);
X	    refresh ();
X	}
X	b (x, y) = d;
X	Plt (&board, x, y);
X	refresh ();
X    }
X}
X
X
XGetCoord (x, y)
Xint    *x,
X       *y;
X{
X    RECV (buf);
X    *x = atoi (buf);
X    RECV (buf);
X    *y = atoi (buf);
X}
X
XSendCoord (x, y)
Xint     x,
X        y;
X{
X    sprintf (buf, "%d", x);
X    DEBUG (printf ("SENDCOORD X:%s\n", buf);
X    )
X	SEND (buf);
X    sprintf (buf, "%d", y);
X    DEBUG (printf ("SENDCOORD Y:%s\n", buf);
X    )
X	SEND (buf);
X}
END_OF_FILE
if test 1871 -ne `wc -c <'putpiece.c'`; then
    echo shar: \"'putpiece.c'\" unpacked with wrong size!
fi
# end of 'putpiece.c'
fi
if test -f 'score.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'score.c'\"
else
echo shar: Extracting \"'score.c'\" \(1397 characters\)
sed "s/^X//" >'score.c' <<'END_OF_FILE'
X#include "std.disclaimer"
X#include "go.h"
X
XScore()
X{
X	extern int handicaps;
X	char temp[100];
X	float komi,s1,s2,s1space,s2space;
X	int i,j;
X
X	s1=s2=0.0;
X	Tally();
X	for (i=0; i<MAXX; i++) {
X		for (j=0; j<MAXY; j++) {
X			if (b(i,j)==4) {
X				s1++;
X			} 
X			else if(b(i,j)==5) {
X				s2++;
X			}
X
X		}
X	}
X	komi = (handicaps>0 || dimensions != 19) ? 0.0 : KOMI;
X	s1space=s1;
X	s2space=s2;
X	s2+=hama[1];
X	s1+=hama[0];
X	s2 = s2 + komi;
X	if (s1>s2)
X		sprintf(temp,"Black has won by %g points!",s1-s2);
X	else if (s2>s1)
X		sprintf(temp,"White has won by %g points!",s2-s1);
X	else sprintf(temp,"It was a tie game!");
X
X	homemes();
X	addmes("Final Results:");
X	addmes(temp);
X
X	if (s1 != s2) {
X		iwon = (player && (s1>s2)) || (!player && (s1<s2));
X		savestr();
X	}
X
X	GetAKey();
X	clear();
X	move(1,0);
X	printw("------------------------------------------------\n");
X	printw("-       Final Results (Japanese counting)      -\n");
X	printw("------------------------------------------------\n");
X	printw("-     Territory + Captured + Komi = Final Score\n");
X	printw("-Black:  %3.1f       %3.1f        0         %3.1f\n",
X	s1space,    (float)hama[0],        s1);
X	printw("-White:  %3.1f       %3.1f        %1.1f         %3.1f\n",
X	s2space,    (float)hama[1], komi,      s2);
X	printw("-------------------------------------------------\n");
X	printw("\n%s\n",temp);
X	refresh();
X	testsave();
X	move(20,0);
X	refresh();
X	Exit();
X}
X
X
END_OF_FILE
if test 1397 -ne `wc -c <'score.c'`; then
    echo shar: \"'score.c'\" unpacked with wrong size!
fi
# end of 'score.c'
fi
if test -f 'setboard.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'setboard.c'\"
else
echo shar: Extracting \"'setboard.c'\" \(240 characters\)
sed "s/^X//" >'setboard.c' <<'END_OF_FILE'
X#include "std.disclaimer"
X#include "go.h"
X
Xsetboard (x, y, p)
Xint     x,
X        y;
Xchar    p;
X{
X    if ((p < 1 || p > 2) && b (x, y) == 1 || b (x, y) == 2) {
X	hama[!(b (x, y) - 1)]++;
X    }
X    board.d[x][y] = p;
X    Plt (&board, x, y);
X}
END_OF_FILE
if test 240 -ne `wc -c <'setboard.c'`; then
    echo shar: \"'setboard.c'\" unpacked with wrong size!
fi
# end of 'setboard.c'
fi
if test -f 'status.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'status.c'\"
else
echo shar: Extracting \"'status.c'\" \(201 characters\)
sed "s/^X//" >'status.c' <<'END_OF_FILE'
X#include "std.disclaimer"
X#include "go.h"
X
X
XAreWe (s)
Xint     s;
X{
X    return (status & s);
X}
X
XSetStat (s)
Xint     s;
X{
X    status = status | s;
X}
X
XClrStat (s)
Xint     s;
X{
X    status = status & ~s;
X}
END_OF_FILE
if test 201 -ne `wc -c <'status.c'`; then
    echo shar: \"'status.c'\" unpacked with wrong size!
fi
# end of 'status.c'
fi
if test -f 'std.disclaimer' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'std.disclaimer'\"
else
echo shar: Extracting \"'std.disclaimer'\" \(490 characters\)
sed "s/^X//" >'std.disclaimer' <<'END_OF_FILE'
X/*
X        Copyright 1990      Greg Hale
X
XPermission to use, copy, modify, and distribute this
Xsoftware and its documentation for any purpose and without
Xfee is hereby granted, provided that the above copyright
Xnotice appear in all copies and that both that copyright
Xnotice and this permission notice appear in supporting
Xdocumentation.  No representations are made about the
Xsuitability of this software for any purpose.  It is
Xprovided "as is" without express or implied warranty.
X
X*/
X
X
END_OF_FILE
if test 490 -ne `wc -c <'std.disclaimer'`; then
    echo shar: \"'std.disclaimer'\" unpacked with wrong size!
fi
# end of 'std.disclaimer'
fi
if test -f 'strength.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'strength.c'\"
else
echo shar: Extracting \"'strength.c'\" \(2082 characters\)
sed "s/^X//" >'strength.c' <<'END_OF_FILE'
X#include "std.disclaimer"
X#include "go.h"
X#include <pwd.h>
X
XFILE * strfile;
Xchar    filename[500];
Xextern int  strength,
X            opponstr;
Xextern float    wins;
X
XGetStr () {
X    int     id;
X    struct passwd  *pw;
X    char   *dir;
X    id = geteuid ();
X    pw = getpwuid (id);
X    dir = pw -> pw_dir;
X    strcpy (filename, dir);
X    strcat (filename, GOFILE);
X    /* fprintf(stderr,"FILENAME:%s\n",filename); */
X    if ((strfile = fopen (filename, "r")) != NULL) {
X	fscanf (strfile, "%d", &strength);
X	fscanf (strfile, "%f", &wins);
X	fclose (strfile);
X    }
X    else {
X	strength = 0;
X	wins = 0.0;
X    }
X
X}
X
X
X
X
Xsavestr () {
X    float   getdelta (), newwins;
X    newwins = getdelta ();
X    if (newwins * wins < 0.0)
X	wins = newwins;
X    else
X	wins += newwins;
X    savestr0 ();
X}
X
Xsavestr0 () {
X    if ((strfile = fopen (filename, "w")) != NULL) {
X	if ((wins >= WINSUP && strength < MAXSTR)) {
X	    fprintf (strfile, "%d 0.0\n", strength + 1);
X	}
X	else
X	    if ((wins <= -WINSUP && strength > 1)) {
X		fprintf (strfile, "%d 0.0\n", strength - 1);
X	    }
X	    else {
X		fprintf (strfile, "%d %f\n", strength, wins);
X	    }
X	fclose (strfile);
X    }
X}
X
X
Xfloat   getdelta () {
X    if      (iwon) {		/* i won */
X	if      (strength < opponstr)/* i'm weaker */
X	            return ((opponstr - strength) / 10.0 + 1.0);
X	else
X	    return (((strength - opponstr) > 20) ? 2.0 : 1.0);
X    }
X    else {
X	if (strength < opponstr)
X	    return (-1.0);
X	else
X	    return (-((strength - opponstr) / 20.0 + 1.0));
X    }
X}
X
Xshowstr () {
X    GetStr ();
X    if (strength < 31) {
X	printf ("Your strength is about: %d kyu.\n", 31 - strength);
X    }
X    else
X	if (strength < 40) {
X	    printf ("Your strength is about: %d dan.\n", strength - 30);
X	}
X	else
X	    if (strength < MAXSTR + 1) {
X		printf ("Your strength is about: %d professional dan.\n", strength - 39);
X	    }
X	    else {
X		printf ("Your are at maximum strength.\n");
X	    }
X    if (wins >= 0)
X	printf ("You have also won %d games in a row.\n", (int) (wins / 2.0));
X    else
X	printf ("You have also lost %d games in a row.\n", -(int) (wins));
X}
END_OF_FILE
if test 2082 -ne `wc -c <'strength.c'`; then
    echo shar: \"'strength.c'\" unpacked with wrong size!
fi
# end of 'strength.c'
fi
if test -f 'tally.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'tally.c'\"
else
echo shar: Extracting \"'tally.c'\" \(201 characters\)
sed "s/^X//" >'tally.c' <<'END_OF_FILE'
X#include "std.disclaimer"
X#include "go.h"
X
XTally () {
X    int     i,
X            j;
X    for (i = 0; i < MAXX; i++)
X	for (j = 0; j < MAXY; j++)
X	    if (b (i, j) == NONE)
X		fill (i, j, Owner (i, j));
X}
END_OF_FILE
if test 201 -ne `wc -c <'tally.c'`; then
    echo shar: \"'tally.c'\" unpacked with wrong size!
fi
# end of 'tally.c'
fi
if test -f 'traps.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'traps.c'\"
else
echo shar: Extracting \"'traps.c'\" \(1727 characters\)
sed "s/^X//" >'traps.c' <<'END_OF_FILE'
X#include "std.disclaimer"
X#include "go.h"
X#include <signal.h>
X
X#define FD_INPUT 0
Xtrap_sigint () {
X    int     y,
X            x;
X    char    c;
X
X    signal (SIGINT, SIG_IGN);
X    clear ();
X    mvaddstr (22, 1, "Quit (y/n)?");
X    refresh ();
X    c = GetAKey0 ();
X    while (c != 'n' && c != 'N' && c != 'y' && c != 'Y') {
X	if (c == '\f')
X	    refresh ();
X	c = GetAKey ();
X    }
X    if (c == 'y') {
X	SEND (MEXIT);
X	clear ();
X	refresh ();
X	Exit ();
X    }
X
X    touchwin (stdscr);
X    PrintBoard (&board);
X
X    signal (SIGINT, trap_sigint);
X}
X
X/* These signal handlers cause bad bugs
Xmyts_tp () {
X    clear ();
X    refresh ();
X    resetty ();
X    kill (getpid (), SIGSTOP);
X}
X
Xmyts_cont () {
X    setmode ();
X    touchwin (stdscr);
X    clear ();
X    PrintBoard (&board);
X}
X*/
X
X/*
X * set up all the core dump signal vectors to the signal handler given
X */
X
Xsetcore (f)
Xint     (*f) ();
X{
X    signal (SIGQUIT, f);
X    signal (SIGILL, f);
X    signal (SIGTRAP, f);
X    signal (SIGIOT, f);
X    signal (SIGEMT, f);
X    signal (SIGFPE, f);
X    signal (SIGBUS, f);
X    signal (SIGSEGV, f);
X    signal (SIGSYS, f);
X}
X
X/*
X * very fatal error occured twice.  Time to die.
X * We have been surrounded :)
X */
X
Xtrap_cdumpII () {
X    int     i;
X    setcore (SIG_IGN);
X    fprintf (stderr, "Save failed! Fatal error! Committing processide...\n");
X    exit (666);
X}
X
X/*
X * The first core dump signal goes here, then to cdumpII
X * The first signal attempts to save the game and leave cleanly.
X * the second version just dies :(
X */
X
Xtrap_cdump () {
X    int     trap_cdumpII ();
X    setcore (trap_cdumpII);
X    fprintf (stderr, "core dump attempted- attempting save...\n");
X    savegame ();
X    fprintf (stderr, "save successful.\n\n");
X    Exit ();
X}
END_OF_FILE
if test 1727 -ne `wc -c <'traps.c'`; then
    echo shar: \"'traps.c'\" unpacked with wrong size!
fi
# end of 'traps.c'
fi
if test -f 'util.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'util.c'\"
else
echo shar: Extracting \"'util.c'\" \(1323 characters\)
sed "s/^X//" >'util.c' <<'END_OF_FILE'
X#include "std.disclaimer"
X#include "go.h"
X#include <ctype.h>
X
X#define FD_INPUT 0
X
XGetAKey () {
X    addmes (HITAKEYMES);
X    return (GetAKey0 ());
X}
X
XGetAKey0 () {
X    char    c;
X    if (read (FD_INPUT, &c, 1) <= 0) {
X	SEND (MEXIT);
X	error ("Aborting- End of File read.\n");
X    }
X    return (c);
X}
XDoRedraw () {
X    touchwin (stdscr);
X    clear ();
X    PrintBoard (&board);
X}
X
XBeep () {
X    extern int  beepflg;
X    if (beepflg)
X	putchar (07);
X}
X
Xint     verify (s)
Xchar   *s;
X{
X    char    buf[2];
X    do {
X	getLine (s, buf, 1);
X    }
X    while (buf[0] != 'y' && buf[0] != 'n');
X
X    return buf[0] == 'y';
X}
X
Xint     getLine (query, dst, maxLen)/* char *, char *, int */
Xchar   *query,
X       *dst;
Xint     maxLen;
X{
X    int     qLen,
X            dLen;
X    char    c;
X    mvaddstr (0, 1, query);
X    printw ("                          ");
X    mvaddstr (0, 1, query);
X    dLen = 0;
X    qLen = strlen (query);
X    do {
X	move (0, qLen + 1 + dLen);
X	refresh ();
X	c = getchar ();
X	if (isprint (c) && dLen < maxLen) {
X	    mvaddch (0, qLen + dLen + 1, c);
X	    dst[dLen++] = c;
X	}
X	else
X	    if (dLen && (c == '\b' || c == '\177')) {
X		dLen--;
X		mvaddch (0, qLen + dLen + 1, ' ');
X	    }
X    }
X    while (c != '\n' && c != '\r');
X    dst[dLen] = 0;
X    move (0, 1);
X    printw ("                          ");
X    return dLen;
X}
END_OF_FILE
if test 1323 -ne `wc -c <'util.c'`; then
    echo shar: \"'util.c'\" unpacked with wrong size!
fi
# end of 'util.c'
fi
if test -f 'var.c' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'var.c'\"
else
echo shar: Extracting \"'var.c'\" \(882 characters\)
sed "s/^X//" >'var.c' <<'END_OF_FILE'
X#include "std.disclaimer"
X#include <sys/file.h>
X#include "go.h"
X
XBOARD backup, board, marks;
X
Xint     handin;
Xint     handicaps = 0;		/* handicap indentation */
Xint     dimensions,
X        myport;
Xint     cx = 0,
X        cy = 0;
Xchar    pieces[] = {
X    '.' + INVERSE, BLACK + INVERSE, 'O' + INVERSE, '=' + INVERSE,
X    '+' + INVERSE, '-' + INVERSE
X};
Xint     curplr = 0;
Xint     hama[2] = {
X    0, 0
X};
Xint     MAXX,
X        MAXY;
Xchar    buf[MAXBUF];
Xint     beepflg;
Xint     disable = 0;
Xint     status,
X        sock,
X        sockmask[2],
X        myturn;
Xint     player,
X        iwon,
X        opponstr,
X        strength;
Xint     loadflg;
Xint     logflg;
Xint     usemess;
Xchar    loadname[128],
X        logname[128];
Xfloat   wins;
Xchar   *blanks = "                                                              ";
Xchar   *myname,
X       *hisname;
XFILE * logfile;
Xint     inverse;
END_OF_FILE
if test 882 -ne `wc -c <'var.c'`; then
    echo shar: \"'var.c'\" unpacked with wrong size!
fi
# end of 'var.c'
fi
echo shar: End of archive 2 \(of 2\).
cp /dev/null ark2isdone
MISSING=""
for I in 1 2 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked both archives.
    rm -f ark[1-9]isdone
else
    echo You still need to unpack the following archives:
    echo "        " ${MISSING}
fi
##  End of shell archive.
exit 0