1 static char sccsid[] = "	tutor.c	4.1	82/05/11	";
2 
3 #include "back.h"
4 #include "tutor.h"
5 
6 extern int	maxmoves;
7 extern char	*finis[];
8 
9 extern struct situatn	test[];
10 
11 static char	better[] = "That is a legal move, but there is a better one.\n";
12 
13 tutor ()  {
14 	register int	i, j;
15 
16 	i = 0;
17 	begscr = 18;
18 	cturn = -1;
19 	home = 0;
20 	bar = 25;
21 	inptr = &in[0];
22 	inopp = &in[1];
23 	offptr = &off[0];
24 	offopp = &off[1];
25 	Colorptr = &color[0];
26 	colorptr = &color[2];
27 	colen = 5;
28 	wrboard();
29 
30 	while (1)  {
31 		if (! brdeq(test[i].brd,board))  {
32 			if (tflag && curr == 23)
33 				curmove (18,0);
34 			writel (better);
35 			nexturn();
36 			movback (mvlim);
37 			if (tflag)  {
38 				refresh();
39 				clrest ();
40 			}
41 			if ((! tflag) || curr == 19)  {
42 				proll();
43 				writec ('\t');
44 			}
45 			else
46 				curmove (curr > 19? curr-2: curr+4,25);
47 			getmove();
48 			if (cturn == 0)
49 				leave();
50 			continue;
51 		}
52 		if (tflag)
53 			curmove (18,0);
54 		text (*test[i].com);
55 		if (! tflag)
56 			writec ('\n');
57 		if (i == maxmoves)
58 			break;
59 		D0 = test[i].roll1;
60 		D1 = test[i].roll2;
61 		d0 = 0;
62 		mvlim = 0;
63 		for (j = 0; j < 4; j++)  {
64 			if (test[i].mp[j] == test[i].mg[j])
65 				break;
66 			p[j] = test[i].mp[j];
67 			g[j] = test[i].mg[j];
68 			mvlim++;
69 		}
70 		if (mvlim)
71 			for (j = 0; j < mvlim; j++)
72 				if (makmove(j))
73 					writel ("AARGH!!!\n");
74 		if (tflag)
75 			refresh();
76 		nexturn();
77 		D0 = test[i].new1;
78 		D1 = test[i].new2;
79 		d0 = 0;
80 		i++;
81 		mvlim = movallow();
82 		if (mvlim)  {
83 			if (tflag)
84 				clrest();
85 			proll();
86 			writec('\t');
87 			getmove();
88 			if (tflag)
89 				refresh();
90 			if (cturn == 0)
91 				leave();
92 		}
93 	}
94 	leave();
95 }
96 
97 clrest ()  {
98 	register int	r, c, j;
99 
100 	r = curr;
101 	c = curc;
102 	for (j = r+1; j < 24; j++)  {
103 		curmove (j,0);
104 		cline();
105 	}
106 	curmove (r,c);
107 }
108 
109 brdeq (b1,b2)
110 register int  *b1, *b2;
111 
112 {
113 	register int  *e;
114 
115 	e = b1+26;
116 	while (b1 < e)
117 		if (*b1++ != *b2++)
118 			return(0);
119 	return(1);
120 }
121