xref: /original-bsd/games/chess/move.h (revision e59fb703)
1 /* header file for move generator hes 890318
2    Modified: 890510 minor bug fixed in Newataks
3              890606 NEWMOVE levels 1-6 */
4 
5 #if (NEWMOVE >= 1)
6 extern short distdata[64][64];
7 extern short taxidata[64][64];
8 
9 #define taxicab(a,b) taxidata[a][b]
10 #define distance(a,b) distdata[a][b]
11 
12 extern void Initialize_dist();
13 #endif
14 
15 #if (NEWMOVE >= 2)
16 struct sqdata {
17   short nextpos;
18   short nextdir;
19 };
20 extern struct sqdata posdata[3][8][64][64];
21 
22 extern void Initialize_moves();
23 
24 #define ataks(side,a)\
25 {\
26   register short u,c,sq;\
27   register struct sqdata *p;\
28   short i,piece,*PL;\
29   \
30   for (u = 64; u; a[--u] = 0); \
31   PL = PieceList[side];\
32   for (i = 0; i <= PieceCnt[side]; i++)\
33     {\
34       sq = PL[i];\
35       piece = board[sq];\
36       c = control[piece];\
37       p = posdata[side][piece][sq];\
38       if (piece == pawn) {\
39 	u = p[sq].nextdir; /* follow captures thread */\
40 	while (u != sq) {\
41 	  a[u] = ++a[u] | c;\
42 	  u = p[u].nextdir;\
43 	}\
44       }\
45       else {\
46 	u = p[sq].nextpos;\
47 	while (u != sq) {\
48           a[u] = ++a[u] | c;\
49 	  if (color[u] == neutral)\
50 	    u = p[u].nextpos;\
51 	  else\
52 	    u = p[u].nextdir;\
53 	}\
54       }\
55     }\
56 }
57 #endif
58 
59 #if (NEWMOVE >= 3)
60 extern short PieceList[2][16];
61 
62 extern int Sqatakd();
63 #endif
64 
65 #if (NEWMOVE > 3)
66 extern short Kfield[2][64],PINVAL,control[7],hung[2],XRAY;
67 
68 extern BRscan();
69 #endif
70 
71 #if (NEWMOVE > 4)
72 #define valueQ 1100
73 
74 extern short PieceCnt[2],value[7],svalue[64];
75 
76 extern CaptureList();
77 #endif
78 
79 #if (NEWMOVE > 5)
80 extern GenMoves();
81 #endif
82