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