home *** CD-ROM | disk | FTP | other *** search
/ C!T ROM 5 / ctrom5b.zip / ctrom5b / OS2 / SPEL / UCHESS / UCHESSRC / GNUCHESS.H < prev    next >
Text File  |  1994-11-07  |  28KB  |  953 lines

  1. #define OS2_PM 1
  2. #define GDX 1 
  3. #define SEMIQUIETBOOKGEN 1 
  4. #define DEEPNULL 1 
  5. #define QUIETBACKGROUND 1 
  6. #define NOSCORESPACE 1 
  7. #define AG4 1 
  8. #define NONDSP 1 
  9. #define LANGFILE "uchess.lan" 
  10. #define BOOK "uchess.bok" 
  11. #define CACHE 1 
  12. #define KILLT 1 
  13. #define HISTORY 1
  14. /*#define LONGINTS 1*/
  15. #define AGING 1
  16. #define NODITHER 1
  17. #define INTSIZE short
  18. /*#define LONGINTS2 1*/
  19. #ifdef LONGINTS
  20. #define INTSIZE2 long
  21. #else
  22. #define INTSIZE2 short
  23. #endif
  24.  
  25. extern char MsgBuf[8][48];
  26.  
  27. #define _M68040
  28.  
  29.  
  30.  
  31. #define __aligned
  32. #define __far
  33. #define __inline
  34. #define __regargs
  35.  
  36. #define VERSTRING "UChess P5 v1.12GA"
  37. #define AVSTR "$VER: UChess P5 (07.11.94)"
  38.  
  39.  
  40. #define ARGSZ long
  41.  
  42. #define REG register
  43.  
  44. /* 
  45.    To fix it as a tool for pgm use, modify the routine
  46.    InputCommand() in dspcom.c and OutputMove() in nondsp.c 
  47.    modify main.c to setup screen, etc,
  48.    modify inline statement below,
  49.    Modify SelectLevel in nondsp.c so that it does not use scanf
  50.    in dspcom.c, ElapsedTime function is where you cut short
  51.    any thinking on human players time.  Around the FIONREAD
  52.    area, you need a loop for looking for the intuition events
  53.    and stop the thinking short if that happens
  54.  
  55.    Modify PromptForMove in nondsp.c, actaully may not be needed at all
  56.  
  57.    */
  58.  
  59. /*
  60.  * gnuchess.h - Header file for GNU CHESS
  61.  *
  62.  * Copyright (c) 1988,1989,1990 John Stanback
  63.  * Copyright (c) 1992 Free Software Foundation
  64.  *
  65.  * This file is part of GNU CHESS.
  66.  *
  67.  * GNU Chess is free software; you can redistribute it and/or modify
  68.  * it under the terms of the GNU General Public License as published by
  69.  * the Free Software Foundation; either version 2, or (at your option)
  70.  * any later version.
  71.  *
  72.  * GNU Chess is distributed in the hope that it will be useful,
  73.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  74.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  75.  * GNU General Public License for more details.
  76.  *
  77.  * You should have received a copy of the GNU General Public License
  78.  * along with GNU Chess; see the file COPYING.  If not, write to
  79.  * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  80.  */
  81.  
  82. /*
  83.  
  84.  On an Amiga 4000, Gnuchess 4.0 gets from  80,000(short), 100,000 (long)
  85.  nodes/sec on MoveList, and 3000(s)-3700(l) Nodes/sec on Eval Speed 
  86.  
  87.  On a SunStation (netcom), Gnuchess 4.0 gets from 100,000 to 133,300 nodes/sec on
  88.  MoveList, and 3700 Nodes/sec on Eval Speed 
  89.  
  90. */
  91.  
  92.  
  93. #if !defined(__STDC__) || !defined(MSDOS)
  94. #define const
  95. #endif
  96.  
  97. #ifndef __GNUC__
  98. #define inline
  99. #endif
  100.  
  101. #define INCL_DOS
  102. #include <stdio.h>
  103. #include "os2.h"
  104.  
  105. //typedef unsigned long ULONG;
  106. typedef unsigned short UWORD;
  107. //typedef unsigned char UBYTE;
  108. //typedef unsigned char   UCHAR;      /* unsigned 8-bit quantity */
  109. typedef short tshort;
  110. typedef unsigned short utshort;
  111. #ifdef USEINT
  112. typedef  int SHORT;
  113. typedef  unsigned int UTSHORT;
  114. #else
  115. typedef unsigned short UTSHORT;
  116. //typedef short SHORT;
  117. #endif
  118.  
  119.  
  120. #ifdef AMIGA
  121. #undef printf
  122. #define printf NULLY
  123. #undef stdin
  124. #undef stdout
  125. #undef stderr
  126. #define stdin NULLYIN
  127. #define stdout NULLYOUT
  128. #define stderr NULLYERR
  129. #undef scanf
  130. #define scanf NULLYSCANF
  131. #endif
  132.  
  133. #define SEEK_SET 0
  134. #define SEEK_END 2
  135. #ifdef DEBUG
  136. void
  137. ShowDBLine (char *, INTSIZE int, INTSIZE int,
  138.         INTSIZE int, INTSIZE int, INTSIZE int,
  139.         INTSIZE unsigned int *);
  140.      extern FILE *debugfd;
  141.      extern INTSIZE int debuglevel;
  142.  
  143. #endif /* DEBUG */
  144.  
  145. #include <ctype.h>
  146.  
  147. #ifdef AMIGA
  148. #define __USE_SYSBASE
  149. #include <exec/types.h>
  150. #include <dos/dos.h>
  151. #include <proto/exec.h>
  152. #endif
  153.  
  154.  
  155. extern long int GenCnt;
  156.  
  157. extern int GlobalTgtDepth;
  158. extern int TCadd;
  159. extern int mycnt3;
  160. extern int globalmessage_valid;
  161. extern struct IntuiMessage globalmessage;
  162. extern char HintString[80];
  163. extern char MateString[40];
  164. extern int AmigaStarted;
  165. extern int Mate;
  166. extern int DrawnGame;
  167.  
  168. void
  169.  TestSpeed (void (*f) (INTSIZE int side, INTSIZE int ply), unsigned j);
  170. void
  171.  TestPSpeed (INTSIZE int (*f) (INTSIZE int side), unsigned j);
  172.  
  173. void GetEditText(char *,int *);
  174. void CloseAmigaEditWindow(void);
  175. int OpenAmigaEditWindow(void);
  176.  
  177. unsigned int urand (void);
  178. void gsrand (unsigned int seed);
  179.  
  180. #ifdef AMIGA
  181. void __regargs MoveMem(void *,void *,ULONG);
  182. void __regargs MoveMem128(void *,void *);
  183. void __regargs ClearMem(void *,ULONG);
  184. #else
  185. void MoveMem128(void *,void *);
  186. void ClearMem(void *,ULONG);
  187. #endif
  188.  
  189. int DoResign(void);
  190. void EnableMoveNow(void);
  191. void DisableMoveNow(void);
  192. void UpdateClocks (void);
  193. int myLoadFullBitMap(int);
  194. void DoLegalMove(char *);
  195. void DisplayComputerMove(char *);
  196. int HandleEvent(ULONG);
  197. void DoAbout(void);
  198. void LoadAGame(void);
  199. void SaveAGame(void);
  200. void ListAGame(void);
  201. void DoQuit(void);
  202. void Go2D(void);
  203. void Go3D(void);
  204. void DoReverse(void);
  205. void DoSwap(void);
  206. void DoAutoPlay(void);
  207. void MoveNow(void);
  208. void TakeBack(void);
  209. void DoThinking(void);
  210. void DoShwThnk(void);
  211. void DoSuper(void);
  212. void DoBookToggle(void);
  213. void DoHint(void);
  214. void DoTest(void);
  215. void SetTime(void);
  216. int GetFileName(char *);
  217.  
  218. void DisplayError(char *);
  219. void InputThread(void);
  220. void GetOperatorEntry(void);
  221. void PM_ShutDown(void);
  222. void AnimateAmigaMove(char *,char);
  223. void GetTimeString(char *);
  224. void GiveHint(void);
  225. void EditBoard(void);
  226. void help(void);
  227. void ChangeAlphaWindow(void);
  228. void ChangeBetaWindow(void);
  229. void ChangeSearchDepth(void);
  230. void ChangeHashDepth(void);
  231. void SetContempt(void);
  232. void ChangeXwindow(void);
  233. void ShowPostnValues(void);
  234. void DoDebug(void);
  235. void DoTable(INTSIZE *);
  236.  
  237. void GetGame(void);
  238. void SaveGame(void);
  239. void DrawAmigaBoard(void);
  240. void skip(void);
  241. void skipb(void);
  242. void EnPassant (INTSIZE int xside, INTSIZE int f, INTSIZE int t, INTSIZE int iop);
  243.  
  244. void ataks(INTSIZE int, INTSIZE int *);
  245. void Initialize_dist(void);
  246. void InitConst(char *);
  247. int SetAmigaDepth(void);
  248.  
  249.  
  250. #ifdef MSDOS
  251. #include <stdlib.h>
  252. #include <string.h>
  253. #include <time.h>
  254. #define RWA_ACC "r+b"
  255. #define WA_ACC "w+b"
  256. #else
  257. #define RWA_ACC "r+"
  258. #define WA_ACC "w+"
  259. /*
  260. #include <sys/param.h>
  261. #include <sys/types.h>
  262. #include <sys/times.h>
  263. */
  264. #include <stdlib.h>
  265. #include <string.h>
  266. #include <time.h>
  267.  
  268. extern int FirstTime;
  269.  
  270. #endif /* MSDOS */
  271. #ifdef NONDSP
  272. #ifdef AMIGA
  273. #define printz NULLFUNC
  274. #define scanz NULLFUNC2
  275. #else
  276. #define printz printf
  277. #define scanz scanf
  278. #endif
  279. #else
  280. #include <curses.h>
  281. #define scanz fflush(stdout),scanw
  282. #define printz printw
  283. #endif
  284.  
  285. #if defined(__STDC__) || defined(MSDOS)
  286. /* <stdio.h> */
  287.      extern int fclose (FILE *);
  288. #ifndef __ultrix /* work around bug in c89 compiler --t.mann */
  289. #endif /*__ultrix*/
  290.  
  291. /* <stdlib.h> */
  292.  
  293. /* <time.h> */
  294.  
  295. /* <string.h> */
  296. #endif
  297.  
  298.  
  299. /* Piece values */
  300. #define valueP 100
  301. #define valueN 350
  302. #define valueB 355
  303. #define valueR 550
  304. #define valueQ 1100
  305. #define valueK 1200
  306. /* masks into upper 8 bits of ataks array */
  307. #define ctlP 0x4000
  308. #define ctlN 0x2800
  309. #define ctlB 0x1800
  310. #define ctlR 0x0400
  311. #define ctlQ 0x0200
  312. #define ctlK 0x0100
  313. #define ctlBQ 0x1200
  314. #define ctlBN 0x0800
  315. #define ctlRQ 0x0600
  316. #define ctlNN 0x2000
  317. /* attack functions */
  318. #define Patak(c, u) (atak[c][u] > ctlP)
  319. #define Anyatak(c, u) (atak[c][u] > 0)
  320. /* distance function */
  321. #define taxicab(a,b) taxidata[a][b]
  322. /* hashtable flags */
  323. #define truescore 0x0001
  324. #define lowerbound 0x0002
  325. #define upperbound 0x0004
  326. #define kingcastle 0x0008
  327. #define queencastle 0x0010
  328. #define evalflag 0x0020 /* from PL 61 */
  329. /* king positions */
  330. #define wking PieceList[white][0]
  331. #define bking PieceList[black][0]
  332. #define EnemyKing PieceList[c2][0]
  333. /* constants */
  334. /* castle moves */
  335. #define BLACKCASTLE     0x3C3E
  336. #define WHITECASTLE     0x0406
  337. #define LONGBLACKCASTLE 0x3C3A
  338. #define LONGWHITECASTLE 0x0402
  339. /* truth values */
  340. #define false 0
  341. #define true 1
  342. /* colors */
  343. #define white 0
  344. #define black 1
  345. #define neutral 2
  346. /* piece code defines */
  347. #define no_piece 0
  348. #define pawn 1
  349. #define knight 2
  350. #define bishop 3
  351. #define rook 4
  352. #define queen 5
  353. #define king 6
  354. #define bpawn 7
  355. /* node flags */
  356. #define pmask 0x0007
  357. #define promote 0x0008
  358. #define cstlmask 0x0010
  359. #define epmask 0x0020
  360. #define exact 0x0040
  361. #define pwnthrt 0x0080
  362. #define check 0x0100
  363. #define capture 0x0200
  364. #define draw 0x0400
  365. #define book 0x1000
  366. /* move symbols */
  367. #define pxx (CP[2])
  368. #define qxx (CP[1])
  369. #define rxx (CP[4])
  370. #define cxx (CP[3])
  371. /* for everything that can't use the above */
  372. #define Qxx " pnbrqk"
  373. #define Pxx " PNBRQK"
  374. #define Cxx "abcdefgh"
  375. #define Rxx "12345678"
  376. /***************************************************************************/
  377. /***************** Table limits ********************************************/
  378. /*
  379.  * ttblsz must be a power of 2. Setting ttblsz 0 removes the transposition
  380.  * tables.
  381.  */
  382. #ifdef MSDOS
  383. #define vttblsz (1 << 11)
  384. #else
  385. #ifdef _M68040
  386. #define vttblsz (120001) // was 150001 in pl70
  387. #else
  388. #ifndef TINYCHESS
  389. #define vttblsz (1 << 16)
  390. #else
  391. #define vttblsz (1 << 14)
  392. #endif
  393. #endif
  394. //#define huge
  395. #endif /* MSODS */
  396.  
  397. #define ttblsz vttblsz
  398. #define TREE 1500               /* max number of tree entries */
  399. #define MAXDEPTH 35             /* max depth a search can be carried */
  400. #define MINDEPTH 2              /* min search depth =1 (no hint), >1 hint */
  401. #define MAXMOVES 400            /* max number of half moves in a game */
  402. #ifdef _M68040
  403. #define BOOKSIZE 10000          /* was 30k Number of unique position/move combinations allowed */
  404. //#define BOOKSIZE 30000          /* was 30k Number of unique position/move combinations allowed */
  405. #else
  406. #ifndef TINYCHESS
  407. #define BOOKSIZE 11200          /* was 30k Number of unique position/move combinations allowed */
  408. #else
  409. #define BOOKSIZE 5000           /* was 30k Number of unique position/move combinations allowed */
  410. #endif
  411. #endif
  412. #define CPSIZE 226              /* size of lang file max */
  413. #ifdef _M68040
  414. #define ETABLE_CONST (14001)          /* static eval cache was 18001 in uchess pl70 */
  415. #else
  416. #ifndef TINYCHESS
  417. #define ETABLE_CONST (2<<11)          /* static eval cache */
  418. #else
  419. #define ETABLE_CONST (2<<9)           /* static eval cache */
  420. #endif
  421. #endif
  422.  
  423. extern int ETABLE;
  424.  
  425. /***************** tuning paramaters **********************************************/
  426. #define MINGAMEIN 4
  427. #define MINMOVES 15
  428. #define FBEYOND 5// was 7
  429. #define SBEYOND 9
  430. #define TBEYOND 11
  431. #define CHKDEPTH 1              /* always look forward CHKDEPTH half-moves if in check */
  432. #define DEPTHBEYOND 11          /* Max to go beyond Sdepth */
  433. #define HASHDEPTH 2 // was 3            /* depth above which to use HashFile */
  434. #define HASHMOVELIMIT 40        /* Use HashFile only for this many moves */
  435. #define PTVALUE 0               /* material value below which pawn threats at 5 & 3 are used */
  436. #define ZDEPTH 3                /* depth beyond which to check ZDELTA for extra time */
  437. #define ZDELTA 40//10           /* is 40 in 4pl68 score delta per ply to cause extra time to be given */
  438. #define QBLOCK false //was true         /* if true cache quiescent positions */
  439. #define BESTDELTA 90
  440. #define ZNODES 1000             /* check the time every ZNODES positions */
  441. //#define MAXTCCOUNT 4          /* max number of time clicks per search */
  442. #define MAXTCCOUNTX  10         /* max number of time clicks per search to complete ply*/
  443. #define MAXTCCOUNTR 4           /* max number of time clicks per search extensions*/
  444. #define SCORESPLIM 8            /* Score space doesn't apply after this stage */
  445. //#define MINSEARCHPCT 10               /* must have looked at MINSEARCHPCT moves on a ply on a timeout */
  446. //#define SCORETIME -50         /* score below which to add search time */
  447. #define SCORESPLIM 8            /* Score space doesn't apply after this stage */
  448. #define SDEPTHLIM Sdepth+2 /* WAS Sdepth+1 in 2.35 of UChess */
  449. #define HISTORYLIM 4096         /* Max value of history killer */
  450. #define EWNDW 10                /* Eval window to force position scoring at depth greater than Sdepth + 2 */
  451. #define WAWNDW 90               /* alpha window when computer white*/
  452. #define WBWNDW 90               /* beta window when computer white*/
  453. #define BAWNDW 90               /* alpha window when computer black*/
  454. #define BBWNDW 90               /* beta window when computer black*/
  455. #define BXWNDW 90               /* window to force position scoring at lower */
  456. #define WXWNDW 90               /* window to force position scoring at lower */
  457. #define PCRASHS 5
  458. #define PCRASHV 5
  459. #define PCENTERS 5
  460. #define PCENTERV 5
  461. #define DITHER 5                /* max amount random can alter a pos value */
  462. #define BBONUS 2                /* points per stage value of B increases */
  463. #define RBONUS 6                /* points per stage value of R increases */
  464. #define KINGPOSLIMIT ( -1)      /* King positional scoring limit */
  465. #define KINGSAFETY  40 /* was 32 in PL60,  in PL61 it is 40 */
  466. #define MAXrehash (7)
  467. #define NULLMOVELIM 4000        /* below this total material on board don't use null move */
  468. #define DEPTHMARGIN 2
  469. #define THRSTAGE    6
  470. #define CHECKSTAGE  5
  471.  
  472. #if defined AG0
  473. #define WHITEAG0
  474. #define BLACKAG0
  475.  
  476. #elif defined AG1
  477. #define WHITEAG1
  478. #define BLACKAG1
  479.  
  480. #elif defined AG2
  481. #define WHITEAG2
  482. #define BLACKAG2
  483.  
  484. #elif defined AG3
  485. #define WHITEAG3
  486. #define BLACKAG3
  487.  
  488. #elif defined AGB
  489. #define WHITEAG2
  490. #define BLACKAG2
  491.  
  492. #elif defined AG4
  493. #define WHITEAG4
  494. #define BLACKAG4
  495. #endif
  496. /************************* parameters for Opening Book *********************************/
  497. #define BOOKBITS 10             /* # bits for hashtable to book moves */
  498. #define BOOKFAIL 20000          /* if no book move found for BOOKFAIL turns stop using book */
  499. #define BOOKRAND 1000           /* used to select an opening move from a list */
  500. #define BOOKENDPCT 950          /* 50 % chance a BOOKEND will stop the book */
  501. #define DONTUSE -32000 //was -32768             /* flag move as don't use */
  502. /*************************** Book access defines ****************************************/
  503. #define BKTBLSIZE (2<<BOOKBITS)
  504. #define BOOKMASK (BKTBLSIZE - 1)
  505. #define SIDEMASK 0x1
  506. #define BOOKEND 0x2             /* means this is the last move of an opening */
  507. #define BADMOVE 0x8000          /* means this is a bad move in this position */
  508. /****************************************************************************************/
  509.      struct hashval
  510.      {
  511.        unsigned long key, bd;
  512.      };
  513.  
  514. #ifdef CACHE
  515.     struct etable
  516.     { unsigned long ehashbd;
  517.         short int escore[2];
  518.         short int sscore[64];
  519.         short int score;
  520.         short int xx_pad;
  521.         short int hung[2];
  522.     } ;
  523.  
  524.  
  525.      struct hashentry
  526.      {
  527.        unsigned long hashbd;
  528.        unsigned short mv;
  529.        unsigned char flags, depth;      /* char saves some space */
  530.        unsigned short age;
  531.        short score;
  532. #ifdef HASHTEST
  533.        unsigned char bd[32];
  534. #endif /* HASHTEST */
  535.  
  536.      };
  537. #else
  538.      struct hashentry
  539.      {
  540.        unsigned long hashbd;
  541.        unsigned INTSIZE2 mv;
  542.        unsigned char flags, depth;      /* char saves some space */
  543.        INTSIZE2 score;
  544. #ifdef HASHTEST
  545.        unsigned char bd[32];
  546. #endif /* HASHTEST */
  547.  
  548.      };
  549. #endif
  550.  
  551. #ifdef HASHFILE
  552.  
  553. /*
  554.  * persistent transposition table. The size must be a power of 2. If you
  555.  * change the size, be sure to run gnuchess -c before anything else.
  556.  */
  557. #define frehash 6
  558. #ifdef MSDOS
  559. #define Deffilesz (1 << 11) -1
  560. #else
  561. #define Deffilesz (1 << 17) -1
  562. #endif /* MSDOS */
  563.      struct fileentry
  564.      {
  565.        unsigned char bd[32];
  566.        unsigned char f, t, flags, depth, sh, sl;
  567.      };
  568.  
  569. #endif /* HASHFILE */
  570.  
  571.  
  572.      struct leaf
  573.      {
  574.        INTSIZE f, t, score, reply, width;
  575.        unsigned INTSIZE flags;
  576.      };
  577.      struct GameRec
  578.      {
  579.        unsigned INTSIZE gmove;  /* this move */
  580.        INTSIZE score;           /* score after this move */
  581.        INTSIZE depth;           /* search depth this move */
  582.        INTSIZE time;            /* search time this move */
  583.        INTSIZE piece;           /* piece captured */
  584.        INTSIZE color;           /* color */
  585.        INTSIZE flags;           /* move flags capture, promote, castle */
  586.        INTSIZE Game50;          /* flag for repetition */
  587.        long nodes;              /* nodes searched for this move */
  588.        long hashkey, hashbd;    /* board key before this move */
  589.        short epssq;             /* epssquare before this move */
  590. #ifdef DEBUG40
  591.        int d1;
  592.        int d2;
  593.        int d3;
  594.        int d4;
  595.        int d5;
  596.        int d6;
  597.        int d7;
  598. #endif
  599.      };
  600.      struct TimeControlRec
  601.      {
  602.        INTSIZE moves[2];
  603.        long clock[2];
  604.      };
  605.  
  606.      struct flags
  607.      {
  608.        INTSIZE mate;            /* the game is over */
  609.        INTSIZE post;            /* show principle variation */
  610.        INTSIZE quit;            /* quit/exit */
  611.        INTSIZE regularstart;    /* did the game start from standard
  612.                  * initial board ? */
  613.        INTSIZE reverse;         /* reverse board display */
  614.        INTSIZE bothsides;               /* computer plays both sides */
  615.        INTSIZE hash;            /* enable/disable transposition table */
  616.        INTSIZE force;           /* enter moves */
  617.        INTSIZE easy;            /* disable thinking on opponents time */
  618.        INTSIZE beep;            /* enable/disable beep */
  619.        INTSIZE timeout;         /* time to make a move */
  620.        INTSIZE musttimeout;     /* time to make a move */
  621.        INTSIZE back;            /* time to make a move */
  622.        INTSIZE rcptr;           /* enable/disable recapture heuristics */
  623.        INTSIZE rv;              /* reverse video */
  624.        INTSIZE stars;           /* add stars to uxdsp screen */
  625.        INTSIZE coords;          /* add coords to visual screen */
  626.        INTSIZE shade;
  627.        INTSIZE material;                /* draw on lack of material */
  628.        INTSIZE illegal;         /* illegal position */
  629.        INTSIZE onemove;         /* timing is onemove */
  630.        INTSIZE gamein;          /* timing is gamein */
  631.        INTSIZE threat;            /* Enable threats, tom@izf.tno.nl */
  632.      };
  633.  
  634. #ifdef DEBUG
  635.      extern FILE *debugfile;
  636.  
  637. #endif /* DEBUG */
  638. #ifdef HISTORY
  639.      extern unsigned char __far history[32768];
  640. #endif
  641.      extern int Sdepth2;
  642.      extern int thinking2;
  643.      extern char *ColorStr[2];
  644.      extern unsigned INTSIZE int MV[MAXDEPTH];
  645.      extern int MSCORE;
  646.      extern int mycnt1, mycnt2;
  647.      extern INTSIZE int ahead;
  648.      extern INTSIZE int chesstool;
  649.      extern struct leaf __far Tree[];
  650.      extern struct leaf  *root/*, rootnode*/;
  651.      extern char __far savefile[];
  652.      extern char __far listfile[];
  653.      extern INTSIZE TrPnt[];
  654.      extern INTSIZE board[], color[];
  655.      extern INTSIZE PieceList[2][64], PawnCnt[2][8];
  656.      extern int Castled[2];
  657.      extern int MouseDropped;
  658.      extern int myEnPassant[2];
  659.      extern INTSIZE castld[], Mvboard[];
  660.      extern INTSIZE __aligned svalue[64];
  661.      extern struct flags flag;
  662.      extern INTSIZE opponent, computer, INCscore;
  663.      extern INTSIZE WAwindow, BAwindow, WBwindow, BBwindow;
  664.      extern INTSIZE dither, player;
  665.      extern INTSIZE xwndw, epsquare, contempt;
  666.      extern long ResponseTime, ExtraTime, MaxResponseTime, et, et0, time0, ft;
  667.      extern long reminus, replus;
  668.      extern long NodeCnt, ETnodes, EvalNodes, HashAdd, HashCnt, HashCol, THashCol,
  669.       FHashCnt, FHashAdd;
  670.      extern INTSIZE HashDepth, HashMoveLimit;
  671.      extern struct GameRec GameList[];
  672.      extern INTSIZE GameCnt, Game50;
  673.      extern INTSIZE Sdepth, MaxSearchDepth;
  674.      extern int Book;
  675.      extern struct TimeControlRec TimeControl;
  676.      extern INTSIZE TCflag, TCmoves, TCminutes, TCseconds, OperatorTime;
  677.      extern int timecomp[MINGAMEIN], timeopp[MINGAMEIN];
  678.      extern int compptr,oppptr;
  679.      extern INTSIZE XCmore, XCmoves[], XCminutes[], XCseconds[], XC;
  680.      extern const INTSIZE otherside[];
  681.      extern const INTSIZE Stboard[];
  682.      extern const INTSIZE Stcolor[];
  683.      extern unsigned INTSIZE hint;
  684.      extern INTSIZE int TOflag;
  685.      extern INTSIZE stage, stage2, Developed[];
  686.      extern INTSIZE ChkFlag[], CptrFlag[], PawnThreat[];
  687.      extern short ChkFlag[], CptrFlag[], PawnThreat[];
  688.      extern short QueenCheck[];  /* tom@izf.tno.nl */
  689. //     extern short NMoves[];  /* tom@izf.tno.nl */
  690.      extern short Threat[];  /* tom@izf.tno.nl */
  691.      extern short ThreatSave[];  /* tom@izf.tno.nl */
  692.      extern INTSIZE Pscore[], Tscore[];
  693.      extern INTSIZE rehash;
  694.      extern unsigned int ttblsize;
  695.      extern INTSIZE mtl[], pmtl[], hung[], emtl[];
  696.      extern INTSIZE Pindex[];
  697.      extern INTSIZE PieceCnt[];
  698.      extern INTSIZE FROMsquare, TOsquare;
  699.      extern INTSIZE HasKnight[], HasBishop[], HasRook[], HasQueen[];
  700.      extern const INTSIZE qrook[];
  701.      extern const INTSIZE krook[];
  702.      extern const INTSIZE kingP[];
  703.      extern const INTSIZE rank7[];
  704.      extern const INTSIZE sweep[];
  705.      extern const INTSIZE epmove1[], epmove2[];
  706.      extern unsigned INTSIZE killr0[], killr1[];
  707.      extern unsigned INTSIZE killr2[], killr3[];
  708.      extern unsigned INTSIZE PV, SwagHt, Swag0, Swag1, Swag2, Swag3, Swag4, sidebit;
  709. #ifdef KILLT
  710.      extern INTSIZE __far __aligned killt[0x4000];
  711. #endif
  712.      extern INTSIZE mtl[2], pmtl[2], hung[2];
  713.      extern const INTSIZE value[];
  714.      extern const INTSIZE control[];
  715.      extern unsigned char __far nextpos[8][64][64];
  716.      extern unsigned char __far nextdir[8][64][64];
  717.      extern const INTSIZE ptype[2][8];
  718.      extern long filesz;
  719.      extern FILE *hashfile;
  720.      extern unsigned int starttime;
  721.      extern int ThinkAheadWorked;
  722.      extern int ThinkInARow;
  723.      extern int ThinkAheadDepth;
  724. #ifdef LONGINTS2
  725.      extern INTSIZE __far distdata[64][64];
  726.      extern INTSIZE __far taxidata[64][64];
  727. #else
  728.      extern INTSIZE distdata[64][64];
  729.      extern INTSIZE taxidata[64][64];
  730. #endif
  731.      extern int bookcount;
  732.      extern unsigned long hashkey, hashbd;
  733. #ifdef LONGINTS2
  734.      extern struct hashval __far hashcode[2][7][64];
  735. #else
  736.      extern struct hashval hashcode[2][7][64];
  737. #endif
  738.      extern char __far *CP[];
  739. #ifdef QUIETBACKGROUND
  740.      extern INTSIZE background;
  741. #endif /* QUIETBACKGROUND */
  742.  
  743. #ifdef CACHE
  744.  
  745. #ifdef ttblsz
  746.      extern struct hashentry *ttable[2];
  747. #endif
  748.  
  749. #else
  750.  
  751. #ifdef ttblsz
  752.      extern struct hashentry __far ttable[2][vttblsz + MAXrehash];
  753. #endif
  754.  
  755. #endif
  756.  
  757. /*
  758.  * hashbd contains a 32 bit "signature" of the board position. hashkey
  759.  * contains a 16 bit code used to address the hash table. When a move is
  760.  * made, XOR'ing the hashcode of moved piece on the from and to squares with
  761.  * the hashbd and hashkey values keeps things current.
  762.  */
  763. #define UpdateHashbd(side, piece, f, t) \
  764. {\
  765.   if ((f) >= 0)\
  766.     {\
  767.       hashbd ^= hashcode[side][piece][f].bd;\
  768.       hashkey ^= hashcode[side][piece][f].key;\
  769.     }\
  770.   if ((t) >= 0)\
  771.     {\
  772.       hashbd ^= hashcode[side][piece][t].bd;\
  773.       hashkey ^= hashcode[side][piece][t].key;\
  774.     }\
  775. }
  776.  
  777. #define UpdateHashbd2(side, piece, f, t) \
  778. {\
  779.   if ((t) >= 0)\
  780.     {\
  781.       hashbd ^= hashcode[side][piece][t].bd;\
  782.       hashkey ^= hashcode[side][piece][t].key;\
  783.     }\
  784. }
  785.  
  786. #define UpdateHashbd3(side, piece, f, t) \
  787. {\
  788.   if ((f) >= 0)\
  789.     {\
  790.       hashbd ^= hashcode[side][piece][f].bd;\
  791.       hashkey ^= hashcode[side][piece][f].key;\
  792.     }\
  793. }
  794.  
  795.  
  796.      extern INTSIZE rpthash[2][256];
  797.      extern char *DRAW;
  798.  
  799. #define distance(a,b) distdata[a][b]
  800. #define row(a) ((a) >> 3)
  801. #define column(a) ((a) & 7)
  802. #define locn(a,b) (((a) << 3) | (b))
  803.  
  804. /* init external functions */
  805.      extern void NewGame (void);
  806.      extern int parse (FILE * fd, INTSIZE unsigned int *mv, INTSIZE int side, char *opening);
  807.      extern void GetOpenings (int);
  808.      extern int OpeningBook (unsigned INTSIZE int *hint, INTSIZE int side);
  809.      extern void SelectMove (INTSIZE int side, INTSIZE int iop);
  810.      int 
  811.       search (INTSIZE int side,
  812.            INTSIZE int ply,
  813.            INTSIZE int depth,
  814.            short ext,
  815.            INTSIZE int alpha,
  816.            INTSIZE int beta,
  817.            INTSIZE unsigned int *bstline,
  818.            INTSIZE int *rpt,
  819.            short SAVEHT,
  820.            int didnull);
  821. #if ttblsz
  822.      extern int
  823.       ProbeTTable (int side,
  824.             int depth,
  825.             int ply,
  826.             SHORT *alpha,
  827.             SHORT *beta,
  828.             SHORT *score);
  829.      extern int
  830.       PutInTTable (int side,
  831.             int score,
  832.             int depth,
  833.             int ply,
  834.             //int alpha,
  835.             int beta,
  836.             unsigned int mv);
  837.      extern void ZeroTTable (int);
  838.      extern void ZeroRPT (void);
  839.      extern void Initialize_ttable (void);
  840. #ifdef HASHFILE
  841.      extern unsigned int urand (void);
  842.      extern void srand (unsigned int);
  843.      extern int
  844.       ProbeFTable (INTSIZE int side,
  845.             INTSIZE int depth,
  846.             INTSIZE int ply,
  847.             INTSIZE int *alpha,
  848.             INTSIZE int *beta,
  849.             INTSIZE int *score);
  850.      extern void
  851.       PutInFTable (INTSIZE int side,
  852.             INTSIZE int score,
  853.             INTSIZE int depth,
  854.             INTSIZE int ply,
  855.             INTSIZE int alpha,
  856.             INTSIZE int beta,
  857.             INTSIZE unsigned int f,
  858.             INTSIZE unsigned int t);
  859.  
  860. #endif /* HASHFILE */
  861. #endif /* ttblsz */
  862.      extern void Initialize_moves (void);
  863.      extern void MoveList (INTSIZE int side, INTSIZE int ply);
  864.      extern void CaptureList (INTSIZE int side, INTSIZE int ply);
  865.      extern int castle (INTSIZE int side, INTSIZE int kf, INTSIZE int kt, INTSIZE int iop);
  866.      extern void
  867.       MakeMove (INTSIZE int side,
  868.          struct leaf * node,
  869.          INTSIZE int *tempb,
  870.          INTSIZE int *tempc,
  871.          INTSIZE int *tempsf,
  872.          INTSIZE int *tempst,
  873.          INTSIZE int *INCscore);
  874.      extern void
  875.       UnmakeMove (INTSIZE int side,
  876.            struct leaf * node,
  877.            INTSIZE int *tempb,
  878.            INTSIZE int *tempc,
  879.            INTSIZE int *tempsf,
  880.            INTSIZE int *tempst);
  881.      extern void InitializeStats (void);
  882. #ifdef OLD4PL67
  883.      extern int
  884.       evaluate (INTSIZE int side,
  885.          INTSIZE int ply,
  886.          INTSIZE int alpha,
  887.          INTSIZE int beta,
  888.          INTSIZE int INCscore,
  889.          /*INTSIZE int *slk,*/
  890.          INTSIZE int *InChk);
  891. #else
  892. int
  893. evaluate (register short side,
  894.       register short ply,
  895.       register short depth,
  896.       register short ext,
  897.       register short alpha,
  898.       register short beta,
  899.       short INCscore,
  900.       short *InChk);        /* output Check flag */
  901. #endif
  902.      extern INTSIZE int ScorePosition (INTSIZE int side);
  903.      extern void ExaminePosition (void);
  904.      extern void Initialize (void);
  905.      extern void InputCommand (void);
  906.      extern void ExitChess (void);
  907.      extern void ClrScreen (void);
  908.      extern void SetTimeControl (void);
  909.      extern void SelectLevel (char *);
  910. #define UpdateDisplay(a,b,c,d) // no longer needed
  911. //     extern void
  912. //      UpdateDisplay (INTSIZE int f,
  913. //                    INTSIZE int t,
  914. //                    INTSIZE int flag,
  915. //                    INTSIZE int iscastle);
  916.      extern void ElapsedTime (INTSIZE int iop);
  917.      extern void ShowSidetoMove (void);
  918.      extern void SearchStartStuff (void);
  919.      extern void ShowDepth (void);
  920.      extern void TerminateSearch (void);
  921.      extern void
  922.       ShowResults (INTSIZE int score,
  923.             INTSIZE unsigned int *bstline);
  924.      extern void PromptForMove (void);
  925.      extern void SetupBoard (void);
  926.      extern void algbr (INTSIZE int f, INTSIZE int t, INTSIZE int flag);
  927.      extern void OutputMove (void);
  928. #define ShowCurrentMove(a,b,c)
  929. //     extern void ShowCurrentMove (INTSIZE int pnt, INTSIZE int f, INTSIZE int t);
  930.  
  931.      extern void ListGame (int);
  932.      extern void ShowMessage (char *s);
  933.      extern void ClrScreen (void);
  934.      extern void gotoXY (INTSIZE int x, INTSIZE int y);
  935.      extern void ClrEoln (void);
  936.      extern void DrawPiece (INTSIZE int sq);
  937.      extern void UpdateClocks (void);
  938.      extern void ShowLine (INTSIZE unsigned int *bstline,char *);
  939.      extern int pick (INTSIZE int p1, INTSIZE int p2);
  940.      extern int TrComp (struct leaf * a, struct leaf * b);
  941.      void UpdateWeights(void);
  942.  
  943. #ifdef AMIGA
  944. struct myMsgStruct {
  945. struct Message MainMsg;
  946. ULONG myData;
  947. };
  948. #endif
  949.  
  950.  
  951.  
  952. #include "ttable.h"
  953.