1 static char sccsid[] = "	check.c	4.1	82/05/11	";
2 
3 #include "back.h"
4 
5 getmove ()  {
6 	register int	i, c;
7 
8 	c = 0;
9 	for (;;)  {
10 		i = checkmove(c);
11 
12 		switch (i)  {
13 		case -1:
14 			if (movokay(mvlim))  {
15 				if (tflag)
16 					curmove (20,0);
17 				else
18 					writec ('\n');
19 				for (i = 0; i < mvlim; i++)
20 					if (h[i])
21 						wrhit(g[i]);
22 				nexturn();
23 				if (*offopp == 15)
24 					cturn *= -2;
25 				if (tflag && pnum)
26 					bflag = pnum;
27 				return;
28 			}
29 
30 		case -4:
31 		case 0:
32 			if (tflag)
33 				refresh();
34 			if (i != 0 && i != -4)
35 				break;
36 			if (tflag)
37 				curmove (20,0);
38 			else
39 				writec ('\n');
40 			writel (*Colorptr);
41 			if (i == -4)
42 				writel (" must make ");
43 			else
44 				writel (" can only make ");
45 			writec (mvlim+'0');
46 			writel (" move");
47 			if (mvlim > 1)
48 				writec ('s');
49 			writec ('.');
50 			writec ('\n');
51 			break;
52 
53 		case -3:
54 			if (quit())
55 				return;
56 		}
57 
58 		if (! tflag)
59 			proll ();
60 		else  {
61 			curmove (cturn == -1? 18: 19,39);
62 			cline ();
63 			c = -1;
64 		}
65 	}
66 }
67 
68 movokay (mv)
69 register int	mv;
70 
71 {
72 	register int	i, m;
73 
74 	if (d0)
75 		swap;
76 
77 	for (i = 0; i < mv; i++)  {
78 
79 		if (p[i] == g[i])  {
80 			moverr (i);
81 			curmove (20,0);
82 			writel ("Attempt to move to same location.\n");
83 			return (0);
84 		}
85 
86 		if (cturn*(g[i]-p[i]) < 0)  {
87 			moverr (i);
88 			curmove (20,0);
89 			writel ("Backwards move.\n");
90 			return (0);
91 		}
92 
93 		if (abs(board[bar]) && p[i] != bar)  {
94 			moverr (i);
95 			curmove (20,0);
96 			writel ("Men still on bar.\n");
97 			return (0);
98 		}
99 
100 		if ( (m = makmove(i)) )  {
101 			moverr (i);
102 			switch (m)  {
103 
104 			case 1:
105 				writel ("Move not rolled.\n");
106 				break;
107 
108 			case 2:
109 				writel ("Bad starting position.\n");
110 				break;
111 
112 			case 3:
113 				writel ("Destination occupied.\n");
114 				break;
115 
116 			case 4:
117 				writel ("Can't remove men yet.\n");
118 			}
119 			return (0);
120 		}
121 	}
122 	return (1);
123 }
124