|
|
1.1 root 1: /*
2: * Copyright (c) 1980 Regents of the University of California.
3: * All rights reserved.
4: *
5: * Redistribution and use in source and binary forms are permitted
6: * provided that the above copyright notice and this paragraph are
7: * duplicated in all such forms and that any documentation,
8: * advertising materials, and other materials related to such
9: * distribution and use acknowledge that the software was developed
10: * by the University of California, Berkeley. The name of the
11: * University may not be used to endorse or promote products derived
12: * from this software without specific prior written permission.
13: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15: * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
16: */
17:
18: #ifndef lint
19: static char sccsid[] = "@(#)allow.c 5.3 (Berkeley) 6/18/88";
20: #endif /* not lint */
21:
22: #include "back.h"
23:
24: movallow () {
25:
26: register int i, m, iold;
27: int r;
28:
29: if (d0)
30: swap;
31: m = (D0 == D1? 4: 2);
32: for (i = 0; i < 4; i++)
33: p[i] = bar;
34: i = iold = 0;
35: while (i < m) {
36: if (*offptr == 15)
37: break;
38: h[i] = 0;
39: if (board[bar]) {
40: if (i == 1 || m == 4)
41: g[i] = bar+cturn*D1;
42: else
43: g[i] = bar+cturn*D0;
44: if (r = makmove(i)) {
45: if (d0 || m == 4)
46: break;
47: swap;
48: movback (i);
49: if (i > iold)
50: iold = i;
51: for (i = 0; i < 4; i++)
52: p[i] = bar;
53: i = 0;
54: } else
55: i++;
56: continue;
57: }
58: if ((p[i] += cturn) == home) {
59: if (i > iold)
60: iold = i;
61: if (m == 2 && i) {
62: movback(i);
63: p[i--] = bar;
64: if (p[i] != bar)
65: continue;
66: else
67: break;
68: }
69: if (d0 || m == 4)
70: break;
71: swap;
72: movback (i);
73: for (i = 0; i < 4; i++)
74: p[i] = bar;
75: i = 0;
76: continue;
77: }
78: if (i == 1 || m == 4)
79: g[i] = p[i]+cturn*D1;
80: else
81: g[i] = p[i]+cturn*D0;
82: if (g[i]*cturn > home) {
83: if (*offptr >= 0)
84: g[i] = home;
85: else
86: continue;
87: }
88: if (board[p[i]]*cturn > 0 && (r = makmove(i)) == 0)
89: i++;
90: }
91: movback (i);
92: return (iold > i? iold: i);
93: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.