[comp.sources.games] v04i002: nobs - cribbage game

games@tekred.TEK.COM (03/25/88)

Submitted by: "g.l.sicherman" <gls@odyssey.att.com>
Comp.sources.games: Volume 4, Issue 2
Archive-name: nobs

	[This is the first of two cribbage games to be posted. This
	 game should run under System V or BSD (I tested it under
	 Sun 3.5).   -br]

#! /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 1 (of 1)."
# Contents:  README MANIFEST Makefile deal.c defs.h gamescore.c globs.c
#   globs.h human.c logaux.c logglobs.c logglobs.h nobs.6 nobs.c
#   pegs.c play.c playscore.c progaux.c program.c show.c shuf.c
#   version.c wglobs.c window.c window.h
# Wrapped by billr@saab on Thu Mar 24 12:14:14 1988
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f README -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"README\"
else
echo shar: Extracting \"README\" \(243 characters\)
sed "s/^X//" >README <<'END_OF_README'
XThis is the first C distribution of the Colonel's Cribbage
XProgram.  (It originally ran in FORTRAN IV on a CDC, back in the
X70's.)  All configurables are in the Makefile.
XFeedback to ihnp4!odyssey!gls.  Have fun!
X
XRed Hill Road
XMarch 11, 1988
END_OF_README
if test 243 -ne `wc -c <README`; then
    echo shar: \"README\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f MANIFEST -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"MANIFEST\"
else
echo shar: Extracting \"MANIFEST\" \(864 characters\)
sed "s/^X//" >MANIFEST <<'END_OF_MANIFEST'
X   File Name		Archive #	Description
X-----------------------------------------------------------
X MANIFEST                  1	This shipping list
X Makefile                  1	
X README                    1	
X deal.c                    1	
X defs.h                    1	
X gamescore.c               1	
X globs.c                   1	
X globs.h                   1	
X human.c                   1	
X logaux.c                  1	
X logglobs.c                1	
X logglobs.h                1	
X nobs.6                    1	
X nobs.c                    1	
X pegs.c                    1	
X play.c                    1	
X playscore.c               1	
X progaux.c                 1	
X program.c                 1	
X show.c                    1	
X shuf.c                    1	
X version.c                 1	
X wglobs.c                  1	
X window.c                  1	
X window.h                  1	
END_OF_MANIFEST
if test 864 -ne `wc -c <MANIFEST`; then
    echo shar: \"MANIFEST\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f Makefile -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"Makefile\"
else
echo shar: Extracting \"Makefile\" \(1133 characters\)
sed "s/^X//" >Makefile <<'END_OF_Makefile'
X#	Makefile for nobs.
X#	G. L. Sicherman (ihnp4!odyssey!gls).  March 1988.
X#-------
X# Configurable parameters:
XBINDEST=$$HOME/bin/nobs
XMANDEST=$$HOME/man/nobs.6
X
X# Define BSD for Berkeley, Sun, etc.
X# BSDFLAG= -DBSD
XBSDFLAG= -UBSD
X
X# If BSD, we need libtermcap.
X# LIB= -lcurses -ltermcap
XLIB= -lcurses
X
X# End of configurable parameters.  Good luck!
X
XCFLAGS= -O $(BSDFLAG)
X
XOBJS = nobs.o logglobs.o window.o gamescore.o deal.o shuf.o play.o human.o \
X   pegs.o program.o playscore.o show.o progaux.o logaux.o wglobs.o globs.o \
X   version.o
X
XSHARS = nobs.c logglobs.c window.c gamescore.c deal.c shuf.c play.c human.c \
X   pegs.c program.c playscore.c show.c progaux.c logaux.c wglobs.c \
X   globs.c version.c defs.h globs.h logglobs.h window.h nobs.6 Makefile README
X
Xall: nobs
Xnobs: $(OBJS)
X	cc -o nobs $(OBJS) $(LIB)
X$(OBJS): defs.h globs.h
Xlog.o progaux.o program.o: logglobs.h
Xplay.o program.o human.o gamescore.o pegs.o window.o show.o: window.h
X
Xinstall: nobs nobs.6
X	rm -f $(BINDEST) $(MANDEST)
X	cp nobs $(BINDEST)
X	cp nobs.6 $(MANDEST)
X
Xshar: nobs.shar
Xnobs.shar: $(SHARS)
X	shar $(SHARS) > $@
X
Xclean:
X	rm -f nobs *.o nobs.shar
END_OF_Makefile
if test 1133 -ne `wc -c <Makefile`; then
    echo shar: \"Makefile\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f deal.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"deal.c\"
else
echo shar: Extracting \"deal.c\" \(218 characters\)
sed "s/^X//" >deal.c <<'END_OF_deal.c'
X#include "defs.h"
X#include "globs.h"
X
Xdeal()
X{
X	int i;
X	CARD *packp;
X	shuf();
X	packp = pack+39;	/* Only the last 13 cards */
X	for (i=0; i<6; i++) {
X		hand[0][i] = *packp++;
X		hand[1][i] = *packp++;
X	}
X	cut = *packp;
X}
END_OF_deal.c
if test 218 -ne `wc -c <deal.c`; then
    echo shar: \"deal.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f defs.h -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"defs.h\"
else
echo shar: Extracting \"defs.h\" \(688 characters\)
sed "s/^X//" >defs.h <<'END_OF_defs.h'
X/*
X *	defs.h - definitions.
X */
X
X/*	Suit has 3 bits, so we can use the green suit for estimating the cut.
X */
X#define RANK(x) ((x)&0017)
X#define	SUIT(x) (((x)&0160)>>4)
X#define	SAMESUIT(x,y) (!((x^y)&0160))
X#define	MAKECARD(r,s) ((r)|((s)<<4))
X
Xtypedef	char	PLAYER;
X
X#define	PROGRAM	0
X#define	HUMAN	1
X
X#define	SCOREUP(a,b) {if (scoreup((a),(b))) {gameover++; return;}}
X#define	CABBAGE	4
X#define	SPADE	3
X#define	HEART	2
X#define	DIAMOND	1
X#define	CLUB	0
X
X#define	KING	13
X#define	QUEEN	12
X#define	KNAVE	11
X#define	TEN	10
X#define	NINE	9
X#define	EIGHT	8
X#define	SEVEN	7
X#define	SIX	6
X#define	FIVE	5
X#define	FOUR	4
X#define	TREY	3
X#define	DEUCE	2
X#define	ACE	1
X
Xtypedef	char	CARD;
X
Xvoid	shuf();
END_OF_defs.h
if test 688 -ne `wc -c <defs.h`; then
    echo shar: \"defs.h\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f gamescore.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"gamescore.c\"
else
echo shar: Extracting \"gamescore.c\" \(3455 characters\)
sed "s/^X//" >gamescore.c <<'END_OF_gamescore.c'
X#include "defs.h"
X#include "globs.h"
X#include "window.h"
X
Xgamescore()
X{
X	sleep(2);
X	handscore(!dealer);
X	if (!gameover) {
X		sleep(2);
X		handscore(dealer);
X	}
X	if (!gameover) {
X		sleep(1);
X		werase(Pscore);
X		werase(Hscore);
X		exposecrib();
X		sleep(2);
X		cribscore();
X	}
X}
X
Xhandscore(who)
Xint who;
X{
X	int i;
X	CARD dummy[5];
X	for (i=0; i<4; i++) dummy[i]=hand[who][i];
X	dummy[4]=cut;
X	evalhand(dummy, 0, who);
X}
X
Xcribscore()
X{
X	int i;
X	CARD dummy[5];
X	for (i=0; i<4; i++) dummy[i]=crib[i];
X	dummy[4]=cut;
X	evalhand(dummy, 1, dealer);
X}
X
Xint
Xevalhand(ehand, iscrib, whoscore)
XCARD ehand[];
Xint iscrib;
Xint whoscore;	/* -1 means silent */
X{
X/*
X *	If iscrib is on, don't allow four-flushes.
X */
X	int i, j, mask, bit, hmask, sum, hcount;
X	char *runname;
X	int runval;
X	short rep[15];		/* Extra zeroes make it easier */
X	WINDOW *Win;
X	if (whoscore==1) Win=Hscore;
X	else if (whoscore==0) Win=Pscore;
X	if (iscrib && whoscore>=0) {
X		wprintw(Win, "%s Crib:\n", whoscore? "Your": "My");
X		wrefresh(Win);
X		sleep(1);
X	}
X	hcount=0;
X	for (mask=1; mask<32; mask++) {
X		hmask=mask;
X		sum=0;
X		for (bit=0; bit<5; bit++) {
X			if (1&hmask)
X				sum+=rankvalue[RANK(ehand[bit])];
X			hmask >>= 1;
X		}
X		if (sum==15) {
X			hcount += 2;
X			if (whoscore>=0) {
X				wprintw(Win, "Fifteen-%d\n", hcount);
X				wrefresh(Win);
X				sleep(1);
X			}
X		}
X/*
X *	Need we add any cards?
X */
X		if (sum >= 15) mask |= mask-1;
X	}
X/*
X *	Count the ranks.
X */
X	for (i=1; i<15; i++) rep[i]=0;
X	for (i=0; i<5; i++) rep[RANK(ehand[i])]+=1;
X/*
X *	Look for isolated pairs, etc.
X */
X	for (i=1; i<14; i++) if (rep[i]>1) {
X		if (!(rep[i-1] && (rep[i-2] || rep[i+1]) ||
X		rep[i+1] && rep[i+2])) {
X			hcount += pairvalue[rep[i]];
X			if (whoscore>=0) {
X				wprintw(Win, "and a %s is %d\n", 
X				pairname[rep[i]], hcount);
X				wrefresh(Win);
X				sleep(1);
X			}
X		}
X	}
X/*
X *	Look for runs, including multiples.
X */
X	for (i=1; i<12; i++) if (rep[i]) {
X		if (!rep[i+2]) {
X			i+=2;
X			continue;
X		}
X		if (!rep[i+1]) {
X			i+=1;
X			continue;
X		}
X/*
X *	We have a run!
X */
X		if (rep[i+3]) {
X			if (rep[i+4]) {
X				runname="Sequence of Five\n";
X				runval=5;
X			}
X			else {
X				runname="Sequence of Four\n";
X				runval=4;
X				for (j=i; j<i+4; j++) if (rep[j]>1) {
X					runname="Double Sequence\n of Four";
X					runval=10;
X					break;
X				}
X			}
X		}
X		else {
X			for (sum=0, j=i; j<i+3; j++) {
X				if (rep[j]==3) {
X					runname="Triple Sequence";
X					runval=15;
X					goto scorerun;
X				}
X				sum += rep[j]-1;
X			}
X			runname=drunname[sum];
X			runval=drunval[sum];
X		}
Xscorerun:
X		hcount += runval;
X		if (whoscore>=0) {
X			wprintw(Win, "and a %s is %d\n", runname, hcount);
X			wrefresh(Win);
X			sleep(1);
X		}
X		break;		/* You can't have two runs */
X	}
X/*
X *	Check for flushes.
X */
X	for (i=1; i<4; i++) if (!SAMESUIT(ehand[i],ehand[0])) goto endflush;
X	if (SAMESUIT(ehand[4], ehand[0])) {
X		hcount += 5;
X		if (whoscore>=0) {
X			wprintw(Win, "and a Flush of Five is %d\n", hcount);
X			wrefresh(Win);
X			sleep(1);
X		}
X	}
X	else if (!iscrib) {
X		hcount += 4;
X		if (whoscore>=0) {
X			wprintw(Win, "and a Flush is %d\n", hcount);
X			wrefresh(Win);
X			sleep(1);
X		}
X	}
Xendflush:
X	for (i=0; i<4; i++)
X	if (RANK(ehand[i])==KNAVE && SAMESUIT(ehand[i], ehand[4])) {
X		hcount += 1;
X		if (whoscore>=0) {
X			wprintw(Win, "and One for His Nobs is %d\n",hcount);
X			wrefresh(Win);
X			sleep(1);
X		}
X		break;
X	}
X/*
X *	Final reckoning, if wanted.
X */
X	if (whoscore>=0) {
X		sleep(1);
X		if (hcount) SCOREUP(whoscore, hcount);
X	}
X	return hcount;
X}
END_OF_gamescore.c
if test 3455 -ne `wc -c <gamescore.c`; then
    echo shar: \"gamescore.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f globs.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"globs.c\"
else
echo shar: Extracting \"globs.c\" \(997 characters\)
sed "s/^X//" >globs.c <<'END_OF_globs.c'
X/*
X *	globs - global variables.
X */
X
X#include "defs.h"
X
Xshort	count;
XCARD	crib[6];
XCARD	cut;
Xint	dealer;
Xint	(*dscfunc[2])();
Xchar	gameover;
XCARD	go[8];
Xshort	gocount;
XCARD	hand[2][6];
Xchar	handover;
Xshort	ncrib;
Xshort	nleft[2];
XCARD	pack[52];
Xint	packmade = 0;
Xshort	peg[2][2];
Xchar	played[2][4];
XPLAYER	playertype[2];
Xchar	quitflag;
Xshort	score[2];
Xshort	whosego;
Xchar	whoseturn;
X
Xchar	*drunname[3] = {"Sequence","Double Sequence",
X		"Quadruple Sequence"};
Xshort	drunval[3] = {3, 8, 16};
Xchar	*pairname[5] = {"0","0","Pair","Pair Royal","Double Pair Royal"};
Xshort	pairvalue[5] = {0,0,2,6,12};
Xchar	*rankname[14] = {"0", "Ace","Deuce","Trey","Four",
X			"Five","Six","Seven","Eight","Nine","Ten",
X			"Knave","Queen","King"};
Xchar	*rankrdr[14] = {"0", "A",
X		"2","3","4","5","6","7","8","9","10","J","Q","K"};
Xshort	rankvalue[14] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10};
Xchar	*suitname[5] = {"Clubs", "Diamonds", "Hearts", "Spades", "Cabbages"};
Xchar	*suitrdr[5] = {"c","d","h","s","x"};
END_OF_globs.c
if test 997 -ne `wc -c <globs.c`; then
    echo shar: \"globs.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f globs.h -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"globs.h\"
