1*6764Srrh static char sccsid[] = "	one.c	1.1	82/05/11	";
2*6764Srrh 
3*6764Srrh #include "back.h"
4*6764Srrh 
5*6764Srrh makmove (i)
6*6764Srrh register int	i;
7*6764Srrh 
8*6764Srrh {
9*6764Srrh 	register int	n, d;
10*6764Srrh 	int		max;
11*6764Srrh 
12*6764Srrh 	d = d0;
13*6764Srrh 	n = abs(g[i]-p[i]);
14*6764Srrh 	max = (*offptr < 0? 7: last());
15*6764Srrh 	if (board[p[i]]*cturn <= 0)
16*6764Srrh 		return (checkd(d)+2);
17*6764Srrh 	if (g[i] != home && board[g[i]]*cturn < -1)
18*6764Srrh 		return (checkd(d)+3);
19*6764Srrh 	if (i || D0 == D1)  {
20*6764Srrh 		if (n == max? D1 < n: D1 != n)
21*6764Srrh 			return (checkd(d)+1);
22*6764Srrh 	} else  {
23*6764Srrh 		if (n == max? D0 < n && D1 < n: D0 != n && D1 != n)
24*6764Srrh 			return (checkd(d)+1);
25*6764Srrh 		if (n == max? D0 < n: D0 != n)  {
26*6764Srrh 			if (d0)
27*6764Srrh 				return (checkd(d)+1);
28*6764Srrh 			swap;
29*6764Srrh 		}
30*6764Srrh 	}
31*6764Srrh 	if (g[i] == home && *offptr < 0)
32*6764Srrh 		return (checkd(d)+4);
33*6764Srrh 	h[i] = 0;
34*6764Srrh 	board[p[i]] -= cturn;
35*6764Srrh 	if (g[i] != home)  {
36*6764Srrh 		if (board[g[i]] == -cturn)  {
37*6764Srrh 			board[home] -= cturn;
38*6764Srrh 			board[g[i]] = 0;
39*6764Srrh 			h[i] = 1;
40*6764Srrh 			if (abs(bar-g[i]) < 7)  {
41*6764Srrh 				(*inopp)--;
42*6764Srrh 				if (*offopp >= 0)
43*6764Srrh 					*offopp -= 15;
44*6764Srrh 			}
45*6764Srrh 		}
46*6764Srrh 		board[g[i]] += cturn;
47*6764Srrh 		if (abs(home-g[i]) < 7 && abs(home-p[i]) > 6)  {
48*6764Srrh 			(*inptr)++;
49*6764Srrh 			if (*inptr+*offptr == 0)
50*6764Srrh 				*offptr += 15;
51*6764Srrh 		}
52*6764Srrh 	} else {
53*6764Srrh 		(*offptr)++;
54*6764Srrh 		(*inptr)--;
55*6764Srrh 	}
56*6764Srrh 	return (0);
57*6764Srrh }
58*6764Srrh 
59*6764Srrh moverr (i)
60*6764Srrh register int	i;
61*6764Srrh 
62*6764Srrh {
63*6764Srrh 	register int	j;
64*6764Srrh 
65*6764Srrh 	if (tflag)
66*6764Srrh 		curmove (20,0);
67*6764Srrh 	else
68*6764Srrh 		writec ('\n');
69*6764Srrh 	writel ("Error:  ");
70*6764Srrh 	for (j = 0; j <= i; j++)  {
71*6764Srrh 		wrint (p[j]);
72*6764Srrh 		writec ('-');
73*6764Srrh 		wrint (g[j]);
74*6764Srrh 		if (j < i)
75*6764Srrh 			writec (',');
76*6764Srrh 	}
77*6764Srrh 	writel ("... ");
78*6764Srrh 	movback (i);
79*6764Srrh }
80*6764Srrh 
81*6764Srrh 
82*6764Srrh checkd (d)
83*6764Srrh register int	d;
84*6764Srrh 
85*6764Srrh {
86*6764Srrh 	if (d0 != d)
87*6764Srrh 		swap;
88*6764Srrh 	return (0);
89*6764Srrh }
90*6764Srrh 
91*6764Srrh last ()  {
92*6764Srrh 	register int	i;
93*6764Srrh 
94*6764Srrh 	for (i = home-6*cturn; i != home; i += cturn)
95*6764Srrh 		if (board[i]*cturn > 0)
96*6764Srrh 			return (abs(home-i));
97*6764Srrh }
98*6764Srrh 
99*6764Srrh movback (i)
100*6764Srrh register int	i;
101*6764Srrh 
102*6764Srrh {
103*6764Srrh 	register int	j;
104*6764Srrh 
105*6764Srrh 	for (j = i-1; j >= 0; j--)
106*6764Srrh 		backone(j);
107*6764Srrh }
108*6764Srrh 
109*6764Srrh backone (i)
110*6764Srrh register int	i;
111*6764Srrh 
112*6764Srrh {
113*6764Srrh 	board[p[i]] += cturn;
114*6764Srrh 	if (g[i] != home)  {
115*6764Srrh 		board[g[i]] -= cturn;
116*6764Srrh 		if (abs(g[i]-home) < 7 && abs(p[i]-home) > 6)  {
117*6764Srrh 			(*inptr)--;
118*6764Srrh 			if (*inptr+*offptr < 15 && *offptr >= 0)
119*6764Srrh 				*offptr -= 15;
120*6764Srrh 		}
121*6764Srrh 	} else  {
122*6764Srrh 		(*offptr)--;
123*6764Srrh 		(*inptr)++;
124*6764Srrh 	}
125*6764Srrh 	if (h[i])  {
126*6764Srrh 		board[home] += cturn;
127*6764Srrh 		board[g[i]] = -cturn;
128*6764Srrh 		if (abs(bar-g[i]) < 7)  {
129*6764Srrh 			(*inopp)++;
130*6764Srrh 			if (*inopp+*offopp == 0)
131*6764Srrh 				*offopp += 15;
132*6764Srrh 		}
133*6764Srrh 	}
134*6764Srrh }
135