|
|
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[] = "@(#)table.c 5.3 (Berkeley) 6/18/88";
20: #endif /* not lint */
21:
22: #include "back.h"
23:
24: char *help2[] = {
25: " Enter moves as <s>-<f> or <s>/<r> where <s> is the starting",
26: "position, <f> is the finishing position, and <r> is the roll.",
27: "Remember, each die roll must be moved separately.",
28: 0
29: };
30:
31: struct state {
32: char ch;
33: int fcode;
34: int newst;
35: };
36:
37: struct state atmata[] = {
38:
39: 'R', 1, 0, '?', 7, 0, 'Q', 0, -3, 'B', 8, 25,
40: '9', 2, 25, '8', 2, 25, '7', 2, 25, '6', 2, 25,
41: '5', 2, 25, '4', 2, 25, '3', 2, 25, '2', 2, 19,
42: '1', 2, 15, '0', 2, 25, '.', 0, 0, '9', 2, 25,
43: '8', 2, 25, '7', 2, 25, '6', 2, 25, '5', 2, 25,
44:
45: '4', 2, 25, '3', 2, 25, '2', 2, 25, '1', 2, 25,
46: '0', 2, 25, '/', 0, 32, '-', 0, 39, '.', 0, 0,
47: '/', 5, 32, ' ', 6, 3, ',', 6, 3, '\n', 0, -1,
48: '6', 3, 28, '5', 3, 28, '4', 3, 28, '3', 3, 28,
49: '2', 3, 28, '1', 3, 28, '.', 0, 0, 'H', 9, 61,
50:
51: '9', 4, 61, '8', 4, 61, '7', 4, 61, '6', 4, 61,
52: '5', 4, 61, '4', 4, 61, '3', 4, 61, '2', 4, 53,
53: '1', 4, 51, '0', 4, 61, '.', 0, 0, '9', 4, 61,
54: '8', 4, 61, '7', 4, 61, '6', 4, 61, '5', 4, 61,
55: '4', 4, 61, '3', 4, 61, '2', 4, 61, '1', 4, 61,
56:
57: '0', 4, 61, ' ', 6, 3, ',', 6, 3, '-', 5, 39,
58: '\n', 0, -1, '.', 0, 0
59: };
60:
61: checkmove (ist)
62:
63: int ist;
64:
65: {
66: register int j, n;
67: register char c;
68: char a;
69:
70: domove:
71: if (ist == 0) {
72: if (tflag)
73: curmove (curr,32);
74: else
75: writel ("\t\t");
76: writel ("Move: ");
77: }
78: ist = mvl = ncin = 0;
79: for (j = 0; j < 5; j++)
80: p[j] = g[j] = -1;
81:
82: dochar:
83: c = readc();
84:
85: if (c == 'S') {
86: raflag = 0;
87: save (1);
88: if (tflag) {
89: curmove (cturn == -1? 18: 19,39);
90: ist = -1;
91: goto domove;
92: } else {
93: proll ();
94: ist = 0;
95: goto domove;
96: }
97: }
98:
99: if (c == tty.sg_erase && ncin > 0) {
100: if (tflag)
101: curmove (curr,curc-1);
102: else {
103: if (tty.sg_erase == '\010')
104: writel ("\010 \010");
105: else
106: writec (cin[ncin-1]);
107: }
108: ncin--;
109: n = rsetbrd();
110: if (n == 0) {
111: n = -1;
112: if (tflag)
113: refresh();
114: }
115: if ((ist = n) > 0)
116: goto dochar;
117: goto domove;
118: }
119:
120: if (c == tty.sg_kill && ncin > 0) {
121: if (tflag) {
122: refresh();
123: curmove (curr,39);
124: ist = -1;
125: goto domove;
126: } else if (tty.sg_erase == '\010') {
127: for (j = 0; j < ncin; j++)
128: writel ("\010 \010");
129: ist = -1;
130: goto domove;
131: } else {
132: writec ('\\');
133: writec ('\n');
134: proll ();
135: ist = 0;
136: goto domove;
137: }
138: }
139:
140: n = dotable(c,ist);
141: if (n >= 0) {
142: cin[ncin++] = c;
143: if (n > 2)
144: if ((! tflag) || c != '\n')
145: writec (c);
146: ist = n;
147: if (n)
148: goto dochar;
149: else
150: goto domove;
151: }
152:
153: if (n == -1 && mvl >= mvlim)
154: return(0);
155: if (n == -1 && mvl < mvlim-1)
156: return(-4);
157:
158: if (n == -6) {
159: if (! tflag) {
160: if (movokay(mvl+1)) {
161: wrboard();
162: movback (mvl+1);
163: }
164: proll ();
165: writel ("\t\tMove: ");
166: for (j = 0; j < ncin;)
167: writec (cin[j++]);
168: } else {
169: if (movokay(mvl+1)) {
170: refresh();
171: movback (mvl+1);
172: } else
173: curmove (cturn == -1? 18:19,ncin+39);
174: }
175: ist = n = rsetbrd();
176: goto dochar;
177: }
178:
179: if (n != -5)
180: return(n);
181: writec ('\007');
182: goto dochar;
183: }
184:
185: dotable (c,i)
186: char c;
187: register int i;
188:
189: {
190: register int a, j;
191: int test;
192:
193: test = (c == 'R');
194:
195: while ( (a = atmata[i].ch) != '.') {
196: if (a == c || (test && a == '\n')) {
197: switch (atmata[i].fcode) {
198:
199: case 1:
200: wrboard();
201: if (tflag) {
202: curmove (cturn == -1? 18: 19,0);
203: proll ();
204: writel ("\t\t");
205: } else
206: proll ();
207: break;
208:
209: case 2:
210: if (p[mvl] == -1)
211: p[mvl] = c-'0';
212: else
213: p[mvl] = p[mvl]*10+c-'0';
214: break;
215:
216: case 3:
217: if (g[mvl] != -1) {
218: if (mvl < mvlim)
219: mvl++;
220: p[mvl] = p[mvl-1];
221: }
222: g[mvl] = p[mvl]+cturn*(c-'0');
223: if (g[mvl] < 0)
224: g[mvl] = 0;
225: if (g[mvl] > 25)
226: g[mvl] = 25;
227: break;
228:
229: case 4:
230: if (g[mvl] == -1)
231: g[mvl] = c-'0';
232: else
233: g[mvl] = g[mvl]*10+c-'0';
234: break;
235:
236: case 5:
237: if (mvl < mvlim)
238: mvl++;
239: p[mvl] = g[mvl-1];
240: break;
241:
242: case 6:
243: if (mvl < mvlim)
244: mvl++;
245: break;
246:
247: case 7:
248: if (tflag)
249: curmove (20,0);
250: else
251: writec ('\n');
252: text (help2);
253: if (tflag) {
254: curmove (cturn == -1? 18: 19,39);
255: } else {
256: writec ('\n');
257: proll();
258: writel ("\t\tMove: ");
259: }
260: break;
261:
262: case 8:
263: p[mvl] = bar;
264: break;
265:
266: case 9:
267: g[mvl] = home;
268: }
269:
270: if (! test || a != '\n')
271: return (atmata[i].newst);
272: else
273: return (-6);
274: }
275:
276: i++;
277: }
278:
279: return (-5);
280: }
281:
282: rsetbrd () {
283: register int i, j, n;
284:
285: n = 0;
286: mvl = 0;
287: for (i = 0; i < 4; i++)
288: p[i] = g[i] = -1;
289: for (j = 0; j < ncin; j++)
290: n = dotable (cin[j],n);
291: return (n);
292: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.