games@tekred.TEK.COM (05/21/88)
Submitted by: ihnp4!odyssey!gls (g.l.sicherman)
Comp.sources.games: Volume 4, Issue 13
Archive-name: nobs2
[This is an update of a previously posted nobs game
(v04i002). -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 Fri May 20 14:55:12 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\" \(1088 characters\)
sed "s/^X//" >README <<'END_OF_README'
X This is C version 1.1 of the Colonel's Cribbage
XProgram. (It originally ran in FORTRAN IV on a CDC,
Xback in the 70's.) Cribbage is a card game invented
Xby Sir John Suckling (1609-1642), and if you don't know
Xthe rules, this program will either delight you or
Xgive you a headache, depending on your temperament.
X
X Changes from version 1.0:
X
X1. Add -h option.
X2. Refine discard algorithm to agree with the original.
X3. Fix and tweak screen interface bugs.
X4. Fix bug in scoring pairs of aces.
X5. Add O.S. and related configuration options to Makefile.
X
X All configurables are in the Makefile. Besides the
XOS dependencies, there are two installation options:
X
X1. Suppress the -h (hint) command-line option.
X2. Use 'g' instead of carriage-return when discarding.
X
XIf you run under Xenix, you will probably need option 2.
XThis release works under Ultrix; the previous release did
Xnot.
X
X As before, feed back to ihnp4!odyssey!gls. Bug reports
Xare welcome. Suggestions for enhancements may be welcome,
Xbut bells and whistles would be out of place.
X
XRed Hill Road
XApril 9, 1988
END_OF_README
if test 1088 -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\" \(1757 characters\)
sed "s/^X//" >Makefile <<'END_OF_Makefile'
X# Makefile for nobs.
X# G. L. Sicherman (ihnp4!odyssey!gls). March 1988. April 1988.
X# BSD fixes by saab!billr.
X# Xenix fixes by 1solaria!gordon.
X#-------
X# CONFIGURABLE PARAMETERS:
X
X# Define destinations for executable and manpage:
XBINDEST=$$HOME/bin/nobs
XMANDEST=$$HOME/man/nobs.6
X
X# Define BSD for Berkeley, Sun, Xenix, etc.
X# BSDFLAG= -DBSD
XBSDFLAG=
X
X# Define FLOAT for systems that need a floating-point
X# interpreter linked in. (3b5, Unix(TM) PC (?), etc.)
X# FLOAT= -f
XFLOAT=
X
X# If BSD or Xenix, you need -ltermcap.
X# If Xenix, you need -lx.
X# LIB= -lcurses -ltermcap -lx
XLIB= -lcurses
X
X# If Xenix, you need -Mm and -F 2000.
X# XFLGS= -Mm -F 2000
XXFLGS=
X
X# Define NOHINT to disable the -h option.
X# NOHINTFLAG= -DNOHINT
XNOHINTFLAG=
X
X# Define GDISC to discard with 'g' instead of CR.
X# GDISCFLAG= -DGDISC
XGDISCFLAG=
X
X# End of configurable parameters. Good luck!
X
XCFLAGS= -O $(BSDFLAG) $(FLOAT) $(XFLGS) $(GDISCFLAG) $(NOHINTFLAG)
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 $(CFLAGS) -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 echo ".ds nh $(NOHINTFLAG)" > $(MANDEST)
X cat 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 1757 -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\" \(726 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 SAMERANK(x,y) (!((x^y)&0017))
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 726 -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=0; 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\" \(1014 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 hflag = 0;
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 1014 -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\" \(782 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 hflag;
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 782 -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\" \(3095 characters\)
sed "s/^X//" >human.c <<'END_OF_human.c'
X#include "defs.h"
X#include "globs.h"
X#include "window.h"
X
X#ifdef BSD
X#include <ctype.h>
X#endif
X
Xstatic char selected[6];
Xstatic int nselected;
X
Xhumandiscard(hand, mydeal)
XCARD hand[];
Xint mydeal;
X{
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#ifdef GDISC
X mvwprintw(Prompt, 1, 0, "Select 2 cards. Type \"g\" to discard.\n");
X#else
X mvwprintw(Prompt, 1, 0, "Select 2 cards. Type RETURN to discard.\n");
X#endif
X if (hflag) {
X mvwprintw(Hscore, 0, 0, "Type \"h\" for hint\n");
X wrefresh(Hscore);
X }
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 = tolower(k);
X#ifdef GDISC
X if ('g'==k) {
X#else
X if ('\n'==k || '\r'==k) {
X#endif
X if (nselected == 2) break;
X beep();
X continue;
X }
X if (hflag && k == 'h') {
X hint(hand, mydeal);
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 if (hflag) {
X werase(Hscore);
X wrefresh(Hscore);
X }
X werase(Select);
X werase(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
Xhint(ihand, mydeal)
X{
X int a, b, k;
X bestdis(ihand, mydeal, &a, &b);
X for (k=0; k<6; k++) {
X selected[k] = k==a || k==b;
X mvwaddch(Humanhand, 2, 5*k+3, selected[k]? '*': ' ');
X }
X nselected = 2;
X werase(Hscore);
X wrefresh(Humanhand);
X wrefresh(Hscore);
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 = tolower(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}
X
X/*
X * This is pre-defined in Vr2 curses, but I'll just define it anyway.
X */
Xbeep()
X{
X putchar('\007');
X}
END_OF_human.c
if test 3095 -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\" \(742 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 "23 March 1988" "" "Local UNIX Programmer's Manual"
X.SH NAME
Xnobs \- cribbage game
X.SH SYNOPSIS
X.B nobs
X[
X.if '\*(nh'' \{\
X.B \-h
X] [\}
X.B \-v
X]
X.SH DESCRIPTION
XWith no arguments,
X.I nobs
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
X.if '\*(nh'' \{\
XIf you specify
X.BR \-h ,
X.I nobs
Xwill offer you hints on discarding.\}
XIf you specify
X.BR \-v ,
X.I nobs
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 742 -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\" \(801 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#ifdef NOHINT
X fprintf(stderr,"usage: nobs [-v]\n");
X#else
X fprintf(stderr,"usage: nobs [-h] [-v]\n");
X#endif
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#ifndef NOHINT
X case 'h':
X hflag = 1;
X break;
X#endif
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 801 -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\" \(1181 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 peg[i][j] = 0;
X }
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 1181 -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\" \(1873 characters\)
sed "s/^X//" >progaux.c <<'END_OF_progaux.c'
X/*
X * nobs - auxiliary program strategy functions.
X * G. L. Sicherman.
X */
X
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[6];
Xint mydeal, j1, j2;
X{
X float retval, disval;
X CARD holdhand[5], *hp;
X int k, m, v;
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 holdhand[4] = MAKECARD(cutrank, CABBAGE);
X v = evalhand(holdhand, 1, -1);
X retval += 4 * v;
X for (m=0; m<6; m++)
X if (SAMERANK(hand[m], holdhand[4])) retval -= v;
X }
X retval /= 46;
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/*
X * Are we setting human up for a 15?
X */
X if (count+v == 5) return -11;
X/*
X * Are we setting human up for a 31?
X */
X if (count+v == 21) return -9;
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/*
X * Are we setting human up for a run?
X */
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 1873 -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\" \(2213 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(Programhand);
X wrefresh(Crib);
X}
X
Xprogramplay()
X{
X int t, u, v;
X int bestplay, bestval;
X/*
X * Case I: It's the human's go. Sit tight.
X */
X if (whosego == !whoseturn) return;
X/*
X * Case II: It's my go, and I can't play. Just score the
X * go and reset.
X */
X if (whosego==whoseturn && goodgo(whoseturn)) {
X/*
X * If I have cards and human does not, explain to human.
X */
X if (nleft[whoseturn] && !nleft[!whoseturn]) {
X mvwprintw(Prompt, 1, 0, "That's a Go\n");
X wrefresh(Prompt);
X sleep(1);
X }
X SCOREUP(whoseturn, 1);
X handover = !nleft[0] && !nleft[1];
X if (!handover) resetgo();
X return;
X }
X/*
X * Case III: It's nobody's go yet, and I can't play.
X * Human still has cards, or we shouldn't be here.
X * Say "go".
X */
X if (goodgo(whoseturn)) {
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 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}
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]) { /* That was my last card. */
X handover = !nleft[!whoseturn];
X if (handover && count != 31) SCOREUP(whoseturn, 1);
X if (!handover && (whosego==whoseturn || count==31)) resetgo();
X return;
X }
X if (!nleft[!whoseturn]) whosego=whoseturn; /* Human out of cards */
X if (whosego != whoseturn) {
X if (count==31) resetgo();
X return; /* Give human a chance */
X }
X}
END_OF_program.c
if test 2213 -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.1";
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