home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Professional
/
OS2PRO194.ISO
/
os2
/
wps
/
games
/
gnuchess
/
sources
/
gnuchess.h
< prev
next >
Wrap
C/C++ Source or Header
|
1990-11-29
|
6KB
|
251 lines
//
// Copyright (C) 1986, 1987, 1988, 1989, 1990 Free Software Foundation, Inc.
//
// Project: OS/2 PM Port of GNU CHESS 3.1 (PmChess)
//
// Version: 1990-04-18
//
// Include: Header file for the GNU Chess Logic (GnuChess.h)
//
// Porter: Ported to Windows 3.0 by Darly Baker
//
// Porter: Ported to OS/2 1.2+ by Kent Cedola
//
// System: OS2 1.2 using Microsoft C 6.0
//
// Remarks: This code converted to OS/2 almost as is.
//
// License:
//
// CHESS is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY. No author or distributor accepts responsibility to anyone for
// the consequences of using it or for whether it serves any particular
// purpose or works at all, unless he says so in writing. Refer to the
// CHESS General Public License for full details.
//
// Everyone is granted permission to copy, modify and redistribute CHESS,
// but only under the conditions described in the CHESS General Public
// License. A copy of this license is supposed to have been given to you
// along with CHESS so you can know your rights and responsibilities. It
// should be in a file named COPYING. Among other things, the copyright
// notice and this notice must be preserved on all copies.
//
#include <stdio.h>
#define SEEK_SET 0
#define SEEK_END 2
#if !defined(__STDC__) || !defined(MSDOS)
#define const
#endif
#ifndef __GNUC__
#define inline
#endif
/*
ttblsz must be a power of 2.
Setting ttblsz 0 removes the transposition tables.
*/
#ifdef MSDOS
#define ttblsz (1 << 11)
#else
#define ttblsz (1 << 16)
#define huge
#endif /* MSODS */
#define maxdepth 30
#define white 0
#define black 1
#define neutral 2
#define no_piece 0
#define pawn 1
#define knight 2
#define bishop 3
#define rook 4
#define queen 5
#define king 6
#define bpawn 7
#define pmask 0x0007
#define promote 0x0008
#define cstlmask 0x0010
#define epmask 0x0020
#define exact 0x0040
#define pwnthrt 0x0080
#define check 0x0100
#define capture 0x0200
#define draw 0x0400
#define maxdepth 30
#define false 0
#define true 1
/* #define absv(x) ((x) < 0 ? -(x) : (x)) */
#define valueP 100
#define valueN 350
#define valueB 355
#define valueR 550
#define valueQ 1100
#define valueK 1200
#define ctlP 0x4000
#define ctlN 0x2800
#define ctlB 0x1800
#define ctlR 0x0400
#define ctlQ 0x0200
#define ctlK 0x0100
#define ctlBQ 0x1200
#define ctlBN 0x0800
#define ctlRQ 0x0600
#define ctlNN 0x2000
#define Patak(c, u) (atak[c][u] > ctlP)
#define Anyatak(c, u) (atak[c][u] > 0)
#if ttblsz
#define truescore 0x0001
#define lowerbound 0x0002
#define upperbound 0x0004
#define kingcastle 0x0008
#define queencastle 0x0010
struct hashval
{
unsigned long key,bd;
};
struct hashentry
{
unsigned long hashbd;
unsigned short mv;
unsigned char flags, depth; /* char saves some space */
short score;
#ifdef HASHTEST
unsigned char bd[32];
#endif /* HASHTEST */
};
#ifdef HASHFILE
/*
persistent transposition table.
The size must be a power of 2. If you change the size,
be sure to run gnuchess -t before anything else.
*/
#define frehash 6
#ifdef MSDOS
#define filesz (1 << 11)
#else
#define filesz (1 << 17)
#endif /* MSDOS */
struct fileentry
{
unsigned char bd[32];
unsigned char f, t, flags, depth, sh, sl;
};
/*
In a networked enviroment gnuchess might be compiled on different
hosts with different random number generators, that is not acceptable
if they are going to share the same transposition table.
*/
unsigned int urand (void);
//void srand (unsigned int seed);
#else
//int rand (void);
//void srand ( unsigned int seed);
#define urand rand
#endif /* HASHFILE */
extern unsigned long hashkey, hashbd;
extern struct hashval far hashcode[2][7][64];
#ifdef M_I386
extern struct hashentry ttable[2][ttblsz];
#else
extern struct hashentry far ttable[2][ttblsz];
#endif
#endif /* ttblsz */
extern HWND hComputerColor;
extern HWND hComputerMove;
extern HWND hWhosTurn;
extern HWND hClockComputer;
extern HWND hClockHuman;
extern HWND hMsgComputer;
extern HWND hMsgHuman;
extern HWND hStats;
struct leaf
{
short f, t, score, reply;
unsigned short flags;
};
struct GameRec
{
unsigned short gmove;
short score, depth, time, piece, color;
long nodes;
};
struct TimeControlRec
{
short moves[2];
long clock[2];
};
struct BookEntry
{
struct BookEntry *next;
unsigned short *mv;
};
struct flags
{
short mate; /* the game is over */
short post; /* show principle variation */
short quit; /* quit/exit gnuchess */
short reverse; /* reverse board display */
short bothsides; /* computer plays both sides */
short hash; /* enable/disable transposition table */
short force; /* enter moves */
short easy; /* disable thinking on opponents time */
short beep; /* enable/disable beep */
short timeout; /* time to make a move */
short rcptr; /* enable/disable recapture heuristics */
};
extern struct leaf far Tree[2000], far *root;
extern short TrPnt[maxdepth];
extern short board[64], color[64];
extern short PieceList[2][16], PawnCnt[2][8];
extern short castld[2], Mvboard[64];
extern short svalue[64];
extern struct flags flag;
extern short opponent, computer, Awindow, Bwindow, INCscore;
extern short dither, player;
extern short xwndw, epsquare, contempt;
extern long ResponseTime, ExtraTime, Level, et, et0, time0, ft;
extern long NodeCnt, ETnodes, EvalNodes, HashCnt, HashCol;
extern struct GameRec far GameList[512];
extern short GameCnt, Game50;
extern short Sdepth, MaxSearchDepth;
extern struct BookEntry *Book;
extern struct TimeControlRec TimeControl;
extern short TCflag, TCmoves, TCminutes, OperatorTime;
extern short otherside[3];
extern short Stboard[64];
extern short Stcolor[64];
extern unsigned short hint, PrVar[maxdepth];
#define distance(a,b) distdata[a][b]
#define row(a) ((a) >> 3)
#define column(a) ((a) & 7)
#define locn(a,b) (((a) << 3) | b)
extern short far distdata[64][64];