summaryrefslogtreecommitdiffstats
path: root/backgammon
diff options
context:
space:
mode:
authordholland <dholland@NetBSD.org>2012-10-13 19:19:38 +0000
committerdholland <dholland@NetBSD.org>2012-10-13 19:19:38 +0000
commit83f2ef7227030c4b88ec1006e49d9304aa6f7be0 (patch)
tree0f69865c3aa850090b15e95a6ae7a6d599c95e11 /backgammon
parentf70c1c7e831fd972c1f452e87709f5fe158e6f4d (diff)
downloadbsdgames-darwin-83f2ef7227030c4b88ec1006e49d9304aa6f7be0.tar.gz
bsdgames-darwin-83f2ef7227030c4b88ec1006e49d9304aa6f7be0.tar.zst
bsdgames-darwin-83f2ef7227030c4b88ec1006e49d9304aa6f7be0.zip
Pass the move info around instead of using it as a global.
Diffstat (limited to 'backgammon')
-rw-r--r--backgammon/backgammon/backlocal.h4
-rw-r--r--backgammon/backgammon/main.c47
-rw-r--r--backgammon/backgammon/move.c17
-rw-r--r--backgammon/common_source/allow.c19
-rw-r--r--backgammon/common_source/back.h37
-rw-r--r--backgammon/common_source/check.c28
-rw-r--r--backgammon/common_source/init.c16
-rw-r--r--backgammon/common_source/one.c38
-rw-r--r--backgammon/common_source/save.c10
-rw-r--r--backgammon/common_source/subs.c21
-rw-r--r--backgammon/common_source/table.c47
-rw-r--r--backgammon/teachgammon/teach.c13
-rw-r--r--backgammon/teachgammon/tutor.c21
-rw-r--r--backgammon/teachgammon/tutor.h6
14 files changed, 163 insertions, 161 deletions
diff --git a/backgammon/backgammon/backlocal.h b/backgammon/backgammon/backlocal.h
index ae9a78b4..4a238b04 100644
--- a/backgammon/backgammon/backlocal.h
+++ b/backgammon/backgammon/backlocal.h
@@ -1,4 +1,4 @@
-/* $NetBSD: backlocal.h,v 1.4 2009/08/12 05:17:57 dholland Exp $ */
+/* $NetBSD: backlocal.h,v 1.5 2012/10/13 19:19:38 dholland Exp $ */
/*-
* Copyright (c) 1997 The NetBSD Foundation, Inc.
@@ -32,5 +32,5 @@
void dble(void);
int dblgood(void);
int freemen(int);
-void move(int);
+void move(struct move *, int);
int trapped(int, int);
diff --git a/backgammon/backgammon/main.c b/backgammon/backgammon/main.c
index d34636fd..8e38ce82 100644
--- a/backgammon/backgammon/main.c
+++ b/backgammon/backgammon/main.c
@@ -1,4 +1,4 @@
-/* $NetBSD: main.c,v 1.29 2012/10/13 18:44:14 dholland Exp $ */
+/* $NetBSD: main.c,v 1.30 2012/10/13 19:19:38 dholland Exp $ */
/*
* Copyright (c) 1980, 1993
@@ -39,7 +39,7 @@ __COPYRIGHT("@(#) Copyright (c) 1980, 1993\
#if 0
static char sccsid[] = "@(#)main.c 8.1 (Berkeley) 5/31/93";
#else
-__RCSID("$NetBSD: main.c,v 1.29 2012/10/13 18:44:14 dholland Exp $");
+__RCSID("$NetBSD: main.c,v 1.30 2012/10/13 19:19:38 dholland Exp $");
#endif
#endif /* not lint */
@@ -94,7 +94,7 @@ main(int argc __unused, char **argv)
int l; /* non-descript index */
char c; /* non-descript character storage */
time_t t; /* time for random num generator */
- struct move *mm = &gm;
+ struct move mmstore, *mm;
/* revoke setgid privileges */
setgid(getgid());
@@ -118,12 +118,15 @@ main(int argc __unused, char **argv)
t = time(NULL);
srandom(t); /* 'random' seed */
+ /* need this now beceause getarg() may try to load a game */
+ mm = &mmstore;
+ move_init(mm);
#ifdef V7
while (*++argv != 0) /* process arguments */
#else
while (*++argv != -1) /* process arguments */
#endif
- getarg(&argv);
+ getarg(mm, &argv);
args[acnt] = '\0';
if (tflag) { /* clear screen */
noech.c_oflag &= ~(ONLCR | OXTABS);
@@ -240,14 +243,14 @@ main(int argc __unused, char **argv)
for (;;) { /* begin game! */
/* initial roll if needed */
if ((!rflag) || raflag)
- roll();
+ roll(mm);
/* perform ritual of first roll */
if (!rflag) {
if (tflag)
curmove(17, 0);
while (mm->D0 == mm->D1) /* no doubles */
- roll();
+ roll(mm);
/* print rolls */
writel(rollr);
@@ -291,14 +294,14 @@ main(int argc __unused, char **argv)
/* do first move (special case) */
if (!(rflag && raflag)) {
if (cturn == pnum) /* computer's move */
- move(0);
+ move(mm, 0);
else { /* player's move */
- mm->mvlim = movallow();
+ mm->mvlim = movallow(mm);
/* reprint roll */
if (tflag)
curmove(cturn == -1 ? 18 : 19, 0);
- proll();
- getmove(); /* get player's move */
+ proll(mm);
+ getmove(mm); /* get player's move */
}
}
if (tflag) {
@@ -323,7 +326,7 @@ main(int argc __unused, char **argv)
/* do computer's move */
if (cturn == pnum) {
- move(1);
+ move(mm, 1);
/* see if double refused */
if (cturn == -2 || cturn == 2)
@@ -363,12 +366,12 @@ main(int argc __unused, char **argv)
/* save game */
case 'S':
raflag = 1;
- save(1);
+ save(mm, 1);
break;
/* quit */
case 'Q':
- quit();
+ quit(mm);
break;
/* double */
@@ -379,7 +382,7 @@ main(int argc __unused, char **argv)
/* roll */
case ' ':
case '\n':
- roll();
+ roll(mm);
writel(" rolls ");
writec(mm->D0 + '0');
writec(' ');
@@ -387,7 +390,7 @@ main(int argc __unused, char **argv)
writel(". ");
/* see if he can move */
- if ((mm->mvlim = movallow()) == 0) {
+ if ((mm->mvlim = movallow(mm)) == 0) {
/* can't move */
writel(toobad1);
@@ -403,7 +406,7 @@ main(int argc __unused, char **argv)
break;
}
/* get move */
- getmove();
+ getmove(mm);
/* okay to clean screen */
hflag = 1;
@@ -430,13 +433,13 @@ main(int argc __unused, char **argv)
} else {/* couldn't double */
/* print roll */
- roll();
+ roll(mm);
if (tflag)
curmove(cturn == -1 ? 18 : 19, 0);
- proll();
+ proll(mm);
/* can he move? */
- if ((mm->mvlim = movallow()) == 0) {
+ if ((mm->mvlim = movallow(mm)) == 0) {
/* he can't */
writel(toobad2);
@@ -448,7 +451,7 @@ main(int argc __unused, char **argv)
continue;
}
/* get move */
- getmove();
+ getmove(mm);
}
}
@@ -508,7 +511,7 @@ main(int argc __unused, char **argv)
if (i == 2) {
writel(" Save.\n");
cturn = 0;
- save(0);
+ save(mm, 0);
}
/* yes, reset game */
wrboard();
@@ -521,7 +524,7 @@ main(int argc __unused, char **argv)
/* re-initialize for recovery */
init();
cturn = 0;
- save(0);
+ save(mm, 0);
}
}
/* leave peacefully */
diff --git a/backgammon/backgammon/move.c b/backgammon/backgammon/move.c
index 6e1d4ce7..8a87fa00 100644
--- a/backgammon/backgammon/move.c
+++ b/backgammon/backgammon/move.c
@@ -1,4 +1,4 @@
-/* $NetBSD: move.c,v 1.11 2012/10/13 18:44:14 dholland Exp $ */
+/* $NetBSD: move.c,v 1.12 2012/10/13 19:19:38 dholland Exp $ */
/*
* Copyright (c) 1980, 1993
@@ -34,7 +34,7 @@
#if 0
static char sccsid[] = "@(#)move.c 8.1 (Berkeley) 5/31/93";
#else
-__RCSID("$NetBSD: move.c,v 1.11 2012/10/13 18:44:14 dholland Exp $");
+__RCSID("$NetBSD: move.c,v 1.12 2012/10/13 19:19:38 dholland Exp $");
#endif
#endif /* not lint */
@@ -100,11 +100,10 @@ static int movegood(void);
/* zero if first move */
void
-move(int okay)
+move(struct move *mm, int okay)
{
int i; /* index */
int l; /* last man */
- struct move *mm = &gm;
l = 0;
if (okay) {
@@ -116,7 +115,7 @@ move(int okay)
if (cturn != 1 && cturn != -1)
return;
}
- roll();
+ roll(mm);
}
race = 0;
for (i = 0; i < 26; i++) {
@@ -144,7 +143,7 @@ move(int okay)
fixtty(&noech);
/* find out how many moves */
- mm->mvlim = movallow();
+ mm->mvlim = movallow(mm);
if (mm->mvlim == 0) {
writel(" but cannot use it.\n");
nexturn();
@@ -167,7 +166,7 @@ move(int okay)
wrint(mm->p[i] = cp[i]);
writec('-');
wrint(mm->g[i] = cg[i]);
- makmove(i);
+ makmove(mm, i);
}
writec('.');
@@ -227,12 +226,12 @@ trymove(struct move *mm, int mvnum, int swapped)
mm->g[mvnum] = home;
}
/* try to move */
- if (makmove(mvnum))
+ if (makmove(mm, mvnum))
continue;
else
trymove(mm, mvnum + 1, 2);
/* undo move to try another */
- backone(mvnum);
+ backone(mm, mvnum);
}
/* swap dice and try again */
diff --git a/backgammon/common_source/allow.c b/backgammon/common_source/allow.c
index 2c0428d4..0cd24da2 100644
--- a/backgammon/common_source/allow.c
+++ b/backgammon/common_source/allow.c
@@ -1,4 +1,4 @@
-/* $NetBSD: allow.c,v 1.7 2012/10/13 18:44:14 dholland Exp $ */
+/* $NetBSD: allow.c,v 1.8 2012/10/13 19:19:38 dholland Exp $ */
/*
* Copyright (c) 1980, 1993
@@ -34,18 +34,17 @@
#if 0
static char sccsid[] = "@(#)allow.c 8.1 (Berkeley) 5/31/93";
#else
-__RCSID("$NetBSD: allow.c,v 1.7 2012/10/13 18:44:14 dholland Exp $");
+__RCSID("$NetBSD: allow.c,v 1.8 2012/10/13 19:19:38 dholland Exp $");
#endif
#endif /* not lint */
#include "back.h"
int
-movallow(void)
+movallow(struct move *mm)
{
int i, m, iold;
int r;
- struct move *mm = &gm;
if (mm->d0)
mswap(mm);
@@ -62,11 +61,11 @@ movallow(void)
mm->g[i] = bar + cturn * mm->D1;
else
mm->g[i] = bar + cturn * mm->D0;
- if ((r = makmove(i)) != 0) {
+ if ((r = makmove(mm, i)) != 0) {
if (mm->d0 || m == 4)
break;
mswap(mm);
- movback(i);
+ movback(mm, i);
if (i > iold)
iold = i;
for (i = 0; i < 4; i++)
@@ -80,7 +79,7 @@ movallow(void)
if (i > iold)
iold = i;
if (m == 2 && i) {
- movback(i);
+ movback(mm, i);
mm->p[i--] = bar;
if (mm->p[i] != bar)
continue;
@@ -90,7 +89,7 @@ movallow(void)
if (mm->d0 || m == 4)
break;
mswap(mm);
- movback(i);
+ movback(mm, i);
for (i = 0; i < 4; i++)
mm->p[i] = bar;
i = 0;
@@ -106,9 +105,9 @@ movallow(void)
else
continue;
}
- if (board[mm->p[i]] * cturn > 0 && (r = makmove(i)) == 0)
+ if (board[mm->p[i]] * cturn > 0 && (r = makmove(mm, i)) == 0)
i++;
}
- movback(i);
+ movback(mm, i);
return (iold > i ? iold : i);
}
diff --git a/backgammon/common_source/back.h b/backgammon/common_source/back.h
index e008a6f9..7c333365 100644
--- a/backgammon/common_source/back.h
+++ b/backgammon/common_source/back.h
@@ -1,4 +1,4 @@
-/* $NetBSD: back.h,v 1.19 2012/10/13 18:44:14 dholland Exp $ */
+/* $NetBSD: back.h,v 1.20 2012/10/13 19:19:39 dholland Exp $ */
/*
* Copyright (c) 1980, 1993
@@ -46,8 +46,7 @@
#define rnum(r) (random()%r)
#define D0 dice[0]
#define D1 dice[1]
-#define mswap(m) {(m)->D0 ^= (m)->D1; (m)->D1 ^= (m)->D0; (m)->D0 ^= (m)->D1; (m)->d0 = 1-(m)->d0;}
-#define swap suck it
+#define mswap(m) {(m)->D0 ^= (m)->D1; (m)->D1 ^= (m)->D0; (m)->D0 ^= (m)->D1; (m)->d0 = 1-(m)->d0;}
struct move {
int dice[2]; /* value of dice */
@@ -59,8 +58,6 @@ struct move {
original position */
};
-extern struct move gm;
-
/*
*
* Some numerical conventions:
@@ -135,10 +132,10 @@ extern int begscr; /* 'beginning' of screen
(not including board) */
int addbuf(int);
-void backone(int);
+void backone(struct move *, int);
void buflush(void);
int canhit(int, int);
-int checkmove(int);
+int checkmove(struct move *, int);
void clear(void);
void clend(void);
void cline(void);
@@ -148,28 +145,28 @@ void errexit(const char *) __dead;
void fancyc(int);
void fboard(void);
void fixtty(struct termios *);
-void getarg(char ***);
+void getarg(struct move *, char ***);
int getcaps(const char *);
-void getmove(void);
+void getmove(struct move *);
void getout(int) __dead;
void gwrite(void);
void init(void);
int main(int, char *[]);
-int makmove(int);
-int movallow(void);
-void movback(int);
-void moverr(int);
-int movokay(int);
+int makmove(struct move *, int);
+int movallow(struct move *);
+void movback(struct move *, int);
+void moverr(struct move *, int);
+int movokay(struct move *, int);
void newpos(void);
void nexturn(void);
void odds(int, int, int);
-void proll(void);
-int quit(void);
+void proll(struct move *);
+int quit(struct move *);
int readc(void);
-void recover(const char *);
+void recover(struct move *, const char *);
void refresh(void);
-void roll(void);
-void save(int);
+void roll(struct move *);
+void save(struct move *, int);
int wrtext(const char *const *);
void wrboard(void);
void wrhit(int);
@@ -178,3 +175,5 @@ void writec(int);
void writel(const char *);
void wrscore(void);
int yorn(int);
+
+void move_init(struct move *);
diff --git a/backgammon/common_source/check.c b/backgammon/common_source/check.c
index 19f1c56d..c3f85251 100644
--- a/backgammon/common_source/check.c
+++ b/backgammon/common_source/check.c
@@ -1,4 +1,4 @@
-/* $NetBSD: check.c,v 1.7 2012/10/13 18:44:15 dholland Exp $ */
+/* $NetBSD: check.c,v 1.8 2012/10/13 19:19:39 dholland Exp $ */
/*
* Copyright (c) 1980, 1993
@@ -34,25 +34,24 @@
#if 0
static char sccsid[] = "@(#)check.c 8.1 (Berkeley) 5/31/93";
#else
-__RCSID("$NetBSD: check.c,v 1.7 2012/10/13 18:44:15 dholland Exp $");
+__RCSID("$NetBSD: check.c,v 1.8 2012/10/13 19:19:39 dholland Exp $");
#endif
#endif /* not lint */
#include "back.h"
void
-getmove(void)
+getmove(struct move *mm)
{
int i, c;
- struct move *mm = &gm;
c = 0;
for (;;) {
- i = checkmove(c);
+ i = checkmove(mm, c);
switch (i) {
case -1:
- if (movokay(mm->mvlim)) {
+ if (movokay(mm, mm->mvlim)) {
if (tflag)
curmove(20, 0);
else
@@ -91,12 +90,12 @@ getmove(void)
break;
case -3:
- if (quit())
+ if (quit(mm))
return;
}
if (!tflag)
- proll();
+ proll(mm);
else {
curmove(cturn == -1 ? 18 : 19, 39);
cline();
@@ -106,35 +105,34 @@ getmove(void)
}
int
-movokay(int mv)
+movokay(struct move *mm, int mv)
{
int i, m;
- struct move *mm = &gm;
if (mm->d0)
mswap(mm);
for (i = 0; i < mv; i++) {
if (mm->p[i] == mm->g[i]) {
- moverr(i);
+ moverr(mm, i);
curmove(20, 0);
writel("Attempt to move to same location.\n");
return (0);
}
if (cturn * (mm->g[i] - mm->p[i]) < 0) {
- moverr(i);
+ moverr(mm, i);
curmove(20, 0);
writel("Backwards move.\n");
return (0);
}
if (abs(board[bar]) && mm->p[i] != bar) {
- moverr(i);
+ moverr(mm, i);
curmove(20, 0);
writel("Men still on bar.\n");
return (0);
}
- if ((m = makmove(i))) {
- moverr(i);
+ if ((m = makmove(mm, i))) {
+ moverr(mm, i);
switch (m) {
case 1:
diff --git a/backgammon/common_source/init.c b/backgammon/common_source/init.c
index 5cdbfb36..648515f2 100644
--- a/backgammon/common_source/init.c
+++ b/backgammon/common_source/init.c
@@ -1,4 +1,4 @@
-/* $NetBSD: init.c,v 1.9 2012/10/13 18:44:15 dholland Exp $ */
+/* $NetBSD: init.c,v 1.10 2012/10/13 19:19:39 dholland Exp $ */
/*
* Copyright (c) 1980, 1993
@@ -34,7 +34,7 @@
#if 0
static char sccsid[] = "@(#)init.c 8.1 (Berkeley) 5/31/93";
#else
-__RCSID("$NetBSD: init.c,v 1.9 2012/10/13 18:44:15 dholland Exp $");
+__RCSID("$NetBSD: init.c,v 1.10 2012/10/13 19:19:39 dholland Exp $");
#endif
#endif /* not lint */
@@ -93,3 +93,15 @@ int rscore;
int table[6][6];
int wscore;
struct termios old, noech, raw;
+
+void
+move_init(struct move *mm)
+{
+ mm->D0 = 0;
+ mm->D1 = 0;
+ mm->mvlim = 0;
+ mm->p[0] = mm->p[1] = mm->p[2] = mm->p[3] = mm->p[4] = 0;
+ mm->g[0] = mm->g[1] = mm->g[2] = mm->g[3] = mm->g[4] = 0;
+ mm->h[0] = mm->h[1] = mm->h[2] = mm->h[3] = 0;
+ mm->d0 = 0;
+}
diff --git a/backgammon/common_source/one.c b/backgammon/common_source/one.c
index 507af18f..3e55dd83 100644
--- a/backgammon/common_source/one.c
+++ b/backgammon/common_source/one.c
@@ -1,4 +1,4 @@
-/* $NetBSD: one.c,v 1.8 2012/10/13 18:44:15 dholland Exp $ */
+/* $NetBSD: one.c,v 1.9 2012/10/13 19:19:39 dholland Exp $ */
/*
* Copyright (c) 1980, 1993
@@ -34,43 +34,42 @@
#if 0
static char sccsid[] = "@(#)one.c 8.1 (Berkeley) 5/31/93";
#else
-__RCSID("$NetBSD: one.c,v 1.8 2012/10/13 18:44:15 dholland Exp $");
+__RCSID("$NetBSD: one.c,v 1.9 2012/10/13 19:19:39 dholland Exp $");
#endif
#endif /* not lint */
#include "back.h"
-static int checkd(int);
+static int checkd(struct move *, int);
static int last(void);
int
-makmove(int i)
+makmove(struct move *mm, int i)
{
int n, d;
int max;
- struct move *mm = &gm;
d = mm->d0;
n = abs(mm->g[i] - mm->p[i]);
max = (*offptr < 0 ? 7 : last());
if (board[mm->p[i]] * cturn <= 0)
- return (checkd(d) + 2);
+ return (checkd(mm, d) + 2);
if (mm->g[i] != home && board[mm->g[i]] * cturn < -1)
- return (checkd(d) + 3);
+ return (checkd(mm, d) + 3);
if (i || mm->D0 == mm->D1) {
if (n == max ? mm->D1 < n : mm->D1 != n)
- return (checkd(d) + 1);
+ return (checkd(mm, d) + 1);
} else {
if (n == max ? mm->D0 < n && mm->D1 < n : mm->D0 != n && mm->D1 != n)
- return (checkd(d) + 1);
+ return (checkd(mm, d) + 1);
if (n == max ? mm->D0 < n : mm->D0 != n) {
if (mm->d0)
- return (checkd(d) + 1);
+ return (checkd(mm, d) + 1);
mswap(mm);
}
}
if (mm->g[i] == home && *offptr < 0)
- return (checkd(d) + 4);
+ return (checkd(mm, d) + 4);
mm->h[i] = 0;
board[mm->p[i]] -= cturn;
if (mm->g[i] != home) {
@@ -98,10 +97,9 @@ makmove(int i)
}
void
-moverr(int i)
+moverr(struct move *mm, int i)
{
int j;
- struct move *mm = &gm;
if (tflag)
curmove(20, 0);
@@ -116,15 +114,13 @@ moverr(int i)
writec(',');
}
writel("... ");
- movback(i);
+ movback(mm, i);
}
static int
-checkd(int d)
+checkd(struct move *mm, int d)
{
- struct move *mm = &gm;
-
if (mm->d0 != d)
mswap(mm);
return (0);
@@ -142,19 +138,17 @@ last(void)
}
void
-movback(int i)
+movback(struct move *mm, int i)
{
int j;
for (j = i - 1; j >= 0; j--)
- backone(j);
+ backone(mm, j);
}
void
-backone(int i)
+backone(struct move *mm, int i)
{
- struct move *mm = &gm;
-
board[mm->p[i]] += cturn;
if (mm->g[i] != home) {
board[mm->g[i]] -= cturn;
diff --git a/backgammon/common_source/save.c b/backgammon/common_source/save.c
index 5cadf51c..462050af 100644
--- a/backgammon/common_source/save.c
+++ b/backgammon/common_source/save.c
@@ -1,4 +1,4 @@
-/* $NetBSD: save.c,v 1.15 2012/10/13 18:44:15 dholland Exp $ */
+/* $NetBSD: save.c,v 1.16 2012/10/13 19:19:39 dholland Exp $ */
/*
* Copyright (c) 1980, 1993
@@ -34,7 +34,7 @@
#if 0
static char sccsid[] = "@(#)save.c 8.1 (Berkeley) 5/31/93";
#else
-__RCSID("$NetBSD: save.c,v 1.15 2012/10/13 18:44:15 dholland Exp $");
+__RCSID("$NetBSD: save.c,v 1.16 2012/10/13 19:19:39 dholland Exp $");
#endif
#endif /* not lint */
@@ -56,12 +56,11 @@ static const char cantrec[] = "Can't recover file: ";
static void norec(const char *) __dead;
void
-save(int n)
+save(struct move *mm, int n)
{
int fdesc;
char *fs;
char fname[50];
- struct move *mm = &gm;
if (n) {
if (tflag) {
@@ -146,10 +145,9 @@ save(int n)
}
void
-recover(const char *s)
+recover(struct move *mm, const char *s)
{
int fdesc;
- struct move *mm = &gm;
if ((fdesc = open(s, O_RDONLY)) == -1)
norec(s);
diff --git a/backgammon/common_source/subs.c b/backgammon/common_source/subs.c
index e73f5339..9a0a3723 100644
--- a/backgammon/common_source/subs.c
+++ b/backgammon/common_source/subs.c
@@ -1,4 +1,4 @@
-/* $NetBSD: subs.c,v 1.18 2012/10/13 18:44:15 dholland Exp $ */
+/* $NetBSD: subs.c,v 1.19 2012/10/13 19:19:39 dholland Exp $ */
/*
* Copyright (c) 1980, 1993
@@ -34,7 +34,7 @@
#if 0
static char sccsid[] = "@(#)subs.c 8.1 (Berkeley) 5/31/93";
#else
-__RCSID("$NetBSD: subs.c,v 1.18 2012/10/13 18:44:15 dholland Exp $");
+__RCSID("$NetBSD: subs.c,v 1.19 2012/10/13 19:19:39 dholland Exp $");
#endif
#endif /* not lint */
@@ -153,10 +153,8 @@ writel(const char *l)
}
void
-proll(void)
+proll(struct move *mm)
{
- struct move *mm = &gm;
-
if (mm->d0)
mswap(mm);
if (cturn == 1)
@@ -229,7 +227,7 @@ gwrite(void)
}
int
-quit(void)
+quit(struct move *mm)
{
if (tflag) {
@@ -242,7 +240,7 @@ quit(void)
if (rfl) {
writel("Would you like to save this game?");
if (yorn(0))
- save(0);
+ save(mm, 0);
}
cturn = 0;
return (1);
@@ -307,7 +305,7 @@ nexturn(void)
}
void
-getarg(char ***arg)
+getarg(struct move *mm, char ***arg)
{
char **s;
@@ -383,13 +381,13 @@ getarg(char ***arg)
writel("No save file named\n");
getout(0);
} else
- recover(s[0]);
+ recover(mm, s[0]);
break;
}
s++;
}
if (s[0] != 0)
- recover(s[0]);
+ recover(mm, s[0]);
}
void
@@ -450,12 +448,11 @@ getout(int dummy __unused)
}
void
-roll(void)
+roll(struct move *mm)
{
char c;
int row;
int col;
- struct move *mm = &gm;
row = col = 0;
if (iroll) {
diff --git a/backgammon/common_source/table.c b/backgammon/common_source/table.c
index dfd382b2..c083b316 100644
--- a/backgammon/common_source/table.c
+++ b/backgammon/common_source/table.c
@@ -1,4 +1,4 @@
-/* $NetBSD: table.c,v 1.12 2012/10/13 18:44:15 dholland Exp $ */
+/* $NetBSD: table.c,v 1.13 2012/10/13 19:19:39 dholland Exp $ */
/*
* Copyright (c) 1980, 1993
@@ -34,7 +34,7 @@
#if 0
static char sccsid[] = "@(#)table.c 8.1 (Berkeley) 5/31/93";
#else
-__RCSID("$NetBSD: table.c,v 1.12 2012/10/13 18:44:15 dholland Exp $");
+__RCSID("$NetBSD: table.c,v 1.13 2012/10/13 19:19:39 dholland Exp $");
#endif
#endif /* not lint */
@@ -79,15 +79,14 @@ static const struct state atmata[] = {
{'\n', 0, -1}, {'.', 0, 0}
};
-static int dotable(int, int);
-static int rsetbrd(void);
+static int dotable(struct move *, int, int);
+static int rsetbrd(struct move *);
int
-checkmove(int ist)
+checkmove(struct move *mm, int ist)
{
int j, n;
char c;
- struct move *mm = &gm;
domove:
if (ist == 0) {
@@ -106,13 +105,13 @@ dochar:
if (c == 'S') {
raflag = 0;
- save(1);
+ save(mm, 1);
if (tflag) {
curmove(cturn == -1 ? 18 : 19, 39);
ist = -1;
goto domove;
} else {
- proll();
+ proll(mm);
ist = 0;
goto domove;
}
@@ -127,7 +126,7 @@ dochar:
writec(cin[ncin - 1]);
}
ncin--;
- n = rsetbrd();
+ n = rsetbrd(mm);
if (n == 0) {
n = -1;
if (tflag)
@@ -152,12 +151,12 @@ dochar:
} else {
writec('\\');
writec('\n');
- proll();
+ proll(mm);
ist = 0;
goto domove;
}
}
- n = dotable(c, ist);
+ n = dotable(mm, c, ist);
if (n >= 0) {
cin[ncin++] = c;
if (n > 2)
@@ -176,22 +175,22 @@ dochar:
if (n == -6) {
if (!tflag) {
- if (movokay(mvl + 1)) {
+ if (movokay(mm, mvl + 1)) {
wrboard();
- movback(mvl + 1);
+ movback(mm, mvl + 1);
}
- proll();
+ proll(mm);
writel("\t\tMove: ");
for (j = 0; j < ncin;)
writec(cin[j++]);
} else {
- if (movokay(mvl + 1)) {
+ if (movokay(mm, mvl + 1)) {
refresh();
- movback(mvl + 1);
+ movback(mm, mvl + 1);
} else
curmove(cturn == -1 ? 18 : 19, ncin + 39);
}
- ist = n = rsetbrd();
+ ist = n = rsetbrd(mm);
goto dochar;
}
if (n != -5)
@@ -201,11 +200,10 @@ dochar:
}
static int
-dotable(int c, int i)
+dotable(struct move *mm, int c, int i)
{
int a;
int test;
- struct move *mm = &gm;
test = (c == 'R');
@@ -217,10 +215,10 @@ dotable(int c, int i)
wrboard();
if (tflag) {
curmove(cturn == -1 ? 18 : 19, 0);
- proll();
+ proll(mm);
writel("\t\t");
} else
- proll();
+ proll(mm);
break;
case 2:
@@ -271,7 +269,7 @@ dotable(int c, int i)
curmove(cturn == -1 ? 18 : 19, 39);
} else {
writec('\n');
- proll();
+ proll(mm);
writel("\t\tMove: ");
}
break;
@@ -296,17 +294,16 @@ dotable(int c, int i)
}
static int
-rsetbrd(void)
+rsetbrd(struct move *mm)
{
int i, j, n;
- struct move *mm = &gm;
n = 0;
mvl = 0;
for (i = 0; i < 4; i++)
mm->p[i] = mm->g[i] = -1;
for (j = 0; j < ncin; j++)
- if ((n = dotable(cin[j], n)) < 0)
+ if ((n = dotable(mm, cin[j], n)) < 0)
return n;
return (n);
}
diff --git a/backgammon/teachgammon/teach.c b/backgammon/teachgammon/teach.c
index 9d10908d..7559f5ad 100644
--- a/backgammon/teachgammon/teach.c
+++ b/backgammon/teachgammon/teach.c
@@ -1,4 +1,4 @@
-/* $NetBSD: teach.c,v 1.21 2010/03/22 05:10:19 mrg Exp $ */
+/* $NetBSD: teach.c,v 1.22 2012/10/13 19:19:39 dholland Exp $ */
/*
* Copyright (c) 1980, 1993
@@ -39,7 +39,7 @@ __COPYRIGHT("@(#) Copyright (c) 1980, 1993\
#if 0
static char sccsid[] = "@(#)teach.c 8.1 (Berkeley) 5/31/93";
#else
-__RCSID("$NetBSD: teach.c,v 1.21 2010/03/22 05:10:19 mrg Exp $");
+__RCSID("$NetBSD: teach.c,v 1.22 2012/10/13 19:19:39 dholland Exp $");
#endif
#endif /* not lint */
@@ -63,6 +63,7 @@ int
main(int argc __unused, char *argv[])
{
int i;
+ struct move mmstore, *mm;
/* revoke setgid privileges */
setgid(getgid());
@@ -76,12 +77,16 @@ main(int argc __unused, char *argv[])
raw.c_lflag &= ~ICANON; /* set up modes */
ospeed = cfgetospeed(&old); /* for termlib */
tflag = getcaps(getenv("TERM"));
+
+ /* need this now beceause getarg() may try to load a game */
+ mm = &mmstore;
+ move_init(mm);
#ifdef V7
while (*++argv != 0)
#else
while (*++argv != -1)
#endif
- getarg(&argv);
+ getarg(mm, &argv);
if (tflag) {
noech.c_oflag &= ~(ONLCR | OXTABS);
raw.c_oflag &= ~(ONLCR | OXTABS);
@@ -137,7 +142,7 @@ main(int argc __unused, char *argv[])
if ((i = wrtext(lastch)) != 0)
break;
}
- tutor();
+ tutor(mm);
/* NOTREACHED */
return (0);
}
diff --git a/backgammon/teachgammon/tutor.c b/backgammon/teachgammon/tutor.c
index 394caf86..efbd7f08 100644
--- a/backgammon/teachgammon/tutor.c
+++ b/backgammon/teachgammon/tutor.c
@@ -1,4 +1,4 @@
-/* $NetBSD: tutor.c,v 1.10 2012/10/13 18:44:15 dholland Exp $ */
+/* $NetBSD: tutor.c,v 1.11 2012/10/13 19:19:39 dholland Exp $ */
/*
* Copyright (c) 1980, 1993
@@ -34,7 +34,7 @@
#if 0
static char sccsid[] = "@(#)tutor.c 8.1 (Berkeley) 5/31/93";
#else
-__RCSID("$NetBSD: tutor.c,v 1.10 2012/10/13 18:44:15 dholland Exp $");
+__RCSID("$NetBSD: tutor.c,v 1.11 2012/10/13 19:19:39 dholland Exp $");
#endif
#endif /* not lint */
@@ -48,10 +48,9 @@ static int brdeq(const int *, const int *);
static void clrest(void);
void
-tutor(void)
+tutor(struct move *mm)
{
int i, j;
- struct move *mm = &gm;
i = 0;
begscr = 18;
@@ -73,17 +72,17 @@ tutor(void)
curmove(18, 0);
writel(better);
nexturn();
- movback(mm->mvlim);
+ movback(mm, mm->mvlim);
if (tflag) {
refresh();
clrest();
}
if ((!tflag) || curr == 19) {
- proll();
+ proll(mm);
writec('\t');
} else
curmove(curr > 19 ? curr - 2 : curr + 4, 25);
- getmove();
+ getmove(mm);
if (cturn == 0)
leave();
continue;
@@ -108,7 +107,7 @@ tutor(void)
}
if (mm->mvlim)
for (j = 0; j < mm->mvlim; j++)
- if (makmove(j))
+ if (makmove(mm, j))
writel("AARGH!!!\n");
if (tflag)
refresh();
@@ -117,13 +116,13 @@ tutor(void)
mm->D1 = test[i].new2;
mm->d0 = 0;
i++;
- mm->mvlim = movallow();
+ mm->mvlim = movallow(mm);
if (mm->mvlim) {
if (tflag)
clrest();
- proll();
+ proll(mm);
writec('\t');
- getmove();
+ getmove(mm);
if (tflag)
refresh();
if (cturn == 0)
diff --git a/backgammon/teachgammon/tutor.h b/backgammon/teachgammon/tutor.h
index 26e55e1f..203f0fca 100644
--- a/backgammon/teachgammon/tutor.h
+++ b/backgammon/teachgammon/tutor.h
@@ -1,4 +1,4 @@
-/* $NetBSD: tutor.h,v 1.10 2011/08/26 06:18:16 dholland Exp $ */
+/* $NetBSD: tutor.h,v 1.11 2012/10/13 19:19:39 dholland Exp $ */
/*
* Copyright (c) 1980, 1993
@@ -31,6 +31,8 @@
* @(#)tutor.h 8.1 (Berkeley) 5/31/93
*/
+struct move; /* in back.h */
+
struct situatn {
int brd[26];
int roll1;
@@ -63,4 +65,4 @@ extern const struct situatn test[];
void leave(void) __dead;
-void tutor(void) __dead;
+void tutor(struct move *) __dead;