BSD.include.dist: Use spaces to indent (see etc/mtree/README).
[dragonfly.git] / games / backgammon / teachgammon / tutor.c
blobc4de5923aa8e120296ac3466d243dd4d93956307
1 /*-
2 * Copyright (c) 1980, 1993
3 * The Regents of the University of California. All rights reserved.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. Neither the name of the University nor the names of its contributors
14 * may be used to endorse or promote products derived from this software
15 * without specific prior written permission.
17 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
29 * @(#)tutor.c 8.1 (Berkeley) 5/31/93
30 * $FreeBSD: src/games/backgammon/teachgammon/tutor.c,v 1.5 1999/11/30 03:48:31 billf Exp $
31 * $DragonFly: src/games/backgammon/teachgammon/tutor.c,v 1.3 2006/08/08 16:36:11 pavalos Exp $
34 #include "back.h"
35 #include "tutor.h"
37 static void clrest(void);
38 static int brdeq(const int *, const int *);
40 static const char better[] = "That is a legal move, but there is a better one.\n";
42 void
43 tutor(void)
45 int i, j;
47 i = 0;
48 begscr = 18;
49 cturn = -1;
50 home = 0;
51 bar = 25;
52 inptr = &in[0];
53 inopp = &in[1];
54 offptr = &off[0];
55 offopp = &off[1];
56 Colorptr = &color[0];
57 colorptr = &color[2];
58 colen = 5;
59 wrboard();
61 while (1) {
62 if (!brdeq(test[i].brd, board)) {
63 if (tflag && curr == 23)
64 curmove(18, 0);
65 writel(better);
66 nexturn();
67 movback(mvlim);
68 if (tflag) {
69 refresh();
70 clrest();
72 if ((!tflag) || curr == 19) {
73 proll();
74 writec('\t');
75 } else
76 curmove(curr > 19 ? curr - 2 : curr + 4, 25);
77 getmove();
78 if (cturn == 0)
79 leave();
80 continue;
82 if (tflag)
83 curmove(18, 0);
84 text(*test[i].com);
85 if (!tflag)
86 writec('\n');
87 if (i == maxmoves)
88 break;
89 D0 = test[i].roll1;
90 D1 = test[i].roll2;
91 d0 = 0;
92 mvlim = 0;
93 for (j = 0; j < 4; j++) {
94 if (test[i].mp[j] == test[i].mg[j])
95 break;
96 p[j] = test[i].mp[j];
97 g[j] = test[i].mg[j];
98 mvlim++;
100 if (mvlim)
101 for (j = 0; j < mvlim; j++)
102 if (makmove(j))
103 writel("AARGH!!!\n");
104 if (tflag)
105 refresh();
106 nexturn();
107 D0 = test[i].new1;
108 D1 = test[i].new2;
109 d0 = 0;
110 i++;
111 mvlim = movallow();
112 if (mvlim) {
113 if (tflag)
114 clrest();
115 proll();
116 writec('\t');
117 getmove();
118 if (tflag)
119 refresh();
120 if (cturn == 0)
121 leave();
124 leave();
127 static void
128 clrest(void)
130 int r, c, j;
132 r = curr;
133 c = curc;
134 for (j = r + 1; j < 24; j++) {
135 curmove(j, 0);
136 cline();
138 curmove(r, c);
141 static int
142 brdeq(const int *b1, const int *b2)
144 const int *e;
146 e = b1 + 26;
147 while (b1 < e)
148 if (*b1++ != *b2++)
149 return (0);
150 return (1);