summaryrefslogtreecommitdiffstats
path: root/backgammon/common_source/check.c
diff options
context:
space:
mode:
authorcgd <cgd@NetBSD.org>1993-03-21 09:45:37 +0000
committercgd <cgd@NetBSD.org>1993-03-21 09:45:37 +0000
commit77e3814f0c0e3dea4d0032e25666f77e6f83bfff (patch)
tree7eddfcbf3dd12089e71dc3fafb0a106c5c5766c7 /backgammon/common_source/check.c
parente81d63576b2e46ab90da7d75fa155ea57ee4d32e (diff)
downloadbsdgames-darwin-77e3814f0c0e3dea4d0032e25666f77e6f83bfff.tar.gz
bsdgames-darwin-77e3814f0c0e3dea4d0032e25666f77e6f83bfff.tar.zst
bsdgames-darwin-77e3814f0c0e3dea4d0032e25666f77e6f83bfff.zip
initial import of 386bsd-0.1 sources
Diffstat (limited to 'backgammon/common_source/check.c')
-rw-r--r--backgammon/common_source/check.c158
1 files changed, 158 insertions, 0 deletions
diff --git a/backgammon/common_source/check.c b/backgammon/common_source/check.c
new file mode 100644
index 00000000..5ef2eb2b
--- /dev/null
+++ b/backgammon/common_source/check.c
@@ -0,0 +1,158 @@
+/*
+ * Copyright (c) 1980 Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#ifndef lint
+static char sccsid[] = "@(#)check.c 5.4 (Berkeley) 6/1/90";
+#endif /* not lint */
+
+#include "back.h"
+
+getmove () {
+ register int i, c;
+
+ c = 0;
+ for (;;) {
+ i = checkmove(c);
+
+ switch (i) {
+ case -1:
+ if (movokay(mvlim)) {
+ if (tflag)
+ curmove (20,0);
+ else
+ writec ('\n');
+ for (i = 0; i < mvlim; i++)
+ if (h[i])
+ wrhit(g[i]);
+ nexturn();
+ if (*offopp == 15)
+ cturn *= -2;
+ if (tflag && pnum)
+ bflag = pnum;
+ return;
+ }
+
+ case -4:
+ case 0:
+ if (tflag)
+ refresh();
+ if (i != 0 && i != -4)
+ break;
+ if (tflag)
+ curmove (20,0);
+ else
+ writec ('\n');
+ writel (*Colorptr);
+ if (i == -4)
+ writel (" must make ");
+ else
+ writel (" can only make ");
+ writec (mvlim+'0');
+ writel (" move");
+ if (mvlim > 1)
+ writec ('s');
+ writec ('.');
+ writec ('\n');
+ break;
+
+ case -3:
+ if (quit())
+ return;
+ }
+
+ if (! tflag)
+ proll ();
+ else {
+ curmove (cturn == -1? 18: 19,39);
+ cline ();
+ c = -1;
+ }
+ }
+}
+
+movokay (mv)
+register int mv;
+
+{
+ register int i, m;
+
+ if (d0)
+ swap;
+
+ for (i = 0; i < mv; i++) {
+
+ if (p[i] == g[i]) {
+ moverr (i);
+ curmove (20,0);
+ writel ("Attempt to move to same location.\n");
+ return (0);
+ }
+
+ if (cturn*(g[i]-p[i]) < 0) {
+ moverr (i);
+ curmove (20,0);
+ writel ("Backwards move.\n");
+ return (0);
+ }
+
+ if (abs(board[bar]) && p[i] != bar) {
+ moverr (i);
+ curmove (20,0);
+ writel ("Men still on bar.\n");
+ return (0);
+ }
+
+ if ( (m = makmove(i)) ) {
+ moverr (i);
+ switch (m) {
+
+ case 1:
+ writel ("Move not rolled.\n");
+ break;
+
+ case 2:
+ writel ("Bad starting position.\n");
+ break;
+
+ case 3:
+ writel ("Destination occupied.\n");
+ break;
+
+ case 4:
+ writel ("Can't remove men yet.\n");
+ }
+ return (0);
+ }
+ }
+ return (1);
+}