1*6764Srrh static char sccsid[] = " one.c 1.1 82/05/11 "; 2*6764Srrh 3*6764Srrh #include "back.h" 4*6764Srrh 5*6764Srrh makmove (i) 6*6764Srrh register int i; 7*6764Srrh 8*6764Srrh { 9*6764Srrh register int n, d; 10*6764Srrh int max; 11*6764Srrh 12*6764Srrh d = d0; 13*6764Srrh n = abs(g[i]-p[i]); 14*6764Srrh max = (*offptr < 0? 7: last()); 15*6764Srrh if (board[p[i]]*cturn <= 0) 16*6764Srrh return (checkd(d)+2); 17*6764Srrh if (g[i] != home && board[g[i]]*cturn < -1) 18*6764Srrh return (checkd(d)+3); 19*6764Srrh if (i || D0 == D1) { 20*6764Srrh if (n == max? D1 < n: D1 != n) 21*6764Srrh return (checkd(d)+1); 22*6764Srrh } else { 23*6764Srrh if (n == max? D0 < n && D1 < n: D0 != n && D1 != n) 24*6764Srrh return (checkd(d)+1); 25*6764Srrh if (n == max? D0 < n: D0 != n) { 26*6764Srrh if (d0) 27*6764Srrh return (checkd(d)+1); 28*6764Srrh swap; 29*6764Srrh } 30*6764Srrh } 31*6764Srrh if (g[i] == home && *offptr < 0) 32*6764Srrh return (checkd(d)+4); 33*6764Srrh h[i] = 0; 34*6764Srrh board[p[i]] -= cturn; 35*6764Srrh if (g[i] != home) { 36*6764Srrh if (board[g[i]] == -cturn) { 37*6764Srrh board[home] -= cturn; 38*6764Srrh board[g[i]] = 0; 39*6764Srrh h[i] = 1; 40*6764Srrh if (abs(bar-g[i]) < 7) { 41*6764Srrh (*inopp)--; 42*6764Srrh if (*offopp >= 0) 43*6764Srrh *offopp -= 15; 44*6764Srrh } 45*6764Srrh } 46*6764Srrh board[g[i]] += cturn; 47*6764Srrh if (abs(home-g[i]) < 7 && abs(home-p[i]) > 6) { 48*6764Srrh (*inptr)++; 49*6764Srrh if (*inptr+*offptr == 0) 50*6764Srrh *offptr += 15; 51*6764Srrh } 52*6764Srrh } else { 53*6764Srrh (*offptr)++; 54*6764Srrh (*inptr)--; 55*6764Srrh } 56*6764Srrh return (0); 57*6764Srrh } 58*6764Srrh 59*6764Srrh moverr (i) 60*6764Srrh register int i; 61*6764Srrh 62*6764Srrh { 63*6764Srrh register int j; 64*6764Srrh 65*6764Srrh if (tflag) 66*6764Srrh curmove (20,0); 67*6764Srrh else 68*6764Srrh writec ('\n'); 69*6764Srrh writel ("Error: "); 70*6764Srrh for (j = 0; j <= i; j++) { 71*6764Srrh wrint (p[j]); 72*6764Srrh writec ('-'); 73*6764Srrh wrint (g[j]); 74*6764Srrh if (j < i) 75*6764Srrh writec (','); 76*6764Srrh } 77*6764Srrh writel ("... "); 78*6764Srrh movback (i); 79*6764Srrh } 80*6764Srrh 81*6764Srrh 82*6764Srrh checkd (d) 83*6764Srrh register int d; 84*6764Srrh 85*6764Srrh { 86*6764Srrh if (d0 != d) 87*6764Srrh swap; 88*6764Srrh return (0); 89*6764Srrh } 90*6764Srrh 91*6764Srrh last () { 92*6764Srrh register int i; 93*6764Srrh 94*6764Srrh for (i = home-6*cturn; i != home; i += cturn) 95*6764Srrh if (board[i]*cturn > 0) 96*6764Srrh return (abs(home-i)); 97*6764Srrh } 98*6764Srrh 99*6764Srrh movback (i) 100*6764Srrh register int i; 101*6764Srrh 102*6764Srrh { 103*6764Srrh register int j; 104*6764Srrh 105*6764Srrh for (j = i-1; j >= 0; j--) 106*6764Srrh backone(j); 107*6764Srrh } 108*6764Srrh 109*6764Srrh backone (i) 110*6764Srrh register int i; 111*6764Srrh 112*6764Srrh { 113*6764Srrh board[p[i]] += cturn; 114*6764Srrh if (g[i] != home) { 115*6764Srrh board[g[i]] -= cturn; 116*6764Srrh if (abs(g[i]-home) < 7 && abs(p[i]-home) > 6) { 117*6764Srrh (*inptr)--; 118*6764Srrh if (*inptr+*offptr < 15 && *offptr >= 0) 119*6764Srrh *offptr -= 15; 120*6764Srrh } 121*6764Srrh } else { 122*6764Srrh (*offptr)--; 123*6764Srrh (*inptr)++; 124*6764Srrh } 125*6764Srrh if (h[i]) { 126*6764Srrh board[home] += cturn; 127*6764Srrh board[g[i]] = -cturn; 128*6764Srrh if (abs(bar-g[i]) < 7) { 129*6764Srrh (*inopp)++; 130*6764Srrh if (*inopp+*offopp == 0) 131*6764Srrh *offopp += 15; 132*6764Srrh } 133*6764Srrh } 134*6764Srrh } 135