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: }

Defined functions

checkmove defined in line 50; used 1 times
dotable defined in line 174; used 2 times
rsetbrd defined in line 271; used 2 times

Defined variables

atmata defined in line 26; used 3 times
help2 defined in line 13; used 1 times
sccsid defined in line 8; never used

Defined struct's

state defined in line 20; used 2 times
  • in line 26(2)
Last modified: 1985-05-29
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 2867
Valid CSS Valid XHTML 1.0 Strict