Ultrix-3.1/src/games/chess/wplay.c

Compare this file to the similar file:
Show the results in this format:


/**********************************************************************
 *   Copyright (c) Digital Equipment Corporation 1984, 1985, 1986.    *
 *   All Rights Reserved. 					      *
 *   Reference "/usr/src/COPYRIGHT" for applicable restrictions.      *
 **********************************************************************/

#include "old.h"

wplay()
{
	int v1, v2, *p1, *p2, *p3, ab;

	if(value < ivalue)
		ivalue = value;
	ab = 0;
	v1 = 3000;
	ply = 0;
	p1 = statl();
	if(lmp == p1+2) {
		abmove = p1[1];
		lmp = p1;
		return(ivalue);
	}
	p2 = p1;
	mantom = !mantom;
	while(p2 != lmp) {
		p2++;
		wmove(*p2);
		if(testf) {
			mantom = !mantom;
			wstatic(1);
			mantom = !mantom;
		}
		if(rept())
			v2 = 0; else
			v2 = bplay1(v1);
		if(v2 < v1 && !mate(3, 0)) {
			ab = *p2;
			v1 = v2;
		}
		wremove();
		if(testf) {
			mantom = !mantom;
			printf("%6d ", v2);
			out(*p2);
			printf("\n");
			mantom = !mantom;
		}
		p2++;
	}
	if(ab == 0 && lmp != p1)
		ab = p1[1];
	mantom = !mantom;
	lmp = p1;
	abmove = ab;
	return(v1);
}

wplay1(ab)
int ab;
{
	int v1, v2, *p1, *p2;

	if(ply >= depth)
		return(wquies(ab));
	ply++;
	p1 = p2 = lmp;
	wgen();
	qsort(p1, lmp);
	v1 = 3000;
	while(p2 != lmp) {
		if(intrp)
			goto out;
		p2++;
		wmove(*p2);
		if(battack(wkpos)) {
			v2 = bplay1(v1);
			if(v2 < v1)
				v1 = v2;
		}
		wremove();
		if(v1 <= ab)
			goto out;
		p2++;
	}
out:
	ply--;
	lmp = p1;
	if(v1 == 3000) {
		v1--;
		if(!check())
			v1 = 0;
	}
	return(v1);
}

wquies(ab)
int ab;
{
	int *p1, *p2, *p3, v1, v2;

	if(ply >= qdepth)
		return(ivalue);
	p1 = p2 = p3 = lmp;
	wgen();
	while(p2 != lmp) {
		v1 = *p2++;
		if(v1 != value && v1 <= ivalue+50) {
			*p3++ = (((pval+6)[board[*p2>>8]]/100)<<8) |
				(-(pval+6)[board[*p2&0377]]/100);
			*p3++ = *p2;
		}
		p2++;
	}
	if(p3 == p1) {
		lmp = p1;
		return(value);
	}
	ply++;
	qsort(p1, p3);
	lmp = p3;
	p2 = p1;
	v1 = value;
	while(p2 != lmp) {
		p2++;
		wmove(*p2);
		if(battack(wkpos)) {
			v2 = bquies(v1);
		} else
			v2 = 3000;
		if(v2 < v1)
			v1 = v2;
		wremove();
		if(v1 <= ab)
			goto out;
		p2++;
	}
out:
	ply--;
	lmp = p1;
	return(v1);
}