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