else
echo shar: Extracting \"globs.h\" \(762 characters\)
sed "s/^X//" >globs.h <<'END_OF_globs.h'
X/*
X *	globs.h - global variables.
X */
X
Xextern	short	count;
Xextern	CARD	crib[6];
Xextern	CARD	cut;
Xextern	int	dealer;
Xextern	char	*drunname[];
Xextern	short	drunval[];
Xextern	int	(*dscfunc[])();
Xextern	char	gameover;
Xextern	CARD	go[8];
Xextern	short	gocount;
Xextern	CARD	hand[2][6];
Xextern	char	handover;
Xextern	short	ncrib;
Xextern	short	nleft[2];
Xextern	CARD	pack[52];
Xextern	int	packmade;
Xextern	char	*pairname[];
Xextern	short	pairvalue[];
Xextern	short	peg[2][2];
Xextern	char	played[2][4];
Xextern	PLAYER	playertype[2];
Xextern	char	quitflag;
Xextern	char	*rankname[14];
Xextern	char	*rankrdr[14];
Xextern	short	rankvalue[14];
Xextern	short	score[2];
Xextern	char	*suitname[5];
Xextern	char	*suitrdr[5];
Xextern	char	version[];
Xextern	short	whosego;
Xextern	char	whoseturn;
END_OF_globs.h
if test 762 -ne `wc -c <globs.h`; then
    echo shar: \"globs.h\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f human.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"human.c\"
