1 static char sccsid[] = " check.c 4.1 82/05/11 "; 2 3 #include "back.h" 4 5 getmove () { 6 register int i, c; 7 8 c = 0; 9 for (;;) { 10 i = checkmove(c); 11 12 switch (i) { 13 case -1: 14 if (movokay(mvlim)) { 15 if (tflag) 16 curmove (20,0); 17 else 18 writec ('\n'); 19 for (i = 0; i < mvlim; i++) 20 if (h[i]) 21 wrhit(g[i]); 22 nexturn(); 23 if (*offopp == 15) 24 cturn *= -2; 25 if (tflag && pnum) 26 bflag = pnum; 27 return; 28 } 29 30 case -4: 31 case 0: 32 if (tflag) 33 refresh(); 34 if (i != 0 && i != -4) 35 break; 36 if (tflag) 37 curmove (20,0); 38 else 39 writec ('\n'); 40 writel (*Colorptr); 41 if (i == -4) 42 writel (" must make "); 43 else 44 writel (" can only make "); 45 writec (mvlim+'0'); 46 writel (" move"); 47 if (mvlim > 1) 48 writec ('s'); 49 writec ('.'); 50 writec ('\n'); 51 break; 52 53 case -3: 54 if (quit()) 55 return; 56 } 57 58 if (! tflag) 59 proll (); 60 else { 61 curmove (cturn == -1? 18: 19,39); 62 cline (); 63 c = -1; 64 } 65 } 66 } 67 68 movokay (mv) 69 register int mv; 70 71 { 72 register int i, m; 73 74 if (d0) 75 swap; 76 77 for (i = 0; i < mv; i++) { 78 79 if (p[i] == g[i]) { 80 moverr (i); 81 curmove (20,0); 82 writel ("Attempt to move to same location.\n"); 83 return (0); 84 } 85 86 if (cturn*(g[i]-p[i]) < 0) { 87 moverr (i); 88 curmove (20,0); 89 writel ("Backwards move.\n"); 90 return (0); 91 } 92 93 if (abs(board[bar]) && p[i] != bar) { 94 moverr (i); 95 curmove (20,0); 96 writel ("Men still on bar.\n"); 97 return (0); 98 } 99 100 if ( (m = makmove(i)) ) { 101 moverr (i); 102 switch (m) { 103 104 case 1: 105 writel ("Move not rolled.\n"); 106 break; 107 108 case 2: 109 writel ("Bad starting position.\n"); 110 break; 111 112 case 3: 113 writel ("Destination occupied.\n"); 114 break; 115 116 case 4: 117 writel ("Can't remove men yet.\n"); 118 } 119 return (0); 120 } 121 } 122 return (1); 123 } 124