Expand PMF_FN_* macros.
[netbsd-mini2440.git] / games / backgammon / common_source / check.c
blobae54a5c1b665add505d30e7f3ea5d745032eb049
1 /* $NetBSD: check.c,v 1.5 2003/08/07 09:36:57 agc Exp $ */
3 /*
4 * Copyright (c) 1980, 1993
5 * The Regents of the University of California. All rights reserved.
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 * 3. Neither the name of the University nor the names of its contributors
16 * may be used to endorse or promote products derived from this software
17 * without specific prior written permission.
19 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
23 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29 * SUCH DAMAGE.
32 #include <sys/cdefs.h>
33 #ifndef lint
34 #if 0
35 static char sccsid[] = "@(#)check.c 8.1 (Berkeley) 5/31/93";
36 #else
37 __RCSID("$NetBSD: check.c,v 1.5 2003/08/07 09:36:57 agc Exp $");
38 #endif
39 #endif /* not lint */
41 #include "back.h"
43 void
44 getmove(void)
46 int i, c;
48 c = 0;
49 for (;;) {
50 i = checkmove(c);
52 switch (i) {
53 case -1:
54 if (movokay(mvlim)) {
55 if (tflag)
56 curmove(20, 0);
57 else
58 writec('\n');
59 for (i = 0; i < mvlim; i++)
60 if (h[i])
61 wrhit(g[i]);
62 nexturn();
63 if (*offopp == 15)
64 cturn *= -2;
65 if (tflag && pnum)
66 bflag = pnum;
67 return;
69 case -4:
70 case 0:
71 if (tflag)
72 refresh();
73 if (i != 0 && i != -4)
74 break;
75 if (tflag)
76 curmove(20, 0);
77 else
78 writec('\n');
79 writel(*Colorptr);
80 if (i == -4)
81 writel(" must make ");
82 else
83 writel(" can only make ");
84 writec(mvlim + '0');
85 writel(" move");
86 if (mvlim > 1)
87 writec('s');
88 writec('.');
89 writec('\n');
90 break;
92 case -3:
93 if (quit())
94 return;
97 if (!tflag)
98 proll();
99 else {
100 curmove(cturn == -1 ? 18 : 19, 39);
101 cline();
102 c = -1;
108 movokay(int mv)
110 int i, m;
112 if (d0)
113 swap;
115 for (i = 0; i < mv; i++) {
116 if (p[i] == g[i]) {
117 moverr(i);
118 curmove(20, 0);
119 writel("Attempt to move to same location.\n");
120 return (0);
122 if (cturn * (g[i] - p[i]) < 0) {
123 moverr(i);
124 curmove(20, 0);
125 writel("Backwards move.\n");
126 return (0);
128 if (abs(board[bar]) && p[i] != bar) {
129 moverr(i);
130 curmove(20, 0);
131 writel("Men still on bar.\n");
132 return (0);
134 if ((m = makmove(i))) {
135 moverr(i);
136 switch (m) {
138 case 1:
139 writel("Move not rolled.\n");
140 break;
142 case 2:
143 writel("Bad starting position.\n");
144 break;
146 case 3:
147 writel("Destination occupied.\n");
148 break;
150 case 4:
151 writel("Can't remove men yet.\n");
153 return (0);
156 return (1);