else
echo shar: Extracting \"human.c\" \(2424 characters\)
sed "s/^X//" >human.c <<'END_OF_human.c'
X#include "defs.h"
X#include "globs.h"
X#include "window.h"
X#ifdef BSD
X#include <ctype.h>
X#define beep()	putchar('\007')
X#endif
X
Xhumandiscard(hand, mydeal)
XCARD hand[];
Xint mydeal;
X{
X	char selected[6];
X	int nselected;
X	int j, j1, j2;
X	char k;
X	for (j=0; j<6; j++) mvwaddch(Select, 0, 5*j+2, 'a'+j);
X	wrefresh(Select);
X	mvwprintw(
X	Prompt, 0, 0, mydeal? "It is your crib.\n": "It is my crib.\n");
X	mvwprintw(Prompt, 1, 0, "Select 2 cards.  Type RETURN to discard.\n");
X	for (j=0; j<6; j++) selected[j]=0;
X	nselected = 0;
X	for (;;) {
X		mvwaddch(Prompt, 1, 41, '\n');
X		wmove(Prompt, 1, 41);
X		wrefresh(Prompt);
X		k = wgetch(Prompt);
X		k = (isupper(k) ? tolower(k) : k);
X		if ('\n'==k) {
X			if (nselected == 2) break;
X			beep();
X			continue;
X		}
X		if (k > 'f' || k < 'a') {
X			beep();
X			continue;
X		}
X		nselected -= selected[k-'a'];
X		nselected += (selected[k-'a'] ^= 1);
X		mvwaddch(Humanhand, 2, 5*(k-'a')+3,
X			selected[k-'a']? '*': ' ');
X		wrefresh(Humanhand);
X	}
X	wclear(Select);
X	wclear(Prompt);
X	wrefresh(Select);
X	wrefresh(Prompt);
X	for (j=0; j<6; j++) if (selected[j]) {
X		j1 = j2;	/* and you know Lint won't like this! */
X		j2 = j;
X	}
X	makediscard(hand, j1, j2);
X}
X
Xhumanplay()
X{
X	char k;
X	int sco;
X	if (whosego == whoseturn) {
X/*
X *	It is my go.  Can I play?
X */
X		if (goodgo(whoseturn)) {
X			SCOREUP(whoseturn, 1);
X			resetgo();
X			handover = !nleft[0] && !nleft[1];
X			return;
X		}
X		else mvwprintw(Prompt, 1, 0, "Select a card.\n");
X	}
X	else if (!nleft[whoseturn]) {
X		handover = !nleft[0] && !nleft[1];
X		if (handover) SCOREUP(whoseturn, 1);
X		return;
X	}
X	else if (whosego == !whoseturn) return;
X	else mvwprintw(Prompt, 1, 0, "Select a card, or type \"g\" for go.");
X	for (;;) {
X		mvwaddch(Prompt, 1, 41, '\n');
X		wrefresh(Prompt);
X		k = wgetch(Prompt);
X		k = (isupper(k) ? tolower(k) : k);
X		if (k == 'g') {
X			if (goodgo(whoseturn)) {
X				whosego = !whoseturn;
X				return;
X			}
X			else beep();
X		}
X		else if (k < 'a' || k > 'd') beep();
X		else if (goodplay(whoseturn, k-'a')) break;
X		else beep();
X	}
X	werase(Prompt);
X	played[whoseturn][k-'a'] = 1;
X	count += rankvalue[RANK(hand[whoseturn][k-'a'])];
X	go[gocount++] = hand[whoseturn][k-'a'];
X	nleft[whoseturn] -= 1;
X	sco = playscore();
X	showhplay(k-'a', sco);
X	if (sco) SCOREUP(whoseturn, sco);
X	handover = !nleft[0] && !nleft[1];
X	if (count==31) resetgo();
X	else if (handover) {
X		mvwprintw(Prompt, 0, 0, "That's a Go\n");
X		SCOREUP(whoseturn, 1);
X	}
X	sleep(1);
X}
END_OF_human.c
if test 2424 -ne `wc -c <human.c`; then
    echo shar: \"human.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f logaux.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"logaux.c\"
