games: Massive style(9) cleanup commit. Reduces differences to NetBSD.
[dragonfly.git] / games / backgammon / common_source / one.c
blobca43a485f321b9d3eb7236b987e40737fdc98e88
1 /*-
2 * Copyright (c) 1980, 1993
3 * The Regents of the University of California. All rights reserved.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. Neither the name of the University nor the names of its contributors
14 * may be used to endorse or promote products derived from this software
15 * without specific prior written permission.
17 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
29 * @(#)one.c 8.1 (Berkeley) 5/31/93
30 * $FreeBSD: src/games/backgammon/common_source/one.c,v 1.5 1999/11/30 03:48:27 billf Exp $
31 * $DragonFly: src/games/backgammon/common_source/one.c,v 1.3 2006/08/08 16:36:11 pavalos Exp $
34 #include "back.h"
36 static int checkd(int);
37 static int last(void);
39 int
40 makmove(int i)
42 int n, d;
43 int max;
45 d = d0;
46 n = abs(g[i] - p[i]);
47 max = (*offptr < 0 ? 7 : last());
48 if (board[p[i]] * cturn <= 0)
49 return (checkd(d) + 2);
50 if (g[i] != home && board[g[i]] * cturn < -1)
51 return (checkd(d) + 3);
52 if (i || D0 == D1) {
53 if (n == max ? D1 < n : D1 != n)
54 return (checkd(d) + 1);
55 } else {
56 if (n == max ? D0 < n && D1 < n : D0 != n && D1 != n)
57 return (checkd(d) + 1);
58 if (n == max ? D0 < n : D0 != n) {
59 if (d0)
60 return (checkd(d) + 1);
61 swap;
64 if (g[i] == home && *offptr < 0)
65 return (checkd(d) + 4);
66 h[i] = 0;
67 board[p[i]] -= cturn;
68 if (g[i] != home) {
69 if (board[g[i]] == -cturn) {
70 board[home] -= cturn;
71 board[g[i]] = 0;
72 h[i] = 1;
73 if (abs(bar - g[i]) < 7) {
74 (*inopp)--;
75 if (*offopp >= 0)
76 *offopp -= 15;
79 board[g[i]] += cturn;
80 if (abs(home - g[i]) < 7 && abs(home - p[i]) > 6) {
81 (*inptr)++;
82 if (*inptr + *offptr == 0)
83 *offptr += 15;
85 } else {
86 (*offptr)++;
87 (*inptr)--;
89 return (0);
92 void
93 moverr(int i)
95 int j;
97 if (tflag)
98 curmove(20, 0);
99 else
100 writec('\n');
101 writel("Error: ");
102 for (j = 0; j <= i; j++) {
103 wrint(p[j]);
104 writec('-');
105 wrint(g[j]);
106 if (j < i)
107 writec(',');
109 writel("... ");
110 movback(i);
113 static int
114 checkd(int d)
116 if (d0 != d)
117 swap;
118 return (0);
121 static int
122 last(void)
124 int i;
126 for (i = home - 6 * cturn; i != home; i += cturn)
127 if (board[i] * cturn > 0)
128 return (abs(home - i));
129 return (-1);
132 void
133 movback(int i)
135 int j;
137 for (j = i - 1; j >= 0; j--)
138 backone(j);
141 void
142 backone(int i)
144 board[p[i]] += cturn;
145 if (g[i] != home) {
146 board[g[i]] -= cturn;
147 if (abs(g[i] - home) < 7 && abs(p[i] - home) > 6) {
148 (*inptr)--;
149 if (*inptr + *offptr < 15 && *offptr >= 0)
150 *offptr -= 15;
152 } else {
153 (*offptr)--;
154 (*inptr)++;
156 if (h[i]) {
157 board[home] += cturn;
158 board[g[i]] = -cturn;
159 if (abs(bar - g[i]) < 7) {
160 (*inopp)++;
161 if (*inopp + *offopp == 0)
162 *offopp += 15;