aboutsummaryrefslogtreecommitdiff
path: root/gnu/games/chess/move.h
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/games/chess/move.h')
-rw-r--r--gnu/games/chess/move.h81
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