else
echo shar: Extracting \"logaux.c\" \(173 characters\)
sed "s/^X//" >logaux.c <<'END_OF_logaux.c'
X#include "defs.h"
X
Xint
Xcindex(a, b)
XCARD a, b;
X{
X	register t, u;
X	t = RANK(a);
X	u = RANK(b);
X	if (t < u) {
X		t = RANK(b);
X		u = RANK(a);
X	}
X	return u - 1 + (t * (t-1))/2;
X}
END_OF_logaux.c
if test 173 -ne `wc -c <logaux.c`; then
    echo shar: \"logaux.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f logglobs.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"logglobs.c\"
else
echo shar: Extracting \"logglobs.c\" \(1136 characters\)
sed "s/^X//" >logglobs.c <<'END_OF_logglobs.c'
Xfloat	distable[2][91] = {
X6.290,5.028,6.490,5.092,7.256,6.744,5.776,5.297,5.917,6.699,6.083,6.181,
X6.734,7.222,9.463,4.993,5.068,4.909,5.277,7.528,7.152,5.177,5.145,5.070,
X4.969,7.061,6.503,7.451,4.954,4.970,4.963,4.922,6.283,5.951,8.103,6.808,
X4.725,4.810,4.826,4.745,6.170,6.434,5.402,5.959,6.536,4.504,4.610,4.586,
X4.485,7.476,4.332,4.465,5.043,5.568,6.114,4.786,4.893,4.869,4.767,7.758,
X4.615,4.826,4.678,5.140,5.478,6.666,4.360,4.467,4.443,4.341,7.332,4.189,
X4.400,4.310,4.089,4.564,5.359,5.824,4.211,4.318,4.294,4.192,7.184,4.040,
X4.251,4.162,4.019,3.763,4.650,4.290,5.526,5.580,4.339,5.966,4.585,7.183,
X6.102,5.596,4.545,4.892,5.808,5.562,5.583,6.039,6.501,8.909,3.868,3.876,
X3.839,3.818,6.538,5.846,3.784,3.856,3.678,3.797,5.986,4.795,5.945,3.730,
X3.644,3.879,3.830,5.490,4.448,6.535,5.380,3.453,3.780,3.828,3.780,5.477,
X5.234,3.940,4.531,5.259,3.462,3.602,3.650,3.601,6.725,3.089,3.069,3.742,
X4.130,4.878,3.746,3.886,3.934,3.885,7.009,3.372,3.406,3.348,3.933,4.530,
X5.435,3.534,3.673,3.722,3.672,6.797,3.160,3.194,3.194,3.086,3.336,4.858,
X5.005,3.531,3.671,3.719,3.670,6.794,3.158,3.192,3.191,3.126,2.889,4.031,
X3.469,5.003
X};
END_OF_logglobs.c
if test 1136 -ne `wc -c <logglobs.c`; then
    echo shar: \"logglobs.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f logglobs.h -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"logglobs.h\"
else
echo shar: Extracting \"logglobs.h\" \(30 characters\)
sed "s/^X//" >logglobs.h <<'END_OF_logglobs.h'
Xextern	float	distable[2][91];
END_OF_logglobs.h
if test 30 -ne `wc -c <logglobs.h`; then
    echo shar: \"logglobs.h\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f nobs.6 -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"nobs.6\"
else
echo shar: Extracting \"nobs.6\" \(632 characters\)
sed "s/^X//" >nobs.6 <<'END_OF_nobs.6'
X.de QU
X.ie t ``\\$1''\\$2
X.el "\\$1"\\$2
X..
X.TH NOBS 6 "10 March 1988" "" "Local UNIX Programmer's Manual"
X.SH NAME
Xnobs \- cribbage game
X.SH SYNOPSIS
X.B nobs
X[
X.B \-v
X]
X.SH DESCRIPTION
XWith no arguments,
X.I cribbage
Xplays screen-oriented games of cribbage with you.
XYou select cards by typing a letter from
X.QU a
Xto
X.QU f .
XThe program keeps score.
XGame is 121 points.
X.PP
XIf you specify
X.BR \-v ,
X.I cribbage
Xprints the version number and exits.
X.SH WARNING
XThis program has been around a long time, having started out 
Xin FORTRAN on a CDC 6400.
XIt is a dangerous opponent.
X.SH AUTHOR
XG. L. Sicherman  (ihnp4\^!\^odyssey\^!\^gls)
END_OF_nobs.6
if test 632 -ne `wc -c <nobs.6`; then
    echo shar: \"nobs.6\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f nobs.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"nobs.c\"
