1 static char sccsid[] = "	allow.c	4.1	82/05/11	";
2 
3 #include "back.h"
4 
5 movallow ()  {
6 
7 	register int	i, m, iold;
8 	int		r;
9 
10 	if (d0)
11 		swap;
12 	m = (D0 == D1? 4: 2);
13 	for (i = 0; i < 4; i++)
14 		p[i] = bar;
15 	i = iold = 0;
16 	while (i < m)  {
17 		if (*offptr == 15)
18 			break;
19 		h[i] = 0;
20 		if (board[bar])  {
21 			if (i == 1 || m == 4)
22 				g[i] = bar+cturn*D1;
23 			else
24 				g[i] = bar+cturn*D0;
25 			if (r = makmove(i))  {
26 				if (d0 || m == 4)
27 					break;
28 				swap;
29 				movback (i);
30 				if (i > iold)
31 					iold = i;
32 				for (i = 0; i < 4; i++)
33 					p[i] = bar;
34 				i = 0;
35 			} else
36 				i++;
37 			continue;
38 		}
39 		if ((p[i] += cturn) == home)  {
40 			if (i > iold)
41 				iold = i;
42 			if (m == 2 && i)  {
43 				movback(i);
44 				p[i--] = bar;
45 				if (p[i] != bar)
46 					continue;
47 				else
48 					break;
49 			}
50 			if (d0 || m == 4)
51 				break;
52 			swap;
53 			movback (i);
54 			for (i = 0; i < 4; i++)
55 				p[i] = bar;
56 			i = 0;
57 			continue;
58 		}
59 		if (i == 1 || m == 4)
60 			g[i] = p[i]+cturn*D1;
61 		else
62 			g[i] = p[i]+cturn*D0;
63 		if (g[i]*cturn > home)  {
64 			if (*offptr >= 0)
65 				g[i] = home;
66 			else
67 				continue;
68 		}
69 		if (board[p[i]]*cturn > 0 && (r = makmove(i)) == 0)
70 			i++;
71 	}
72 	movback (i);
73 	return (iold > i? iold: i);
74 }
75