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