else
echo shar: Extracting \"nobs.c\" \(672 characters\)
sed "s/^X//" >nobs.c <<'END_OF_nobs.c'
X/*
X *	nobs - play cribbage.
X */
X
X#include <stdio.h>
X#include "defs.h"
X#include "globs.h"
X
Xextern	int	programdiscard();
Xextern	int	humandiscard();
X
Xusage()
X{
X	fprintf(stderr,"usage: nobs [-v]\n");
X	exit(-1);
X}
X
Xmain(argc,argv)
Xint argc;
Xchar **argv;
X{
X	while (--argc) {
X		if ('-'==**++argv) switch(*++*argv) {
X		case 'v':
X			printf("Nobs Version %s\n", version);
X			exit(0);
X		default:
X			usage();
X		}
X		else break;
X	}
X	if (argc) usage();
X	initrand();
X	initwins();
X	dealer = randint(2);
X	playertype[0] = PROGRAM;
X	playertype[1] = HUMAN;
X	dscfunc[PROGRAM] = programdiscard;
X	dscfunc[HUMAN] = humandiscard;
X	for (quitflag=0; !quitflag; ) playgame();
X	termwins();
X	exit(0);
X}
END_OF_nobs.c
if test 672 -ne `wc -c <nobs.c`; then
    echo shar: \"nobs.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f pegs.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"pegs.c\"
else
echo shar: Extracting \"pegs.c\" \(1156 characters\)
sed "s/^X//" >pegs.c <<'END_OF_pegs.c'
X#include "defs.h"
X#include "globs.h"
X#include "window.h"
X
Xint
Xpegcol(n)
Xint n;
X{
X	if (n==0) return 0;
X	else if (n<31) return n+(n+4)/5;
X	else return 74-n-(n+4)/5;
X}
X
Xresetpegs()
X{
X	int i, j;
X	for (i=0; i<2; i++) for (j=0; j<2; j++) {
X		if (peg[i][j] != 0)
X		mvwaddch(Board, 2*i, pegcol(peg[i][j]), ':');
X	}
X	for (i=0; i<2; i++) mvwaddch(Board, 2*i, 0, '|');
X	wrefresh(Board);
X}
X
Xsetpegs(who)
XPLAYER	who;
X{
X/*
X *	The first peg in the array is the forward peg.
X */
X
X/*	Pick up the hindward peg.  */
X	if (peg[who][0] == 0) mvwaddch(Board, 2*who, 0, who? '!': ';');
X	else if (peg[who][1] + peg[who][0] == 61)
X		mvwaddch(Board, 2*who, pegcol(peg[who][1]),
X		(peg[who][1]>30)==who? ';': '!');
X	else mvwaddch(Board, 2*who, pegcol(peg[who][1]), ':');
X/*
X *	Put it down again.
X */
X	peg[who][1] = peg[who][0];
X	if (score[who] > 120) peg[who][0] = 0;
X	else peg[who][0] = 1+(score[who]-1)%60;
X	if (peg[who][0]==0) mvwaddch(Board, 2*who, 0, who? '!': ';');
X	else if (peg[who][0] + peg[who][1] == 61)
X		mvwaddch(Board, 2*who, pegcol(peg[who][0]), '|');
X	else mvwaddch(Board, 2*who, pegcol(peg[who][0]),
X		(peg[who][0]>30)==who? '!': ';');
X	wrefresh(Board);
X	sleep(1);
X}
END_OF_pegs.c
if test 1156 -ne `wc -c <pegs.c`; then
    echo shar: \"pegs.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f play.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"play.c\"
else
echo shar: Extracting \"play.c\" \(1823 characters\)
sed "s/^X//" >play.c <<'END_OF_play.c'
X#include "defs.h"
X#include "globs.h"
X#include "window.h"
X
Xstatic	taketurn();
X
Xplaygame()
X{
X	char k;
X	score[0]=score[1]=0;
X	resetpegs();
X	for (gameover=0; !gameover; ) playhand();
X	mvwprintw(Prompt, 0, 0, score[0]>120? "I win.\n": "You win.\n");
X	wrefresh(Prompt);
X	sleep(2);
X	mvwprintw(Prompt, 1, 0, "Another game?\n");
X	wmove(Prompt, 1, 41);
X	wrefresh(Prompt);
X	k = wgetch(Prompt);
X	if (k != 'y' && k != 'Y') quitflag = 1;
X}
X
Xplayhand()
X{
X	int i, j;
X	dealer = !dealer;
X	deal();
X	werase(Pscore);
X	werase(Hscore);
X	showhand();
X	ncrib=0;
X	for (i=0; i<2; i++) {
X		(*dscfunc[playertype[i]])(hand[i], i==dealer);
X	}
X	showfour();
X	showcut();
X	if (RANK(cut)==KNAVE) {
X		mvwprintw(Prompt, 1, 0, "Two for His Heels\n");
X		wrefresh(Prompt);
X		sleep(2);
X		SCOREUP(dealer, 2);
X		sleep(1);
X	}
X	whoseturn = dealer;	/* to be reversed */
X	handover = 0;
X	nleft[0]=nleft[1]=4;
X	resetgo();
X	for (i=0; i<2; i++) for (j=0; j<4; j++) played[i][j]=0;
X	while (!gameover && !handover) taketurn();
X	if (gameover) return;
X	gamescore();
X}
X
Xstatic
Xtaketurn()
X{
X	whoseturn = !whoseturn;
X	switch (playertype[whoseturn]) {
X	case HUMAN:
X		humanplay();
X		break;
X	case PROGRAM:
X		programplay();
X		break;
X	}
X}
X
Xint
Xgoodgo(who)
Xint who;
X{
X	int i;
X	for (i=0; i<4; i++) if (goodplay(who, i)) return 0;
X	return 1;
X}
X
Xint
Xgoodplay(who, which)
Xint who, which;
X{
X	return !played[who][which] &&
X	rankvalue[RANK(hand[who][which])] + count <= 31;
X}
X
Xresetgo() {
X	count=gocount=0;
X	whosego = -1;
X	mvwprintw(Prompt, 0, 0, "0.\n");
X	wrefresh(Prompt);
X}
X
X/*
X *	Returns nonzero if wins.
X */
Xscoreup(who, n)
Xint who, n;
X{
X	score[who] += n;
X	setpegs(who);
X	return (score[who] > 120);
X}
X
X/*
X *	assumes a<b.
X */
X
Xmakediscard(hand, a, b)
Xint a, b;
XCARD hand[];
X{
X	crib[ncrib++] = hand[a];
X	crib[ncrib++] = hand[b];
X	hand[b]=hand[5];
X	hand[a]=hand[4];	/* In this order only. */
X}
END_OF_play.c
if test 1823 -ne `wc -c <play.c`; then
    echo shar: \"play.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f playscore.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"playscore.c\"
