home *** CD-ROM | disk | FTP | other *** search
/ Dream 57 / Amiga_Dream_57.iso / Amiga / Jeux / Reflexion / Crafty-15.19.lha / crafty-15.19 / src / epddefs.h < prev    next >
Text File  |  1998-09-13  |  27KB  |  1,017 lines

  1. #if !defined(EPDDEFS_INCLUDED)
  2. #  define EPDDEFS_INCLUDED
  3. /*>>> epddefs.h: Extended Position Description definitions */
  4.  
  5. /* Revised: 1996.06.23 */
  6.  
  7. /*
  8. Copyright (C) 1996 by Steven J. Edwards (sje@mv.mv.com)
  9. All rights reserved.  This code may be freely redistibuted and used by
  10. both research and commerical applications.  No warranty exists.
  11. */
  12.  
  13. /*
  14. Everything in this source file is independent of the host program.
  15. Requests for changes and additions should be communicated to the author
  16. via the e-mail address given above.
  17. */
  18.  
  19. /*
  20. This file was originally prepared on an Apple Macintosh using the
  21. Metrowerks CodeWarrior 6 ANSI C compiler.  Tabs are set at every
  22. four columns.  Further testing and development was performed on a
  23. generic PC running Linux 1.3.20 and using the gcc 2.7.0 compiler.
  24. */
  25.  
  26. /* inclusion telltale */
  27.  
  28. #if (!defined(_epddefs))
  29. #define _epddefs 1
  30.  
  31. /* subprogram storage class for non-statics (usually empty definition) */
  32.  
  33. #define nonstatic
  34.  
  35. /* a bit */
  36.  
  37. #define bit 0x01
  38.  
  39. /* bit positions */
  40.  
  41. #define bit_00 (bit <<  0)
  42. #define bit_01 (bit <<  1)
  43. #define bit_02 (bit <<  2)
  44. #define bit_03 (bit <<  3)
  45. #define bit_04 (bit <<  4)
  46. #define bit_05 (bit <<  5)
  47. #define bit_06 (bit <<  6)
  48. #define bit_07 (bit <<  7)
  49. #define bit_08 (bit <<  8)
  50. #define bit_09 (bit <<  9)
  51. #define bit_10 (bit << 10)
  52. #define bit_11 (bit << 11)
  53. #define bit_12 (bit << 12)
  54. #define bit_13 (bit << 13)
  55. #define bit_14 (bit << 14)
  56. #define bit_15 (bit << 15)
  57.  
  58. /* bit width constants */
  59.  
  60. #define nybbW  4
  61. #define byteW  8
  62.  
  63. /* simple masks */
  64.  
  65. #define nybbM 0x000f
  66.  
  67. /* useful types */
  68.  
  69. typedef void *voidptrT;
  70. typedef unsigned char byteT, *byteptrT;
  71. typedef char *charptrT;
  72. typedef short int siT, *siptrT;
  73. typedef long int liT, *liptrT;
  74. typedef float srT, *srptrT;
  75. typedef double lrT, *lrptrT;
  76. typedef FILE *fptrT;
  77.  
  78. /* text I/O buffer length */
  79.  
  80. #define tL 256
  81.  
  82. /* EPD I/O buffer length */
  83.  
  84. #define epdL 4096
  85.  
  86. /* the standard algebraic notation character vector type */
  87.  
  88. #define sanL 16 /* must be at least 8; extra room for alternatives */
  89.  
  90. typedef char sanT[sanL];
  91. typedef sanT *sanptrT;
  92.  
  93. /* SAN style attributes, priority ordered (used for encoding) */
  94.  
  95. typedef siT ssaT;
  96. #define ssaL 12
  97. #define ssa_nil (-1)
  98.  
  99. #define ssa_capt  0 /* 5 way: capture indicator */
  100. #define ssa_case  1 /* 2 way: letter case */
  101. #define ssa_chec  2 /* 3 way: checking */
  102. #define ssa_cast  3 /* 5 way: castling */
  103. #define ssa_prom  4 /* 4 way: promoting */
  104. #define ssa_ptar  5 /* 2 way: pawn target rank skip */
  105. #define ssa_chmt  6 /* 4 way: checkmating */
  106. #define ssa_epct  7 /* 2 way: en passant capture */
  107. #define ssa_draw  8 /* 2 way: drawing */
  108. #define ssa_move  9 /* 2 way: movement indicator */
  109. #define ssa_edcf 10 /* 2 way: extra disambiguating character (file) */
  110. #define ssa_edcr 11 /* 2 way: extra disambiguating character (rank) */
  111.  
  112. /* SAN style vector */
  113.  
  114. typedef siT ssavT[ssaL];
  115.  
  116. /* colors (ordering is critical) */
  117.  
  118. typedef siT cT, *cptrT;
  119. #define cQ 2
  120. #define cL (bit << cQ)
  121. #define rcQ 1
  122. #define rcL (bit << rcQ)
  123. #define c_nil (-1)
  124.  
  125. #define c_w 0 /* white */
  126. #define c_b 1 /* black */
  127. #define c_v 2 /* vacant */
  128. #define c_x 3 /* extra */
  129.  
  130. /* pieces (ordering is critical) */
  131.  
  132. typedef siT pT, *pptrT;
  133. #define pL 8
  134. #define rpL 6
  135. #define p_nil (-1)
  136.  
  137. #define p_p 0 /* pawn */
  138. #define p_n 1 /* knight */
  139. #define p_b 2 /* bishop */
  140. #define p_r 3 /* rook */
  141. #define p_q 4 /* queen */
  142. #define p_k 5 /* king */
  143. #define p_v 6 /* vacant */
  144. #define p_x 7 /* extra */
  145.  
  146. /* color piece combinations (ordering is critical) */
  147.  
  148. typedef siT cpT;
  149. #define cpL 16
  150. #define rcpL 12
  151. #define cp_nil (-1)
  152.  
  153. #define cp_wp  0 /* white pawn */
  154. #define cp_wn  1 /* white knight */
  155. #define cp_wb  2 /* white bishop */
  156. #define cp_wr  3 /* white rook */
  157. #define cp_wq  4 /* white queen */
  158. #define cp_wk  5 /* white king */
  159. #define cp_bp  6 /* black pawn */
  160. #define cp_bn  7 /* black knight */
  161. #define cp_bb  8 /* black bishop */
  162. #define cp_br  9 /* black rook */
  163. #define cp_bq 10 /* black queen */
  164. #define cp_bk 11 /* black king */
  165. #define cp_v0 12 /* vacant */
  166. #define cp_x0 13 /* extra 0 */
  167. #define cp_x1 14 /* extra 1 */
  168. #define cp_x2 15 /* extra 2 */
  169.  
  170. /* ranks */
  171.  
  172. typedef siT rankT;
  173. #define rankM (0x0007)
  174. #define rankQ 3
  175. #define rankL (bit << rankQ)
  176. #define rank_nil (-1)
  177.  
  178. #define rank_1 0
  179. #define rank_2 1
  180. #define rank_3 2
  181. #define rank_4 3
  182. #define rank_5 4
  183. #define rank_6 5
  184. #define rank_7 6
  185. #define rank_8 7
  186.  
  187. /* files */
  188.  
  189. typedef siT fileT;
  190. #define fileM (0x0007)
  191. #define fileQ 3
  192. #define fileL (bit << fileQ)
  193. #define file_nil (-1)
  194.  
  195. #define file_a 0 /* QR */
  196. #define file_b 1 /* QN */
  197. #define file_c 2 /* QB */
  198. #define file_d 3 /* Q */
  199. #define file_e 4 /* K */
  200. #define file_f 5 /* KB */
  201. #define file_g 6 /* KN */
  202. #define file_h 7 /* KR */
  203.  
  204. /* location mappings */
  205.  
  206. #define map_sq(r, f) (((r) << fileQ | (f)))
  207. #define map_file(sq) ((sq) & 0x07)
  208. #define map_rank(sq) ((sq) >> fileQ)
  209.  
  210. /* squares */
  211.  
  212. typedef siT sqT, *sqptrT;
  213. #define sqM (0x003f)
  214. #define sqQ (rankQ + fileQ)
  215. #define sqL (bit << sqQ)
  216. #define sq_nil (-1)
  217.  
  218. #define sq_a1 map_sq(rank_1, file_a)
  219. #define sq_b1 map_sq(rank_1, file_b)
  220. #define sq_c1 map_sq(rank_1, file_c)
  221. #define sq_d1 map_sq(rank_1, file_d)
  222. #define sq_e1 map_sq(rank_1, file_e)
  223. #define sq_f1 map_sq(rank_1, file_f)
  224. #define sq_g1 map_sq(rank_1, file_g)
  225. #define sq_h1 map_sq(rank_1, file_h)
  226. #define sq_a2 map_sq(rank_2, file_a)
  227. #define sq_b2 map_sq(rank_2, file_b)
  228. #define sq_c2 map_sq(rank_2, file_c)
  229. #define sq_d2 map_sq(rank_2, file_d)
  230. #define sq_e2 map_sq(rank_2, file_e)
  231. #define sq_f2 map_sq(rank_2, file_f)
  232. #define sq_g2 map_sq(rank_2, file_g)
  233. #define sq_h2 map_sq(rank_2, file_h)
  234. #define sq_a3 map_sq(rank_3, file_a)
  235. #define sq_b3 map_sq(rank_3, file_b)
  236. #define sq_c3 map_sq(rank_3, file_c)
  237. #define sq_d3 map_sq(rank_3, file_d)
  238. #define sq_e3 map_sq(rank_3, file_e)
  239. #define sq_f3 map_sq(rank_3, file_f)
  240. #define sq_g3 map_sq(rank_3, file_g)
  241. #define sq_h3 map_sq(rank_3, file_h)
  242. #define sq_a4 map_sq(rank_4, file_a)
  243. #define sq_b4 map_sq(rank_4, file_b)
  244. #define sq_c4 map_sq(rank_4, file_c)
  245. #define sq_d4 map_sq(rank_4, file_d)
  246. #define sq_e4 map_sq(rank_4, file_e)
  247. #define sq_f4 map_sq(rank_4, file_f)
  248. #define sq_g4 map_sq(rank_4, file_g)
  249. #define sq_h4 map_sq(rank_4, file_h)
  250. #define sq_a5 map_sq(rank_5, file_a)
  251. #define sq_b5 map_sq(rank_5, file_b)
  252. #define sq_c5 map_sq(rank_5, file_c)
  253. #define sq_d5 map_sq(rank_5, file_d)
  254. #define sq_e5 map_sq(rank_5, file_e)
  255. #define sq_f5 map_sq(rank_5, file_f)
  256. #define sq_g5 map_sq(rank_5, file_g)
  257. #define sq_h5 map_sq(rank_5, file_h)
  258. #define sq_a6 map_sq(rank_6, file_a)
  259. #define sq_b6 map_sq(rank_6, file_b)
  260. #define sq_c6 map_sq(rank_6, file_c)
  261. #define sq_d6 map_sq(rank_6, file_d)
  262. #define sq_e6 map_sq(rank_6, file_e)
  263. #define sq_f6 map_sq(rank_6, file_f)
  264. #define sq_g6 map_sq(rank_6, file_g)
  265. #define sq_h6 map_sq(rank_6, file_h)
  266. #define sq_a7 map_sq(rank_7, file_a)
  267. #define sq_b7 map_sq(rank_7, file_b)
  268. #define sq_c7 map_sq(rank_7, file_c)
  269. #define sq_d7 map_sq(rank_7, file_d)
  270. #define sq_e7 map_sq(rank_7, file_e)
  271. #define sq_f7 map_sq(rank_7, file_f)
  272. #define sq_g7 map_sq(rank_7, file_g)
  273. #define sq_h7 map_sq(rank_7, file_h)
  274. #define sq_a8 map_sq(rank_8, file_a)
  275. #define sq_b8 map_sq(rank_8, file_b)
  276. #define sq_c8 map_sq(rank_8, file_c)
  277. #define sq_d8 map_sq(rank_8, file_d)
  278. #define sq_e8 map_sq(rank_8, file_e)
  279. #define sq_f8 map_sq(rank_8, file_f)
  280. #define sq_g8 map_sq(rank_8, file_g)
  281. #define sq_h8 map_sq(rank_8, file_h)
  282.  
  283. /* regular board */
  284.  
  285. typedef union rbU
  286.     {
  287.     cpT rbm[rankL][fileL]; /* rank/file indexing */
  288.     cpT rbv[sqL];          /* square indexing */
  289.     } rbT, *rbptrT;
  290.  
  291. /* nybble board vector */
  292.  
  293. #define nbL (sqL / (byteW / nybbW))
  294. typedef byteT nbvT[nbL];
  295.  
  296. /* flanks */
  297.  
  298. typedef siT flankT;
  299. #define flankL 2
  300. #define flank_nil (-1)
  301.  
  302. #define flank_k 0 /* kingside */
  303. #define flank_q 1 /* queenside */
  304.  
  305. /* direction indices */
  306.  
  307. typedef siT dxT;
  308. #define dxQ 4
  309. #define dxL (bit << dxQ)
  310. #define dx_nil (-1)
  311.  
  312. #define dx_0  0
  313. #define dx_1  1
  314. #define dx_2  2
  315. #define dx_3  3
  316. #define dx_4  4
  317. #define dx_5  5
  318. #define dx_6  6
  319. #define dx_7  7
  320. #define dx_8  8
  321. #define dx_9  9
  322. #define dx_a 10
  323. #define dx_b 11
  324. #define dx_c 12
  325. #define dx_d 13
  326. #define dx_e 14
  327. #define dx_f 15
  328.  
  329. /* direction vector displacements */
  330.  
  331. typedef siT dvT;
  332.  
  333. #define dv_0 (( 0 * fileL) + 1)
  334. #define dv_1 (( 1 * fileL) + 0)
  335. #define dv_2 (( 0 * fileL) - 1)
  336. #define dv_3 ((-1 * fileL) - 0)
  337. #define dv_4 (( 1 * fileL) + 1)
  338. #define dv_5 (( 1 * fileL) - 1)
  339. #define dv_6 ((-1 * fileL) - 1)
  340. #define dv_7 ((-1 * fileL) + 1)
  341. #define dv_8 (( 1 * fileL) + 2)
  342. #define dv_9 (( 2 * fileL) + 1)
  343. #define dv_a (( 2 * fileL) - 1)
  344. #define dv_b (( 1 * fileL) - 2)
  345. #define dv_c ((-1 * fileL) - 2)
  346. #define dv_d ((-2 * fileL) - 1)
  347. #define dv_e ((-2 * fileL) + 1)
  348. #define dv_f ((-1 * fileL) + 2)
  349.  
  350. /* extended direction vector offsets */
  351.  
  352. typedef siT xdvT;
  353.  
  354. #define xdv_0 (( 0 * xfileL) + 1)
  355. #define xdv_1 (( 1 * xfileL) + 0)
  356. #define xdv_2 (( 0 * xfileL) - 1)
  357. #define xdv_3 ((-1 * xfileL) - 0)
  358. #define xdv_4 (( 1 * xfileL) + 1)
  359. #define xdv_5 (( 1 * xfileL) - 1)
  360. #define xdv_6 ((-1 * xfileL) - 1)
  361. #define xdv_7 ((-1 * xfileL) + 1)
  362. #define xdv_8 (( 1 * xfileL) + 2)
  363. #define xdv_9 (( 2 * xfileL) + 1)
  364. #define xdv_a (( 2 * xfileL) - 1)
  365. #define xdv_b (( 1 * xfileL) - 2)
  366. #define xdv_c ((-1 * xfileL) - 2)
  367. #define xdv_d ((-2 * xfileL) - 1)
  368. #define xdv_e ((-2 * xfileL) + 1)
  369. #define xdv_f ((-1 * xfileL) + 2)
  370.  
  371. /* extended rank, file, and square types */
  372.  
  373. typedef siT xrankT;
  374. #define xrankQ (rankQ + 1)
  375. #define xrankL (bit << xrankQ)
  376.  
  377. typedef siT xfileT;
  378. #define xfileQ (fileQ + 1)
  379. #define xfileM 0x0f
  380. #define xfileL (bit << xfileQ)
  381.  
  382. typedef siT xsqT, *xsqptrT;
  383. #define xsqQ (xrankQ + xfileQ)
  384. #define xsqL (bit << xsqQ)
  385.  
  386. /* the extended board type */
  387.  
  388. typedef union xbU
  389.     {
  390.     cpT xbm[xrankL][xfileL];
  391.     cpT xbv[xsqL];
  392.     } xbT, *xbptrT;
  393.  
  394. /* extended board mapping macros */
  395.  
  396. #define map_xrank_xsq(xsq) ((xsq) >> xfileQ)
  397. #define map_xfile_xsq(xsq) ((xsq) & xfileM)
  398. #define map_xsq_xrank_xfile(xrank, xfile) (((xrank) << xfileQ) | (xfile))
  399.  
  400. /* extended conversion macros */
  401.  
  402. #define xbdrL 4
  403.  
  404. #define map_xfile_file(file) ((file) + xbdrL)
  405. #define map_xrank_rank(rank) ((rank) + xbdrL)
  406.  
  407. #define map_file_xfile(xfile) ((xfile) - xbdrL)
  408. #define map_rank_xrank(xrank) ((xrank) - xbdrL)
  409.  
  410. #define map_sq_xsq(xsq) \
  411.     (((((xsq) >> xfileQ) - xbdrL) << fileQ) | (((xsq) & xfileM) - xbdrL))
  412.  
  413. #define map_xsq_sq(sq) \
  414.     ((((((sq) >> fileQ) & fileM) + xbdrL) << xfileQ) | \
  415.     (((sq) & fileM) + xbdrL))
  416.  
  417. /* castling availability indicators */
  418.  
  419. typedef siT caiT;
  420. #define caiL (rcL * flankL)
  421. #define cai_nil (-1)
  422.  
  423. #define cai_wk ((c_w * flankL) + flank_k)
  424. #define cai_wq ((c_w * flankL) + flank_q)
  425. #define cai_bk ((c_b * flankL) + flank_k)
  426. #define cai_bq ((c_b * flankL) + flank_q)
  427.  
  428. /* castling index mapper */
  429.  
  430. #define castim(cai) (bit << (cai))
  431.  
  432. /* castling flags */
  433.  
  434. typedef siT castT;
  435. typedef castT *castptrT;
  436.  
  437. #define cf_wk castim(cai_wk)
  438. #define cf_wq castim(cai_wq)
  439. #define cf_bk castim(cai_bk)
  440. #define cf_bq castim(cai_bq)
  441.  
  442. /* centipawn evaluation */
  443.  
  444. typedef siT cpevT, *cpevptrT;
  445.  
  446. /* some interesting centipawn evaluations */
  447.  
  448. #define cpev_best ((cpevT) ((((liT) bit) << 15) - 1))
  449. #define cpev_bust (-cpev_best)
  450. #define cpev_draw 0
  451. #define cpev_mate cpev_best
  452. #define cpev_wrck (cpev_bust - 1)
  453.  
  454. /* mate and loss synthesis macros (fullmove distance argument) */
  455.  
  456. #define synth_mate(n) (cpev_mate - ((n) * 2) + 1)
  457. #define synth_loss(n) (cpev_bust + ((n) * 2))
  458.  
  459. /* distance to mate/loss macros (mate/loss centipawn argument) */
  460.  
  461. #define synth_distance_mate(cpev)  ((siT) (((cpev_mate - (cpev)) + 1) / 2))
  462. #define synth_distance_loss(cpev)  ((siT) (((cpev) - cpev_bust) / 2))
  463.  
  464. /* maximum distance to mate/loss (fullmove distance count) */
  465.  
  466. #define max_dist_mateL 1024
  467. #define max_dist_lossL 1024
  468.  
  469. /* forced mate/loss detection macros (mate/loss centipawn argument) */
  470.  
  471. #define forced_mate(cpev) ((cpev) >= ((cpev_mate - (max_dist_mateL * 2)) + 1))
  472. #define forced_loss(cpev) ((cpev) <= (cpev_bust + (max_dist_lossL * 2)))
  473.  
  474. /* move flag bits */
  475.  
  476. typedef siT mfT;
  477.  
  478. #define mf_bust (bit << 0) /* illegal move */
  479. #define mf_chec (bit << 1) /* checking */
  480. #define mf_chmt (bit << 2) /* checkmating */
  481. #define mf_draw (bit << 3) /* drawing (includes stalemating) */
  482. #define mf_exec (bit << 4) /* executed at least once */
  483. #define mf_null (bit << 5) /* special null move */
  484. #define mf_sanf (bit << 6) /* needs file disambiguation */
  485. #define mf_sanr (bit << 7) /* needs rank disambiguation */
  486. #define mf_stmt (bit << 8) /* stalemating */
  487.  
  488. /* special case move type */
  489.  
  490. typedef siT scmvT;
  491. #define scmvQ 3
  492. #define scmvL (bit << scmvQ)
  493. #define scmv_nil (-1)
  494.  
  495. #define scmv_reg 0 /* regular */
  496. #define scmv_epc 1 /* en passant capture */
  497. #define scmv_cks 2 /* castles kingside */
  498. #define scmv_cqs 3 /* castles queenside */
  499. #define scmv_ppn 4 /* pawn promotes to knight */
  500. #define scmv_ppb 5 /* pawn promotes to bishop */
  501. #define scmv_ppr 6 /* pawn promotes to rook */
  502. #define scmv_ppq 7 /* pawn promotes to queen */
  503.  
  504. /* move type */
  505.  
  506. typedef struct mS
  507.     {
  508.     mfT   m_flag; /* move flags */
  509.     sqT   m_frsq; /* from square */
  510.     sqT   m_tosq; /* to square */
  511.     cpT   m_frcp; /* from color-piece */
  512.     cpT   m_tocp; /* to color-piece */
  513.     scmvT m_scmv; /* special case move indication */
  514.     } mT, *mptrT;
  515.  
  516. /* game termination indicator markers */
  517.  
  518. typedef siT gtimT, *gtimptrT;
  519. #define gtimL 4
  520. #define gtim_nil (-1)
  521.  
  522. #define gtim_w 0 /* White won */
  523. #define gtim_b 1 /* Black won */
  524. #define gtim_d 2 /* draw */
  525. #define gtim_u 3 /* unknown */
  526.  
  527. /* clockstamp length hh:mm:ss */
  528.  
  529. #define clockstampL (2 + 1 + 2 + 1 + 2 + 1)
  530.  
  531. /* datestamp length YYYY.MM.DD */
  532.  
  533. #define datestampL (4 + 1 + 2 + 1 + 2 + 1)
  534.  
  535. /* duration length dddd:hh:mm:ss */
  536.  
  537. #define durationL (4 + 1 + 2 + 1 + 2 + 1 + 2 + 1)
  538.  
  539. /* EPD operand basetype */
  540.  
  541. typedef siT eobT;
  542. #define eobL 2
  543. #define eob_nil (-1)
  544.  
  545. #define eob_string 0 /* quoted string */
  546. #define eob_symbol 1 /* unquoted symbol */
  547.  
  548. /* EPD operand value type */
  549.  
  550. typedef struct eovS
  551.     {
  552.     eobT         eov_eob;  /* basetype */
  553.     charptrT     eov_str;  /* string value */
  554.     struct eovS *eov_prev; /* previous operand */
  555.     struct eovS *eov_next; /* next operand */
  556.     } eovT, *eovptrT;
  557.  
  558. /* EPD operation type */
  559.  
  560. typedef struct eopS
  561.     {
  562.     charptrT     eop_opsym;   /* operation code symbol */
  563.     eovptrT      eop_headeov; /* head of operand value list */
  564.     eovptrT      eop_taileov; /* tail of operand value list */
  565.     struct eopS *eop_prev;    /* previous operation */
  566.     struct eopS *eop_next;    /* next operation */
  567.     } eopT, *eopptrT;
  568.  
  569. /* EPD record type */
  570.  
  571. typedef struct epdS
  572.     {
  573.     nbvT     epd_nbv;     /* piece placement nybble board vector */
  574.     cT       epd_actc;    /* active color */
  575.     castT    epd_cast;    /* castling availability */
  576.     sqT      epd_epsq;    /* en passant target square */
  577.     eopptrT  epd_headeop; /* head of operation list */
  578.     eopptrT  epd_taileop; /* tail of operation list */
  579.     } epdT, *epdptrT;
  580.  
  581. /* EPD standard operators */
  582.  
  583. typedef siT epdsoT, *epdsoptrT;
  584. #define epdsoL 51
  585. #define epdso_nil (-1)
  586.  
  587. #define epdso_acd          0 /* analysis count: depth */
  588. #define epdso_acn          1 /* analysis count: nodes */
  589. #define epdso_acs          2 /* analysis count: seconds */
  590. #define epdso_am           3 /* avoid move(s) */
  591. #define epdso_bm           4 /* best move(s) */
  592. #define epdso_c0           5 /* comment slot 0 */
  593. #define epdso_c1           6 /* comment slot 1 */
  594. #define epdso_c2           7 /* comment slot 2 */
  595. #define epdso_c3           8 /* comment slot 3 */
  596. #define epdso_c4           9 /* comment slot 4 */
  597. #define epdso_c5          10 /* comment slot 5 */
  598. #define epdso_c6          11 /* comment slot 6 */
  599. #define epdso_c7          12 /* comment slot 7 */
  600. #define epdso_c8          13 /* comment slot 8 */
  601. #define epdso_c9          14 /* comment slot 9 */
  602. #define epdso_cc          15 /* chess clock */
  603. #define epdso_ce          16 /* centipawn evaluation */
  604. #define epdso_dm          17 /* direct move count */
  605. #define epdso_draw_accept 18 /* draw accept */
  606. #define epdso_draw_claim  19 /* draw claim */
  607. #define epdso_draw_offer  20 /* draw offer */
  608. #define epdso_draw_reject 21 /* draw reject */
  609. #define epdso_eco         22 /* ECO code */
  610. #define epdso_fmvn        23 /* fullmove number */
  611. #define epdso_hmvc        24 /* halfmove clock */
  612. #define epdso_id          25 /* position identification */
  613. #define epdso_nic         26 /* NIC code */
  614. #define epdso_noop        27 /* no operation */
  615. #define epdso_pm          28 /* predicted move */
  616. #define epdso_ptp         29 /* PGN tag pair(s) */
  617. #define epdso_pv          30 /* predicted variation */
  618. #define epdso_rc          31 /* repetition count */
  619. #define epdso_refcom      32 /* referee command */
  620. #define epdso_refreq      33 /* referee request */
  621. #define epdso_resign      34 /* resign */
  622. #define epdso_sm          35 /* supplied move */
  623. #define epdso_sv          36 /* supplied variation */
  624. #define epdso_tcgs        37 /* telecommunications: game selector */
  625. #define epdso_tcri        38 /* telecommunications: receiver identification */
  626. #define epdso_tcsi        39 /* telecommunications: sender identification */
  627. #define epdso_ts          40 /* timestamp */
  628. #define epdso_v0          41 /* variation slot 0 */
  629. #define epdso_v1          42 /* variation slot 1 */
  630. #define epdso_v2          43 /* variation slot 2 */
  631. #define epdso_v3          44 /* variation slot 3 */
  632. #define epdso_v4          45 /* variation slot 4 */
  633. #define epdso_v5          46 /* variation slot 5 */
  634. #define epdso_v6          47 /* variation slot 6 */
  635. #define epdso_v7          48 /* variation slot 7 */
  636. #define epdso_v8          49 /* variation slot 8 */
  637. #define epdso_v9          50 /* variation slot 9 */
  638.  
  639. /* referee commands */
  640.  
  641. typedef siT refcomT, *refcomptrT;
  642. #define refcomL 7
  643. #define refcom_nil (-1)
  644.  
  645. #define refcom_conclude   0
  646. #define refcom_disconnect 1
  647. #define refcom_execute    2
  648. #define refcom_fault      3
  649. #define refcom_inform     4
  650. #define refcom_respond    5
  651. #define refcom_reset      6
  652.  
  653. /* referee requests */
  654.  
  655. typedef siT refreqT, *refreqptrT;
  656. #define refreqL 4
  657. #define refreq_nil (-1)
  658.  
  659. #define refreq_fault    0
  660. #define refreq_reply    1
  661. #define refreq_sign_on  2
  662. #define refreq_sign_off 3
  663.  
  664. /* referee interface procedure type */
  665.  
  666. typedef epdptrT (*refintptrT)(epdptrT epdptr, siptrT flagptr);
  667.  
  668. /* PGN Seven Tag Roster names */
  669.  
  670. typedef siT pgnstrT, *pgnstrptrT;
  671. #define pgnstrL 7
  672. #define pgnstr_nil (-1)
  673.  
  674. #define pgnstr_event  0
  675. #define pgnstr_site   1
  676. #define pgnstr_date   2
  677. #define pgnstr_round  3
  678. #define pgnstr_white  4
  679. #define pgnstr_black  5
  680. #define pgnstr_result 6
  681.  
  682. /* benchmark score structure */
  683.  
  684. typedef struct bmsS
  685.     {
  686.     siT bms_acdflag;   /* ACD (depth) data valid flag */
  687.     siT bms_acnflag;   /* ACN (nodes) data valid flag */
  688.     siT bms_acsflag;   /* ACS (seconds) data valid flag */
  689.     liT bms_total;     /* total record count */
  690.     liT bms_solve;     /* solved record count */
  691.     liT bms_unsol;     /* unsolved record count */
  692.     liT bms_total_acd; /* ACD used, all records */
  693.     liT bms_solve_acd; /* ACD used, solved records */
  694.     liT bms_unsol_acd; /* ACD used, unsolved records */
  695.     liT bms_total_acn; /* ACN used, all records */
  696.     liT bms_solve_acn; /* ACN used, solved records */
  697.     liT bms_unsol_acn; /* ACN used, unsolved records */
  698.     liT bms_total_acs; /* ACS used, all records */
  699.     liT bms_solve_acs; /* ACS used, solved records */
  700.     liT bms_unsol_acs; /* ACS used, unsolved records */
  701.     } bmsT, *bmsptrT;
  702.  
  703. /* environment stack entry record type */
  704.  
  705. typedef struct eseS
  706.     {
  707.     cT    ese_actc;      /* active color */
  708.     castT ese_cast;      /* castling availability */
  709.     sqT   ese_epsq;      /* en passant target square */
  710.     siT   ese_hmvc;      /* halfmove clock */
  711.     siT   ese_fmvn;      /* fullmove number */
  712.     sqT   ese_ksqv[rcL]; /* king square locations */
  713.     } eseT, *eseptrT;
  714.  
  715. /* game played move record type (entries are prior to move) */
  716.  
  717. typedef struct gpmS
  718.     {
  719.     mT           gpm_m;    /* the move to be played */
  720.     eseT         gpm_ese;  /* environment statck entry storage */
  721.     nbvT         gpm_nbv;  /* nybble board vector */
  722.     struct gpmS *gpm_prev; /* previous played move record */
  723.     struct gpmS *gpm_next; /* next played move record */
  724.     } gpmT, *gpmptrT;
  725.  
  726. /* game record type */
  727.  
  728. typedef struct gamS
  729.     {
  730.     charptrT     gam_strv[pgnstrL]; /* PGN STR tag values */
  731.     gtimT        gam_gtim;          /* game termination indicator */
  732.     gpmptrT      gam_headgpm;       /* head of game played move list */
  733.     gpmptrT      gam_tailgpm;       /* tail of game played move list */
  734.     struct gamS *gam_prev;          /* previous game */
  735.     struct gamS *gam_next;          /* next game */
  736.     } gamT, *gamptrT;
  737.  
  738. /* tablebase byte entry semispan length */
  739.  
  740. #define tbbe_ssL (((bit << byteW) - 4) / 2)
  741.  
  742. /* the signed byte evaulation type */
  743.  
  744. typedef signed char bevT, *bevptrT;
  745.  
  746. /* tablebase signed byte entry values */
  747.  
  748. #define bev_broken   (tbbe_ssL + 1)  /* illegal or busted */
  749.  
  750. #define bev_mi1      tbbe_ssL        /* mate in 1 move */
  751. #define bev_mimin    1               /* mate in 126 moves */
  752.  
  753. #define bev_draw     0               /* draw */
  754.  
  755. #define bev_limax    (-1)            /* mated in 125 moves */
  756. #define bev_li0      (-tbbe_ssL)     /* mated in 0 moves */
  757.  
  758. #define bev_reserved (-tbbe_ssL - 1) /* reserved */
  759. #define bev_unknown  (-tbbe_ssL - 2) /* unknown */
  760.  
  761. /* signed byte entry range testing macros */
  762.  
  763. #define tbe_mating(bev) \
  764.     (((bev) >= bev_mimin) && ((bev) <= bev_mi1))
  765.  
  766. #define tbe_losing(bev) \
  767.     (((bev) >= bev_li0) && ((bev) <= bev_limax))
  768.  
  769. #define tbe_wld(bev) \
  770.     (((bev) >= bev_li0) && ((bev) <= bev_mi1))
  771.  
  772. #define tbe_special(bev) \
  773.     (((bev) < bev_li0) || ((bev) > bev_mi1))
  774.  
  775. /* tablebase piece limits */
  776.  
  777. #define tbmecL 4 /* either color by itself */
  778. #define tbmbcL 5 /* both colors combined */
  779.  
  780. /* tablebase class identifiers */
  781.  
  782. typedef siT tbidT, *tbidptrT;
  783. #define tbidL 146
  784. #define tbid_nil (-1)
  785.  
  786. #define tbid_kk      0
  787. #define tbid_kpk     1
  788. #define tbid_knk     2
  789. #define tbid_kbk     3
  790. #define tbid_krk     4
  791. #define tbid_kqk     5
  792. #define tbid_kpkp    6
  793. #define tbid_knkp    7
  794. #define tbid_knkn    8
  795. #define tbid_kbkp    9
  796. #define tbid_kbkn   10
  797. #define tbid_kbkb   11
  798. #define tbid_krkp   12
  799. #define tbid_krkn   13
  800. #define tbid_krkb   14
  801. #define tbid_krkr   15
  802. #define tbid_kqkp   16
  803. #define tbid_kqkn   17
  804. #define tbid_kqkb   18
  805. #define tbid_kqkr   19
  806. #define tbid_kqkq   20
  807. #define tbid_kppk   21
  808. #define tbid_knpk   22
  809. #define tbid_knnk   23
  810. #define tbid_kbpk   24
  811. #define tbid_kbnk   25
  812. #define tbid_kbbk   26
  813. #define tbid_krpk   27
  814. #define tbid_krnk   28
  815. #define tbid_krbk   29
  816. #define tbid_krrk   30
  817. #define tbid_kqpk   31
  818. #define tbid_kqnk   32
  819. #define tbid_kqbk   33
  820. #define tbid_kqrk   34
  821. #define tbid_kqqk   35
  822. #define tbid_kppkp  36
  823. #define tbid_kppkn  37
  824. #define tbid_kppkb  38
  825. #define tbid_kppkr  39
  826. #define tbid_kppkq  40
  827. #define tbid_knpkp  41
  828. #define tbid_knpkn  42
  829. #define tbid_knpkb  43
  830. #define tbid_knpkr  44
  831. #define tbid_knpkq  45
  832. #define tbid_knnkp  46
  833. #define tbid_knnkn  47
  834. #define tbid_knnkb  48
  835. #define tbid_knnkr  49
  836. #define tbid_knnkq  50
  837. #define tbid_kbpkp  51
  838. #define tbid_kbpkn  52
  839. #define tbid_kbpkb  53
  840. #define tbid_kbpkr  54
  841. #define tbid_kbpkq  55
  842. #define tbid_kbnkp  56
  843. #define tbid_kbnkn  57
  844. #define tbid_kbnkb  58
  845. #define tbid_kbnkr  59
  846. #define tbid_kbnkq  60
  847. #define tbid_kbbkp  61
  848. #define tbid_kbbkn  62
  849. #define tbid_kbbkb  63
  850. #define tbid_kbbkr  64
  851. #define tbid_kbbkq  65
  852. #define tbid_krpkp  66
  853. #define tbid_krpkn  67
  854. #define tbid_krpkb  68
  855. #define tbid_krpkr  69
  856. #define tbid_krpkq  70
  857. #define tbid_krnkp  71
  858. #define tbid_krnkn  72
  859. #define tbid_krnkb  73
  860. #define tbid_krnkr  74
  861. #define tbid_krnkq  75
  862. #define tbid_krbkp  76
  863. #define tbid_krbkn  77
  864. #define tbid_krbkb  78
  865. #define tbid_krbkr  79
  866. #define tbid_krbkq  80
  867. #define tbid_krrkp  81
  868. #define tbid_krrkn  82
  869. #define tbid_krrkb  83
  870. #define tbid_krrkr  84
  871. #define tbid_krrkq  85
  872. #define tbid_kqpkp  86
  873. #define tbid_kqpkn  87
  874. #define tbid_kqpkb  88
  875. #define tbid_kqpkr  89
  876. #define tbid_kqpkq  90
  877. #define tbid_kqnkp  91
  878. #define tbid_kqnkn  92
  879. #define tbid_kqnkb  93
  880. #define tbid_kqnkr  94
  881. #define tbid_kqnkq  95
  882. #define tbid_kqbkp  96
  883. #define tbid_kqbkn  97
  884. #define tbid_kqbkb  98
  885. #define tbid_kqbkr  99
  886. #define tbid_kqbkq 100
  887. #define tbid_kqrkp 101
  888. #define tbid_kqrkn 102
  889. #define tbid_kqrkb 103
  890. #define tbid_kqrkr 104
  891. #define tbid_kqrkq 105
  892. #define tbid_kqqkp 106
  893. #define tbid_kqqkn 107
  894. #define tbid_kqqkb 108
  895. #define tbid_kqqkr 109
  896. #define tbid_kqqkq 110
  897. #define tbid_kpppk 111
  898. #define tbid_knppk 112
  899. #define tbid_knnpk 113
  900. #define tbid_knnnk 114
  901. #define tbid_kbppk 115
  902. #define tbid_kbnpk 116
  903. #define tbid_kbnnk 117
  904. #define tbid_kbbpk 118
  905. #define tbid_kbbnk 119
  906. #define tbid_kbbbk 120
  907. #define tbid_krppk 121
  908. #define tbid_krnpk 122
  909. #define tbid_krnnk 123
  910. #define tbid_krbpk 124
  911. #define tbid_krbnk 125
  912. #define tbid_krbbk 126
  913. #define tbid_krrpk 127
  914. #define tbid_krrnk 128
  915. #define tbid_krrbk 129
  916. #define tbid_krrrk 130
  917. #define tbid_kqppk 131
  918. #define tbid_kqnpk 132
  919. #define tbid_kqnnk 133
  920. #define tbid_kqbpk 134
  921. #define tbid_kqbnk 135
  922. #define tbid_kqbbk 136
  923. #define tbid_kqrpk 137
  924. #define tbid_kqrnk 138
  925. #define tbid_kqrbk 139
  926. #define tbid_kqrrk 140
  927. #define tbid_kqqpk 141
  928. #define tbid_kqqnk 142
  929. #define tbid_kqqbk 143
  930. #define tbid_kqqrk 144
  931. #define tbid_kqqqk 145
  932.  
  933. /* tablebase fold modes */
  934.  
  935. typedef siT foldT;
  936. #define foldL 2
  937. #define fold_nil (-1)
  938.  
  939. #define fold_flank    0
  940. #define fold_triangle 1
  941.  
  942. #define ff_flankL    (sqL / 2)
  943. #define ff_triangleL (((rankL * rankL) + (rankL * 2)) / 8)
  944.  
  945. /* tablebase flags */
  946.  
  947. #define tbf_has_pawns      bit_00
  948. #define tbf_has_white_pawn bit_01
  949. #define tbf_has_black_pawn bit_02
  950. #define tbf_ep_captures    bit_03
  951. #define tbf_fold_triangle  bit_04
  952. #define tbf_fold_flank     bit_05
  953.  
  954. /* piece distribution type */
  955.  
  956. typedef siT distvT[rcL][rpL];
  957.  
  958. /* position vector type */
  959.  
  960. typedef sqT posvT[rcL][tbmecL];
  961.  
  962. /* file indexing type */
  963.  
  964. typedef liT indexT, *indexptrT;
  965.  
  966. /* the tablebase master vector entry */
  967.  
  968. typedef struct tbS
  969.     {
  970.     charptrT tb_name;                /* class name */
  971.     siT      tb_flags;               /* flag bits */
  972.     foldT    tb_fold;                /* fold mode */
  973.     cT       tb_pivot_c;             /* pivot color */
  974.     siT      tb_pivot_slot;          /* pivot slot within color */
  975.     siT      tb_count;               /* man count */
  976.     indexT   tb_length;              /* length of file */
  977.     siT      tb_mcv[rcL];            /* man count per color */
  978.     distvT   tb_distv;               /* piece distribution */
  979.     liT      tb_sig0;                /* distribution signature */
  980.     liT      tb_sig1;                /* inverted distribution signature */
  981.     pT       tb_pv[rcL][tbmecL];     /* pieces */
  982.     cpT      tb_cpv[rcL][tbmecL];    /* color-pieces */
  983.     siT      tb_scalev[rcL][tbmecL]; /* scale factors */
  984.     liT      tb_multv[rcL][tbmecL];  /* multipliers */
  985.     } tbT, *tbptrT;
  986.  
  987. /* reflection macros */
  988.  
  989. #define reflect_x(sq) ((sq) ^ 0x38)
  990. #define reflect_y(sq) ((sq) ^ 0x07)
  991. #define reflect_xy(sq) ((((sq) >> 3) & 0x07) | (((sq) << 3) & 0x38))
  992.  
  993. /* tablebase file pointer cache limit (max simul open files) */
  994.  
  995. #define tbcL 8
  996.  
  997. /* tablebase file pointer cache entry type  */
  998.  
  999. typedef struct tbcS
  1000.     {
  1001.     siT   tbc_inuse; /* entry in use flag */
  1002.     tbidT tbc_tbid;  /* tablebase class ID */
  1003.     cT    tbc_c;     /* color selector for class file pair */
  1004.     fptrT tbc_fptr;  /* pointer to the open file */
  1005.     } tbcT, *tbcptrT;
  1006.  
  1007. /* statndard disply output column limit */
  1008.  
  1009. #define columnL 80
  1010.  
  1011. /* inclusion telltale closure */
  1012.  
  1013. #endif
  1014.  
  1015. #endif
  1016. /*<<< epddefs.h: EOF */
  1017.