diff options
Diffstat (limited to 'gnu/games/chess/move.h')
| -rw-r--r-- | gnu/games/chess/move.h | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/gnu/games/chess/move.h b/gnu/games/chess/move.h new file mode 100644 index 000000000000..2f328303763f --- /dev/null +++ b/gnu/games/chess/move.h @@ -0,0 +1,81 @@ +/* header file for move generator hes 890318 + Modified: 890510 minor bug fixed in Newataks + 890606 NEWMOVE levels 1-6 */ + +#if (NEWMOVE >= 1) +extern short distdata[64][64]; +extern short taxidata[64][64]; + +#define taxicab(a,b) taxidata[a][b] +#define distance(a,b) distdata[a][b] + +extern void Initialize_dist(); +#endif + +#if (NEWMOVE >= 2) +struct sqdata { + short nextpos; + short nextdir; +}; +extern struct sqdata posdata[3][8][64][64]; + +extern void Initialize_moves(); + +#define ataks(side,a)\ +{\ + register short u,c,sq;\ + register struct sqdata *p;\ + short i,piece,*PL;\ + \ + for (u = 64; u; a[--u] = 0); \ + PL = PieceList[side];\ + for (i = 0; i <= PieceCnt[side]; i++)\ + {\ + sq = PL[i];\ + piece = board[sq];\ + c = control[piece];\ + p = posdata[side][piece][sq];\ + if (piece == pawn) {\ + u = p[sq].nextdir; /* follow captures thread */\ + while (u != sq) {\ + a[u] = ++a[u] | c;\ + u = p[u].nextdir;\ + }\ + }\ + else {\ + u = p[sq].nextpos;\ + while (u != sq) {\ + a[u] = ++a[u] | c;\ + if (color[u] == neutral)\ + u = p[u].nextpos;\ + else\ + u = p[u].nextdir;\ + }\ + }\ + }\ +} +#endif + +#if (NEWMOVE >= 3) +extern short PieceList[2][16]; + +extern int Sqatakd(); +#endif + +#if (NEWMOVE > 3) +extern short Kfield[2][64],PINVAL,control[7],hung[2],XRAY; + +extern BRscan(); +#endif + +#if (NEWMOVE > 4) +#define valueQ 1100 + +extern short PieceCnt[2],value[7],svalue[64]; + +extern CaptureList(); +#endif + +#if (NEWMOVE > 5) +extern GenMoves(); +#endif |
