home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V7 / usr / src / games / chess / stdin.c < prev    next >
Encoding:
C/C++ Source or Header  |  1979-05-05  |  2.5 KB  |  203 lines

  1. #include "old.h"
  2.  
  3. stdin()
  4. {
  5.     int piece1, piece2, side1, side2, rnk1, rnk2, file1, file2;
  6.     int ckf, c, m, *p1, *p2, to, amb, piece;
  7.  
  8.     piece1 = piece2 = side1 = side2 = -1;
  9.     rnk1 = rnk2 = file1 = file2  = -1;
  10.     ckf = 0;
  11.     if(match("o-o-o")||match("ooo")) {
  12.         piece1 = 6;
  13.         file1 = 3;
  14.         side1 = 1;
  15.         file2 = 2;
  16.         side2 = 0;
  17.         goto search;
  18.     }
  19.     if(match("o-o")||match("oo")) {
  20.         piece1 = 6;
  21.         file1 = 3;
  22.         file2 = 1;
  23.         goto search;
  24.     }
  25.     stdpin(&piece1, &side1, &rnk1, &file1);
  26.     c = *sbufp++;
  27.     if(c=='*' || c=='x')
  28.         stdpin(&piece2, &side2, &rnk2, &file2); else
  29.     if(c == '-')
  30.         stdbin(&side2, &rnk2, &file2); else
  31.         sbufp--;
  32.  
  33. search:
  34.     c = *sbufp++;
  35.     if(c == '+') {
  36.         ckf = 1;
  37.         c = *sbufp++;
  38.     }
  39.     if(c != '\0')
  40.         return(0);
  41.  
  42.     p1 = p2 = lmp;
  43.     mantom? bagen(): wagen();
  44.     m = -1;
  45.     amb = 0;
  46.     while(p1 != lmp) {
  47.         p1++;
  48.         piece = board[*p1>>8];
  49.         mantom? bmove(*p1): wmove(*p1);
  50.         to = amp[-3];
  51.         if(pcomp(piece, amp[-4],
  52.             piece1, side1, rnk1, file1))
  53.         if(pcomp(amp[-2], to,
  54.             piece2, side2, rnk2, file2))
  55.         if(comp(ckf, check())) {
  56.             if(m >= 0) {
  57.                 if(!amb) {
  58.                     printf("ambiguous\n");
  59.                     amb = 1;
  60.                 }
  61.             }
  62.             m = *p1;
  63.         }
  64.         p1++;
  65.         mantom? bremove(): wremove();
  66.     }
  67.     lmp = p2;
  68.     if(amb) return(-1);
  69.     return(m);
  70. }
  71.  
  72. stdpin(ap, as, ar, af)
  73. int *ap, *as, *ar, *af;
  74. {
  75.     int c;
  76.  
  77.     c = *sbufp++;
  78.     if(c == 'q') {
  79.         *as = 0;
  80.         stdpin(ap, as, ar, af);
  81.         return;
  82.     }
  83.     if(c == 'k') {
  84.         *as = 1;
  85.         stdpin(ap, as, ar, af);
  86.         return;
  87.     }
  88.     if(c == 'p') {
  89.         *ap = 1;
  90.         if(*as >= 0)
  91.             *af = 3;
  92.         goto loc;
  93.     }
  94.     if(c == 'n') {
  95.         *ap = 2;
  96.         goto pie;
  97.     }
  98.     if(c == 'b') {
  99.         *ap = 3;
  100.         goto pie;
  101.     }
  102.     if(c == 'r') {
  103.         *ap = 4;
  104.         goto pie;
  105.     }
  106.     sbufp--;
  107.     goto loc;
  108.  
  109. pie:
  110.     if(*sbufp == 'p') {
  111.         *af = (*ap-1)%3;
  112.         *ap = 1;
  113.         sbufp++;
  114.     }
  115.  
  116. loc:
  117.     if(*ap<0 && *as>=0) {
  118.         *ap = *as+5;
  119.         *as = -1;
  120.     }
  121.     if(*sbufp == '/') {
  122.         sbufp++;
  123.         stdbin(as, ar, af);
  124.     }
  125. }
  126.  
  127. stdbin(as, ar, af)
  128. int *as, *ar, *af;
  129. {
  130.     int c;
  131.  
  132. loop:
  133.     c = *sbufp++;
  134.     if(c == 'q') {
  135.         *as = 0;
  136.         goto kq;
  137.     }
  138.     if(c == 'k') {
  139.         *as = 1;
  140.     kq:
  141.         stdbin(as, ar, af);
  142.         if(*af < 0)
  143.             *af = 3;
  144.         return;
  145.     }
  146.  
  147.     if(c == 'r') {
  148.         *af = 0;
  149.         goto loop;
  150.     }
  151.     if(c == 'n') {
  152.         *af = 1;
  153.         goto loop;
  154.     }
  155.     if(c == 'b') {
  156.         *af = 2;
  157.         goto loop;
  158.     }
  159.     if(c>'0' && c<'9')
  160.         *ar = c-'1'; else
  161.         sbufp--;
  162. }
  163.  
  164. pcomp(p, l, pp, sp, rp, fp)
  165. int p, l, pp, sp, rp, fp;
  166. {
  167.     int r, f, s;
  168.  
  169.     f = l%8;
  170.     r = l/8;
  171.     if(!mantom)
  172.         r = 7-r;
  173.     if(f > 3) {
  174.         f = 7-f;
  175.         s = 1;
  176.     } else
  177.         s = 0;
  178.  
  179.     if(comp(pp, p))
  180.     if(comp(sp, s))
  181.     if(comp(rp, r))
  182.     if(comp(fp, f))
  183.         return(1);
  184.     return(0);
  185. }
  186.  
  187. comp(p, v)
  188. int p, v;
  189. {
  190.  
  191.     if(p < 0) return(1);
  192.     return(p == abs(v));
  193. }
  194.  
  195. abs(x)
  196. int x;
  197. {
  198.  
  199.     if(x < 0)
  200.         return(-x);
  201.     return(x);
  202. }
  203.