else
echo shar: Extracting \"playscore.c\" \(968 characters\)
sed "s/^X//" >playscore.c <<'END_OF_playscore.c'
X#include "defs.h"
X#include "globs.h"
X
Xint
Xplayscore()
X{
X	int hold, low;
X	hold = 0;
X	if (count == 15 || count == 31) hold=2;
X	if (gocount > 1 && RANK(go[gocount-2])==RANK(go[gocount-1])) {
X		hold += 2;
X		if (gocount > 2 && RANK(go[gocount-3])==RANK(go[gocount-2])) {
X			hold += 4;
X			if (gocount > 3 && RANK(go[gocount-4])==
X			RANK(go[gocount-3])) hold += 6;
X		}
X		return hold;	/* No need to check for runs */
X	}
X	if (gocount < 3) return hold;
X	for (low=0; low<gocount-2; low++)
X	if (isplrun(low, gocount-low)) return hold+gocount-low;
X	return hold;
X}
X
Xint
Xisplrun(start, num)
Xint start, num;
X{
X	int highest, lowest, i;
X	register mask;
X	lowest = KING;
X	highest = ACE;
X	for (i=start; i<start+num; i++) {
X		if (RANK(go[i])>highest) highest=RANK(go[i]);
X		if (RANK(go[i])<lowest) lowest=RANK(go[i]);
X	}
X	if (highest != lowest+num-1) return 0;
X/*
X *	Use a mask.
X */
X	mask = (1<<num)-1;
X	for (i=start; i<start+num; i++) mask &= ~(1<<(RANK(go[i])-lowest));
X	return !mask;
X}
END_OF_playscore.c
if test 968 -ne `wc -c <playscore.c`; then
    echo shar: \"playscore.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f progaux.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"progaux.c\"
else
echo shar: Extracting \"progaux.c\" \(1499 characters\)
sed "s/^X//" >progaux.c <<'END_OF_progaux.c'
X#include "defs.h"
X#include "globs.h"
X#include "logglobs.h"
X
Xfloat evaldiscard();
X
Xbestdis(hand, mydeal, aw, bw)
XCARD hand[];
Xint mydeal;
Xint *aw, *bw;
X{
X	float best, new;
X	int a, b;
X	best = -999.0;
X	for (a=0; a<5; a++) for (b=a+1; b<6; b++) {
X		new = evaldiscard(hand, mydeal, a, b);
X		if (new>best) {
X			best=new;
X			*aw=a;
X			*bw=b;
X		}
X	}
X}
X
Xfloat
Xevaldiscard(hand, mydeal, j1, j2)
XCARD	hand[];
Xint	mydeal, j1, j2;
X{
X	float retval, disval;
X	CARD holdhand[5], *hp;
X	int k;
X	int cutrank;
X/*
X *	Evaluate the remaining hand.
X */
X	retval = 0.0;
X	hp=holdhand;
X	for (k=0; k<6; k++) if (k!=j1 && k!=j2) *hp++ = hand[k];
X	for (cutrank=ACE; cutrank<=KING; cutrank++) {
X		*hp = (CABBAGE<<4) | cutrank;
X		retval += 4 * evalhand(holdhand, 1, -1);
X	}
X	retval /= 52;
X	disval = distable[mydeal][cindex(hand[j1],hand[j2])];
X	if (!mydeal) disval= -disval;
X	retval += disval;
X	return retval;
X}
X
X/*
X *	This isn't supposed to be a world-class strategy.
X */
Xint
Xevalplay(c)
XCARD c;
X{
X	int v;
X	v = rankvalue[RANK(c)];
X	if (count+v == 15 || count+v == 31) return 20;
X	if (gocount && RANK(go[gocount-1])==RANK(c)) {
X		if (gocount>1 && RANK(go[gocount-2])==RANK(c)) return 30;
X		if (gocount>3 || randint(5)) return 15;
X	}
X	if (gocount>1 &&
X	isrun(RANK(go[gocount-1]),RANK(go[gocount-2]), RANK(c))) return 25;
X	if (gocount && 2==abs(RANK(c)-RANK(go[gocount-1]))) return -10;
X	if (count+v <= 4) return 10+count+v;
X	if (count>20) return v;
X	return 0;
X}
X
Xint
Xisrun(a,b,c)
Xint a,b,c;
X{
X	return 4==abs(a-b)+abs(a-c)+abs(b-c);
X}
END_OF_progaux.c
if test 1499 -ne `wc -c <progaux.c`; then
    echo shar: \"progaux.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f program.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"program.c\"
