X-Git-Url: http://winboard.nl/cgi-bin?a=blobdiff_plain;f=fairymax.c;h=dfa3ea61bbb0e5861a7efcef4f5cf76d4a8fd4fa;hb=c62ef367da4863f395624f3eb02cc9f215b42ada;hp=c68ca204447e3aef5c51e1fcc8ed10f50a60cadf;hpb=a93cdacb82bd916e110d71611754bb9ef9be1e67;p=fairymax.git diff --git a/fairymax.c b/fairymax.c index c68ca20..dfa3ea6 100644 --- a/fairymax.c +++ b/fairymax.c @@ -68,10 +68,10 @@ int StartKey; #endif /* make unique integer from engine move representation */ -#define PACK_MOVE 256*K + L + (PromPiece << 16); +#define PACK_MOVE 256*K + L + (PromPiece << 16) + (GT<<24); /* convert intger argument back to engine move representation */ -#define UNPACK_MOVE(A) K = (A)>>8 & 255; L = (A) & 255; PromPiece = (A)>>16 & 255; +#define UNPACK_MOVE(A) K = (A)>>8 & 255; L = (A) & 255; PromPiece = (A)>>16 & 255; GT = (A)>>24 & 255; /* Global variables visible to engine. Normally they */ /* would be replaced by the names under which these */ @@ -608,7 +608,7 @@ int main(int argc, char **argv) if (!strcmp(command, "protover")) { printf("feature myname=\"" NAME " " VERSION "\"\n"); printf("feature memory=1\n"); - printf("feature setboard=0 ping=1 done=0\n"); + printf("feature setboard=0 xedit=1 ping=1 done=0\n"); printf("feature variants=\""); PrintVariants(0); printf("\"\n"); @@ -815,11 +815,18 @@ int main(int argc, char **argv) Q = -Q; continue; } - if( m >= 'A' && m <= 'Z' && piecetype[m&31] - && line[1] >= 'a' && line[1] <= 'a'+BW-1 + if( m >= 'A' && m <= 'Z' && piecetype[m&31]) { + p = (color == WHITE ? piecetype : blacktype)[line[0]&31]; + if(line[1] == '@') { // stuff holdings + pl[color+p+5] = m = line[2] - '0'; + pl[BLACK+WHITE-color]+=m;pl[p+color]+=m; + Q+=m*w[p]; R+=m*(w[p]/FAC); + continue; + } else + if(line[1] >= 'a' && line[1] <= 'a'+BW-1 && line[2] >= '1' && line[2] <= '0'+BH) { m = line[1]-16*line[2]+799; - switch(p = (color == WHITE ? piecetype : blacktype)[line[0]&31]) + switch(p) { case 1: case 2: @@ -843,6 +850,7 @@ int main(int argc, char **argv) pl[BLACK+WHITE-color]++;pl[p+color]++; if(w[p+color] == -1)pl[p+color]=1; // fake we have one if value = -1, to thwart extinction condition continue; + } } } if(Side != color) Q = -Q;