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