else
echo shar: Extracting \"program.c\" \(1784 characters\)
sed "s/^X//" >program.c <<'END_OF_program.c'
X/*
X *	The program's strategy.
X */
X
X#include "defs.h"
X#include "globs.h"
X#include "logglobs.h"
X#include "window.h"
X
Xfloat	evaldiscard();
X
Xprogramdiscard(ehand, mydeal)
XCARD ehand[];
Xint mydeal;
X{
X	int aw, bw;
X	bestdis(ehand, mydeal, &aw, &bw);
X	makediscard(ehand, aw, bw);
X	mvwaddch(Programhand, 0, 5*4, '\n');
X	mvwprintw(Crib, 0, 0, "XXX  XXX\n");
X	wrefresh(Crib);
X}
X
Xprogramplay()
X{
X	int t, u, v;
X	int bestplay, bestval;
X	if (goodgo(whoseturn)) {
X/*
X *	No legal plays.
X */
X		handover = !nleft[0] && !nleft[1];
X/*
X *	Case I - it's nobody's go yet.
X */
X		if (whosego < 0) {
X			if (handover) {
X				SCOREUP(whoseturn, 1);
X			}
X			else {
X/*
X *	Can't play - it's now the human's go.
X */
X				whosego = !whoseturn;
X/*
X *	If I have no cards, there's no need to say "go."
X */
X				if (nleft[whoseturn]) {
X					mvwprintw(Prompt, 0, 11, "Go.\n");
X					wrefresh(Prompt);
X					sleep(1);
X				}
X			}
X		}
X		else if (whosego==whoseturn) {
X/*
X *	Case II - it's my go.
X */
X			SCOREUP(whoseturn, 1);
X			if (!handover) resetgo();
X		}
X		return;
X	}
X/*
X *	I can play.  Pick an appropriate play.
X */
X	bestval = -999;
X	for (t=0; t<4; t++) if (goodplay(whoseturn, t)) {
X		if ((v=evalplay(hand[whoseturn][t])) > bestval) {
X			bestval=v;
X			bestplay=t;
X		}
X	}
X	makeprogplay(bestplay);
X	return;
X}
X
Xmakeprogplay(t)
Xint t;
X{
X	int sco;
X	nleft[whoseturn] -= 1;
X	played[whoseturn][t]=1;
X	count += rankvalue[RANK(hand[whoseturn][t])];
X	go[gocount++] = hand[whoseturn][t];
X	sco = playscore();
X	showpplay(whoseturn, t, sco);
X	if (sco) SCOREUP(whoseturn, sco);
X/*
X *	Say Go to myself?
X */
X	if (!nleft[!whoseturn]) whosego=whoseturn;
X	handover = !nleft[0] && !nleft[1];
X	if (count==31) resetgo();
X	else if (handover) {
X		mvwprintw(Prompt, 1, 0, "That's a Go\n");
X		wrefresh(Prompt);
X		sleep(1);
X		SCOREUP(whoseturn, 1);
X	}
X}
END_OF_program.c
if test 1784 -ne `wc -c <program.c`; then
    echo shar: \"program.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f show.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"show.c\"
else
echo shar: Extracting \"show.c\" \(2076 characters\)
sed "s/^X//" >show.c <<'END_OF_show.c'
X#include "defs.h"
X#include "globs.h"
X#include "window.h"
X
Xchar *
Xcardname(c)
XCARD c;
X{
X	static char hold[4];
X	sprintf(hold, "%2s%s", rankrdr[RANK(c)], suitrdr[SUIT(c)]);
X	return hold;
X}
X
Xshowhand()
X/*
X *	If a player is human, it's always player 1.
X */
X{
X	int i;
X	for (i=0; i<6; i++) mvwprintw(Programhand, 0, 5*i, "XXX");
X	for (i=0; i<6; i++) mvwprintw(Humanhand, 2, 5*i, cardname(hand[1][i]));
X	mvwprintw(Programhand, 2, 0, "\n");
X	mvwprintw(Humanhand, 0, 0, "\n");
X	werase(Cut);
X	werase(Crib);
X	werase(Pscore);
X	werase(Hscore);
X	werase(Select);
X	wrefresh(Cut);
X	wrefresh(Crib);
X	wrefresh(Pscore);
X	wrefresh(Hscore);
X	wrefresh(Select);
X	wrefresh(Programhand);
X	wrefresh(Humanhand);
X}
X
Xshowfour()
X{
X	int i;
X	werase(Humanhand);
X	for (i=0; i<4; i++) mvwprintw(Humanhand, 2, 5*i, cardname(hand[1][i]));
X	waddch(Humanhand,'\n');
X	for (i=2; i<4; i++) mvwprintw(Crib, 0, 5*i, "XXX  ");
X	for (i=0; i<4; i++) mvwaddch(Select, 0, 5*i+2, 'a'+i);
X
X	wrefresh(Humanhand);
X	wrefresh(Crib);
X	wrefresh(Select);
X}
X
Xshowpplay(who, i, scored)
Xint who, i, scored;
X{
X	mvwprintw(Programhand, 0, 5*i, "   ");
X	mvwprintw(Programhand, 2, 5*(3-nleft[who]), cardname(hand[who][i]));
X	if (scored) mvwprintw(Prompt, 0, 0, "%d for %d.\n", count, scored);
X	else mvwprintw(Prompt, 0, 0, "%d.\n", count);
X	wrefresh(Programhand);
X	wrefresh(Prompt);
X	sleep(2);
X}
X
Xshowhplay(i, scored)
Xint i, scored;
X{
X	mvwprintw(Humanhand, 2, 5*i, "   ");
X	mvwprintw(Humanhand, 0, 5*(3-nleft[1]), cardname(hand[1][i]));
X	if (scored) mvwprintw(Prompt, 0, 0, "%d for %d.\n", count, scored);
X	else mvwprintw(Prompt, 0, 0, "%d.\n", count);
X	wrefresh(Humanhand);
X	wrefresh(Prompt);
X}
X
Xshowcut()
X{
X	mvwprintw(Prompt, 0, 0, playertype[dealer]==HUMAN? "I cut:\n":
X		"You cut:\n");
X	mvwaddch(Prompt, 1, 0, '\n');
X	wrefresh(Prompt);
X	sleep(1);
X	mvwprintw(Prompt, 1, 0, "the %s of %s\n",
X		rankname[RANK(cut)], suitname[SUIT(cut)]);
X	mvwprintw(Cut, 0, 0, cardname(cut));
X	wrefresh(Prompt);
X	wrefresh(Cut);
X	sleep(1);
X}
X
Xexposecrib()
X{
X	int i;
X	for (i=0; i<6; i++) mvwprintw(Crib, 0, 5*i, cardname(crib[i]));
X	wrefresh(Crib);
X	sleep(1);
X}
END_OF_show.c
if test 2076 -ne `wc -c <show.c`; then
    echo shar: \"show.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f shuf.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"shuf.c\"
