|
|
1.1 root 1: /*
2: * Copyright (c) 1980 Regents of the University of California.
3: * All rights reserved.
4: *
5: * Redistribution and use in source and binary forms are permitted
6: * provided that the above copyright notice and this paragraph are
7: * duplicated in all such forms and that any documentation,
8: * advertising materials, and other materials related to such
9: * distribution and use acknowledge that the software was developed
10: * by the University of California, Berkeley. The name of the
11: * University may not be used to endorse or promote products derived
12: * from this software without specific prior written permission.
13: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15: * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
16: */
17:
18: #ifndef lint
19: static char sccsid[] = "@(#)tutor.c 5.3 (Berkeley) 6/18/88";
20: #endif /* not lint */
21:
22: #include "back.h"
23: #include "tutor.h"
24:
25: extern int maxmoves;
26: extern char *finis[];
27:
28: extern struct situatn test[];
29:
30: static char better[] = "That is a legal move, but there is a better one.\n";
31:
32: tutor () {
33: register int i, j;
34:
35: i = 0;
36: begscr = 18;
37: cturn = -1;
38: home = 0;
39: bar = 25;
40: inptr = &in[0];
41: inopp = &in[1];
42: offptr = &off[0];
43: offopp = &off[1];
44: Colorptr = &color[0];
45: colorptr = &color[2];
46: colen = 5;
47: wrboard();
48:
49: while (1) {
50: if (! brdeq(test[i].brd,board)) {
51: if (tflag && curr == 23)
52: curmove (18,0);
53: writel (better);
54: nexturn();
55: movback (mvlim);
56: if (tflag) {
57: refresh();
58: clrest ();
59: }
60: if ((! tflag) || curr == 19) {
61: proll();
62: writec ('\t');
63: }
64: else
65: curmove (curr > 19? curr-2: curr+4,25);
66: getmove();
67: if (cturn == 0)
68: leave();
69: continue;
70: }
71: if (tflag)
72: curmove (18,0);
73: text (*test[i].com);
74: if (! tflag)
75: writec ('\n');
76: if (i == maxmoves)
77: break;
78: D0 = test[i].roll1;
79: D1 = test[i].roll2;
80: d0 = 0;
81: mvlim = 0;
82: for (j = 0; j < 4; j++) {
83: if (test[i].mp[j] == test[i].mg[j])
84: break;
85: p[j] = test[i].mp[j];
86: g[j] = test[i].mg[j];
87: mvlim++;
88: }
89: if (mvlim)
90: for (j = 0; j < mvlim; j++)
91: if (makmove(j))
92: writel ("AARGH!!!\n");
93: if (tflag)
94: refresh();
95: nexturn();
96: D0 = test[i].new1;
97: D1 = test[i].new2;
98: d0 = 0;
99: i++;
100: mvlim = movallow();
101: if (mvlim) {
102: if (tflag)
103: clrest();
104: proll();
105: writec('\t');
106: getmove();
107: if (tflag)
108: refresh();
109: if (cturn == 0)
110: leave();
111: }
112: }
113: leave();
114: }
115:
116: clrest () {
117: register int r, c, j;
118:
119: r = curr;
120: c = curc;
121: for (j = r+1; j < 24; j++) {
122: curmove (j,0);
123: cline();
124: }
125: curmove (r,c);
126: }
127:
128: brdeq (b1,b2)
129: register int *b1, *b2;
130:
131: {
132: register int *e;
133:
134: e = b1+26;
135: while (b1 < e)
136: if (*b1++ != *b2++)
137: return(0);
138: return(1);
139: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.