else
echo shar: Extracting \"shuf.c\" \(811 characters\)
sed "s/^X//" >shuf.c <<'END_OF_shuf.c'
X/*
X *	shuf - shuffle the pack.
X */
X
X#include "defs.h"
X#include "globs.h"
X
X#ifdef	BSD
Xint	srand();
Xint	rand();
X#else
Xvoid	srand48();
Xdouble	drand48();
X#endif
X
Xstatic	makepack();
X
Xvoid
Xshuf()
X{
X	int j, k;
X	CARD dummy;
X	if (!packmade) makepack();
X	for (j=51; j>=39; j--) {
X		k = randint(j+1);
X		dummy = pack[k];
X		pack[k] = pack[j];
X		pack[j] = dummy;
X	}
X}
X
Xstatic
Xmakepack()
X{
X	int suit, rank;
X	CARD *packp;
X	packp = pack;
X	for (suit=CLUB; suit<=SPADE; suit++)
X	for (rank=ACE; rank<=KING; rank++)
X		*packp++ = MAKECARD(rank,suit);
X}
X
Xinitrand()
X{
X	long time();
X#ifdef	BSD
X	srand(time((long *)0));
X	rand();
X#else
X	srand48(time((long *)0));
X	drand48();
X#endif
X}
X
X/*
X *	Returns a random integer from 0 to n-1.
X */
Xint
Xrandint(n)
Xint n;
X{
X#ifdef	BSD
X	return (rand()/3) % n;
X#else
X	return (int)(drand48()*n);
X#endif
X}
END_OF_shuf.c
if test 811 -ne `wc -c <shuf.c`; then
    echo shar: \"shuf.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f version.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"version.c\"
else
echo shar: Extracting \"version.c\" \(24 characters\)
sed "s/^X//" >version.c <<'END_OF_version.c'
Xchar	version[] = "1.0";
END_OF_version.c
if test 24 -ne `wc -c <version.c`; then
    echo shar: \"version.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f wglobs.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"wglobs.c\"
else
echo shar: Extracting \"wglobs.c\" \(167 characters\)
sed "s/^X//" >wglobs.c <<'END_OF_wglobs.c'
X#include <curses.h>
X
XWINDOW	*Crib;
XWINDOW	*Select;
XWINDOW	*Board;
XWINDOW	*Cut;
XWINDOW	*Hscore;
XWINDOW	*Humanhand;
XWINDOW	*Programhand;
XWINDOW	*Prompt;
XWINDOW	*Pscore;
END_OF_wglobs.c
if test 167 -ne `wc -c <wglobs.c`; then
    echo shar: \"wglobs.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f window.c -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"window.c\"
else
echo shar: Extracting \"window.c\" \(690 characters\)
sed "s/^X//" >window.c <<'END_OF_window.c'
X#include "defs.h"
X#include "globs.h"
X#include "window.h"
X
Xinitwins()
X{
X	initscr();
X	Humanhand = subwin(stdscr, 3, 29, 16, 30);
X	Programhand = subwin(stdscr, 3, 28, 5, 30);
X	Prompt = subwin(stdscr, 2, 72, 22, 5);
X	Select = subwin(stdscr, 1, 28, 19, 30);
X	Crib = subwin(stdscr, 1, 20, 12, 1);
X	Cut = subwin(stdscr, 1, 3, 12, 66);
X	Hscore = subwin(stdscr, 5, 27, 15, 0);
X	Pscore = subwin(stdscr, 5, 27, 2, 0);
X	scrollok(Hscore, TRUE);
X	scrollok(Pscore, TRUE);
X	Board = subwin(stdscr, 3, 37, 11, 28);
X	initboard();
X}
X
Xinitboard()
X{
X	int i;
X	for (i=0; i<37; i++) if (1 != (i%6)) {
X		mvwaddch(Board, 0, i, ':');
X		mvwaddch(Board, 2, i, ':');
X	}
X}
X
Xtermwins()
X{
X	clear();
X	refresh();
X	endwin();
X}
END_OF_window.c
if test 690 -ne `wc -c <window.c`; then
    echo shar: \"window.c\" unpacked with wrong size!
fi
# end of overwriting check
fi
if test -f window.h -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"window.h\"
else
echo shar: Extracting \"window.h\" \(229 characters\)
sed "s/^X//" >window.h <<'END_OF_window.h'
X#include <curses.h>
Xextern	WINDOW	*Crib;
Xextern	WINDOW	*Board;
Xextern	WINDOW	*Select;
Xextern	WINDOW	*Cut;
Xextern	WINDOW	*Hscore;
Xextern	WINDOW	*Humanhand;
Xextern	WINDOW	*Programhand;
Xextern	WINDOW	*Prompt;
Xextern	WINDOW	*Pscore;
END_OF_window.h
if test 229 -ne `wc -c <window.h`; then
    echo shar: \"window.h\" unpacked with wrong size!
fi
# end of overwriting check
fi
echo shar: End of archive 1 \(of 1\).
cp /dev/null ark1isdone
MISSING=""
for I in 1 ; do
    if test ! -f ark${I}isdone ; then
	MISSING="${MISSING} ${I}"
    fi
done
if test "${MISSING}" = "" ; then
    echo You have unpacked all 1 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