-
Notifications
You must be signed in to change notification settings - Fork 2
/
epddefs.h
639 lines (599 loc) · 21.3 KB
/
epddefs.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
#if !defined(EPDDEFS_INCLUDED)
/* *INDENT-OFF* */
# define EPDDEFS_INCLUDED
/*>>> epddefs.h: Extended Position Description definitions */
/* Revised: 1996.06.23 */
/*
Copyright (C) 1996 by Steven J. Edwards ([email protected])
All rights reserved. This code may be freely redistibuted and used by
both research and commerical applications. No warranty exists.
*/
/*
Everything in this source file is independent of the host program.
Requests for changes and additions should be communicated to the author
via the e-mail address given above.
*/
/*
This file was originally prepared on an Apple Macintosh using the
Metrowerks CodeWarrior 6 ANSI C compiler. Tabs are set at every
four columns. Further testing and development was performed on a
generic PC running Linux 1.3.20 and using the gcc 2.7.0 compiler.
*/
/* inclusion telltale */
# if (!defined(_epddefs))
# define _epddefs 1
/* subprogram storage class for non-statics (usually empty definition) */
# define nonstatic
/* a bit */
# define bit 0x01
/* bit positions */
# define bit_00 (bit << 0)
# define bit_01 (bit << 1)
# define bit_02 (bit << 2)
# define bit_03 (bit << 3)
# define bit_04 (bit << 4)
# define bit_05 (bit << 5)
# define bit_06 (bit << 6)
# define bit_07 (bit << 7)
# define bit_08 (bit << 8)
# define bit_09 (bit << 9)
# define bit_10 (bit << 10)
# define bit_11 (bit << 11)
# define bit_12 (bit << 12)
# define bit_13 (bit << 13)
# define bit_14 (bit << 14)
# define bit_15 (bit << 15)
/* bit width constants */
# define nybbW 4
# define byteW 8
/* simple masks */
# define nybbM 0x000f
/* useful types */
typedef void *voidptrT;
typedef unsigned char byteT, *byteptrT;
typedef char *charptrT;
typedef short int siT, *siptrT;
typedef long int liT, *liptrT;
typedef float srT, *srptrT;
typedef double lrT, *lrptrT;
typedef FILE *fptrT;
/* text I/O buffer length */
# define tL 256
/* EPD I/O buffer length */
# define epdL 4096
/* the standard algebraic notation character vector type */
# define sanL 16
/* must be at least 8; extra room for alternatives */
typedef char sanT[sanL];
typedef sanT *sanptrT;
/* SAN style attributes, priority ordered (used for encoding) */
typedef siT ssaT;
# define ssaL 12
# define ssa_nil (-1)
# define ssa_capt 0 /* 5 way: capture indicator */
# define ssa_case 1 /* 2 way: letter case */
# define ssa_chec 2 /* 3 way: checking */
# define ssa_cast 3 /* 5 way: castling */
# define ssa_prom 4 /* 4 way: promoting */
# define ssa_ptar 5 /* 2 way: pawn target rank skip */
# define ssa_chmt 6 /* 4 way: checkmating */
# define ssa_epct 7 /* 2 way: en passant capture */
# define ssa_draw 8 /* 2 way: drawing */
# define ssa_move 9 /* 2 way: movement indicator */
# define ssa_edcf 10 /* 2 way: extra disambiguating character (file) */
# define ssa_edcr 11 /* 2 way: extra disambiguating character (rank) */
/* SAN style vector */
typedef siT ssavT[ssaL];
/* colors (ordering is critical) */
typedef siT cT, *cptrT;
# define cQ 2
# define cL (bit << cQ)
# define rcQ 1
# define rcL (bit << rcQ)
# define c_nil (-1)
# define c_w 0
/* white */
# define c_b 1
/* black */
# define c_v 2
/* vacant */
# define c_x 3
/* extra */
/* pieces (ordering is critical) */
typedef siT pT, *pptrT;
# define pL 8
# define rpL 6
# define p_nil (-1)
# define p_p 0
/* pawn */
# define p_n 1
/* knight */
# define p_b 2
/* bishop */
# define p_r 3
/* rook */
# define p_q 4
/* queen */
# define p_k 5
/* king */
# define p_v 6
/* vacant */
# define p_x 7
/* extra */
/* color piece combinations (ordering is critical) */
typedef siT cpT;
# define cpL 16
# define rcpL 12
# define cp_nil (-1)
# define cp_wp 0 /* white pawn */
# define cp_wn 1 /* white knight */
# define cp_wb 2 /* white bishop */
# define cp_wr 3 /* white rook */
# define cp_wq 4 /* white queen */
# define cp_wk 5 /* white king */
# define cp_bp 6 /* black pawn */
# define cp_bn 7 /* black knight */
# define cp_bb 8 /* black bishop */
# define cp_br 9 /* black rook */
# define cp_bq 10 /* black queen */
# define cp_bk 11 /* black king */
# define cp_v0 12 /* vacant */
# define cp_x0 13 /* extra 0 */
# define cp_x1 14 /* extra 1 */
# define cp_x2 15 /* extra 2 */
/* ranks */
typedef siT rankT;
# define rankM (0x0007)
# define rankQ 3
# define rankL (bit << rankQ)
# define rank_nil (-1)
# define rank_1 0
# define rank_2 1
# define rank_3 2
# define rank_4 3
# define rank_5 4
# define rank_6 5
# define rank_7 6
# define rank_8 7
/* files */
typedef siT fileT;
# define fileM (0x0007)
# define fileQ 3
# define fileL (bit << fileQ)
# define file_nil (-1)
# define file_a 0 /* QR */
# define file_b 1 /* QN */
# define file_c 2 /* QB */
# define file_d 3 /* Q */
# define file_e 4 /* K */
# define file_f 5 /* KB */
# define file_g 6 /* KN */
# define file_h 7 /* KR */
/* location mappings */
# define map_sq(r, f) (((r) << fileQ | (f)))
# define map_file(sq) ((sq) & 0x07)
# define map_rank(sq) ((sq) >> fileQ)
/* squares */
typedef siT sqT, *sqptrT;
# define sqM (0x003f)
# define sqQ (rankQ + fileQ)
# define sqL (bit << sqQ)
# define sq_nil (-1)
# define sq_a1 map_sq(rank_1, file_a)
# define sq_b1 map_sq(rank_1, file_b)
# define sq_c1 map_sq(rank_1, file_c)
# define sq_d1 map_sq(rank_1, file_d)
# define sq_e1 map_sq(rank_1, file_e)
# define sq_f1 map_sq(rank_1, file_f)
# define sq_g1 map_sq(rank_1, file_g)
# define sq_h1 map_sq(rank_1, file_h)
# define sq_a2 map_sq(rank_2, file_a)
# define sq_b2 map_sq(rank_2, file_b)
# define sq_c2 map_sq(rank_2, file_c)
# define sq_d2 map_sq(rank_2, file_d)
# define sq_e2 map_sq(rank_2, file_e)
# define sq_f2 map_sq(rank_2, file_f)
# define sq_g2 map_sq(rank_2, file_g)
# define sq_h2 map_sq(rank_2, file_h)
# define sq_a3 map_sq(rank_3, file_a)
# define sq_b3 map_sq(rank_3, file_b)
# define sq_c3 map_sq(rank_3, file_c)
# define sq_d3 map_sq(rank_3, file_d)
# define sq_e3 map_sq(rank_3, file_e)
# define sq_f3 map_sq(rank_3, file_f)
# define sq_g3 map_sq(rank_3, file_g)
# define sq_h3 map_sq(rank_3, file_h)
# define sq_a4 map_sq(rank_4, file_a)
# define sq_b4 map_sq(rank_4, file_b)
# define sq_c4 map_sq(rank_4, file_c)
# define sq_d4 map_sq(rank_4, file_d)
# define sq_e4 map_sq(rank_4, file_e)
# define sq_f4 map_sq(rank_4, file_f)
# define sq_g4 map_sq(rank_4, file_g)
# define sq_h4 map_sq(rank_4, file_h)
# define sq_a5 map_sq(rank_5, file_a)
# define sq_b5 map_sq(rank_5, file_b)
# define sq_c5 map_sq(rank_5, file_c)
# define sq_d5 map_sq(rank_5, file_d)
# define sq_e5 map_sq(rank_5, file_e)
# define sq_f5 map_sq(rank_5, file_f)
# define sq_g5 map_sq(rank_5, file_g)
# define sq_h5 map_sq(rank_5, file_h)
# define sq_a6 map_sq(rank_6, file_a)
# define sq_b6 map_sq(rank_6, file_b)
# define sq_c6 map_sq(rank_6, file_c)
# define sq_d6 map_sq(rank_6, file_d)
# define sq_e6 map_sq(rank_6, file_e)
# define sq_f6 map_sq(rank_6, file_f)
# define sq_g6 map_sq(rank_6, file_g)
# define sq_h6 map_sq(rank_6, file_h)
# define sq_a7 map_sq(rank_7, file_a)
# define sq_b7 map_sq(rank_7, file_b)
# define sq_c7 map_sq(rank_7, file_c)
# define sq_d7 map_sq(rank_7, file_d)
# define sq_e7 map_sq(rank_7, file_e)
# define sq_f7 map_sq(rank_7, file_f)
# define sq_g7 map_sq(rank_7, file_g)
# define sq_h7 map_sq(rank_7, file_h)
# define sq_a8 map_sq(rank_8, file_a)
# define sq_b8 map_sq(rank_8, file_b)
# define sq_c8 map_sq(rank_8, file_c)
# define sq_d8 map_sq(rank_8, file_d)
# define sq_e8 map_sq(rank_8, file_e)
# define sq_f8 map_sq(rank_8, file_f)
# define sq_g8 map_sq(rank_8, file_g)
# define sq_h8 map_sq(rank_8, file_h)
/* regular board */
typedef union rbU {
cpT rbm[rankL][fileL]; /* rank/file indexing */
cpT rbv[sqL]; /* square indexing */
} rbT, *rbptrT;
/* nybble board vector */
# define nbL (sqL / (byteW / nybbW))
typedef byteT nbvT[nbL];
/* flanks */
typedef siT flankT;
# define flankL 2
# define flank_nil (-1)
# define flank_k 0 /* kingside */
# define flank_q 1 /* queenside */
/* direction indices */
typedef siT dxT;
# define dxQ 4
# define dxL (bit << dxQ)
# define dx_nil (-1)
# define dx_0 0
# define dx_1 1
# define dx_2 2
# define dx_3 3
# define dx_4 4
# define dx_5 5
# define dx_6 6
# define dx_7 7
# define dx_8 8
# define dx_9 9
# define dx_a 10
# define dx_b 11
# define dx_c 12
# define dx_d 13
# define dx_e 14
# define dx_f 15
/* direction vector displacements */
typedef siT dvT;
# define dv_0 (( 0 * fileL) + 1)
# define dv_1 (( 1 * fileL) + 0)
# define dv_2 (( 0 * fileL) - 1)
# define dv_3 ((-1 * fileL) - 0)
# define dv_4 (( 1 * fileL) + 1)
# define dv_5 (( 1 * fileL) - 1)
# define dv_6 ((-1 * fileL) - 1)
# define dv_7 ((-1 * fileL) + 1)
# define dv_8 (( 1 * fileL) + 2)
# define dv_9 (( 2 * fileL) + 1)
# define dv_a (( 2 * fileL) - 1)
# define dv_b (( 1 * fileL) - 2)
# define dv_c ((-1 * fileL) - 2)
# define dv_d ((-2 * fileL) - 1)
# define dv_e ((-2 * fileL) + 1)
# define dv_f ((-1 * fileL) + 2)
/* extended direction vector offsets */
typedef siT xdvT;
# define xdv_0 (( 0 * xfileL) + 1)
# define xdv_1 (( 1 * xfileL) + 0)
# define xdv_2 (( 0 * xfileL) - 1)
# define xdv_3 ((-1 * xfileL) - 0)
# define xdv_4 (( 1 * xfileL) + 1)
# define xdv_5 (( 1 * xfileL) - 1)
# define xdv_6 ((-1 * xfileL) - 1)
# define xdv_7 ((-1 * xfileL) + 1)
# define xdv_8 (( 1 * xfileL) + 2)
# define xdv_9 (( 2 * xfileL) + 1)
# define xdv_a (( 2 * xfileL) - 1)
# define xdv_b (( 1 * xfileL) - 2)
# define xdv_c ((-1 * xfileL) - 2)
# define xdv_d ((-2 * xfileL) - 1)
# define xdv_e ((-2 * xfileL) + 1)
# define xdv_f ((-1 * xfileL) + 2)
/* extended rank, file, and square types */
typedef siT xrankT;
# define xrankQ (rankQ + 1)
# define xrankL (bit << xrankQ)
typedef siT xfileT;
# define xfileQ (fileQ + 1)
# define xfileM 0x0f
# define xfileL (bit << xfileQ)
typedef siT xsqT, *xsqptrT;
# define xsqQ (xrankQ + xfileQ)
# define xsqL (bit << xsqQ)
/* the extended board type */
typedef union xbU {
cpT xbm[xrankL][xfileL];
cpT xbv[xsqL];
} xbT, *xbptrT;
/* extended board mapping macros */
# define map_xrank_xsq(xsq) ((xsq) >> xfileQ)
# define map_xfile_xsq(xsq) ((xsq) & xfileM)
# define map_xsq_xrank_xfile(xrank, xfile) (((xrank) << xfileQ) | (xfile))
/* extended conversion macros */
# define xbdrL 4
# define map_xfile_file(file) ((file) + xbdrL)
# define map_xrank_rank(rank) ((rank) + xbdrL)
# define map_file_xfile(xfile) ((xfile) - xbdrL)
# define map_rank_xrank(xrank) ((xrank) - xbdrL)
# define map_sq_xsq(xsq) \
(((((xsq) >> xfileQ) - xbdrL) << fileQ) | (((xsq) & xfileM) - xbdrL))
# define map_xsq_sq(sq) \
((((((sq) >> fileQ) & fileM) + xbdrL) << xfileQ) | \
(((sq) & fileM) + xbdrL))
/* castling availability indicators */
typedef siT caiT;
# define caiL (rcL * flankL)
# define cai_nil (-1)
# define cai_wk ((c_w * flankL) + flank_k)
# define cai_wq ((c_w * flankL) + flank_q)
# define cai_bk ((c_b * flankL) + flank_k)
# define cai_bq ((c_b * flankL) + flank_q)
/* castling index mapper */
# define castim(cai) (bit << (cai))
/* castling flags */
typedef siT castT;
typedef castT *castptrT;
# define cf_wk castim(cai_wk)
# define cf_wq castim(cai_wq)
# define cf_bk castim(cai_bk)
# define cf_bq castim(cai_bq)
/* centipawn evaluation */
typedef siT cpevT, *cpevptrT;
/* some interesting centipawn evaluations */
# define cpev_best ((cpevT) ((((liT) bit) << 15) - 1))
# define cpev_bust (-cpev_best)
# define cpev_draw 0
# define cpev_mate cpev_best
# define cpev_wrck (cpev_bust - 1)
/* mate and loss synthesis macros (fullmove distance argument) */
# define synth_mate(n) (cpev_mate - ((n) * 2) + 1)
# define synth_loss(n) (cpev_bust + ((n) * 2))
/* distance to mate/loss macros (mate/loss centipawn argument) */
# define synth_distance_mate(cpev) ((siT) (((cpev_mate - (cpev)) + 1) / 2))
# define synth_distance_loss(cpev) ((siT) (((cpev) - cpev_bust) / 2))
/* maximum distance to mate/loss (fullmove distance count) */
# define max_dist_mateL 1024
# define max_dist_lossL 1024
/* forced mate/loss detection macros (mate/loss centipawn argument) */
# define forced_mate(cpev) ((cpev) >= ((cpev_mate - (max_dist_mateL * 2)) + 1))
# define forced_loss(cpev) ((cpev) <= (cpev_bust + (max_dist_lossL * 2)))
/* move flag bits */
typedef siT mfT;
# define mf_bust (bit << 0) /* illegal move */
# define mf_chec (bit << 1) /* checking */
# define mf_chmt (bit << 2) /* checkmating */
# define mf_draw (bit << 3) /* drawing (includes stalemating) */
# define mf_exec (bit << 4) /* executed at least once */
# define mf_null (bit << 5) /* special null move */
# define mf_sanf (bit << 6) /* needs file disambiguation */
# define mf_sanr (bit << 7) /* needs rank disambiguation */
# define mf_stmt (bit << 8) /* stalemating */
/* special case move type */
typedef siT scmvT;
# define scmvQ 3
# define scmvL (bit << scmvQ)
# define scmv_nil (-1)
# define scmv_reg 0 /* regular */
# define scmv_epc 1 /* en passant capture */
# define scmv_cks 2 /* castles kingside */
# define scmv_cqs 3 /* castles queenside */
# define scmv_ppn 4 /* pawn promotes to knight */
# define scmv_ppb 5 /* pawn promotes to bishop */
# define scmv_ppr 6 /* pawn promotes to rook */
# define scmv_ppq 7 /* pawn promotes to queen */
/* move type */
typedef struct mS {
mfT m_flag; /* move flags */
sqT m_frsq; /* from square */
sqT m_tosq; /* to square */
cpT m_frcp; /* from color-piece */
cpT m_tocp; /* to color-piece */
scmvT m_scmv; /* special case move indication */
} mT, *mptrT;
/* game termination indicator markers */
typedef siT gtimT, *gtimptrT;
# define gtimL 4
# define gtim_nil (-1)
# define gtim_w 0 /* White won */
# define gtim_b 1 /* Black won */
# define gtim_d 2 /* draw */
# define gtim_u 3 /* unknown */
/* clockstamp length hh:mm:ss */
# define clockstampL (2 + 1 + 2 + 1 + 2 + 1)
/* datestamp length YYYY.MM.DD */
# define datestampL (4 + 1 + 2 + 1 + 2 + 1)
/* duration length dddd:hh:mm:ss */
# define durationL (4 + 1 + 2 + 1 + 2 + 1 + 2 + 1)
/* EPD operand basetype */
typedef siT eobT;
# define eobL 2
# define eob_nil (-1)
# define eob_string 0 /* quoted string */
# define eob_symbol 1 /* unquoted symbol */
/* EPD operand value type */
typedef struct eovS {
eobT eov_eob; /* basetype */
charptrT eov_str; /* string value */
struct eovS *eov_prev; /* previous operand */
struct eovS *eov_next; /* next operand */
} eovT, *eovptrT;
/* EPD operation type */
typedef struct eopS {
charptrT eop_opsym; /* operation code symbol */
eovptrT eop_headeov; /* head of operand value list */
eovptrT eop_taileov; /* tail of operand value list */
struct eopS *eop_prev; /* previous operation */
struct eopS *eop_next; /* next operation */
} eopT, *eopptrT;
/* EPD record type */
typedef struct epdS {
nbvT epd_nbv; /* piece placement nybble board vector */
cT epd_actc; /* active color */
castT epd_cast; /* castling availability */
sqT epd_epsq; /* en passant target square */
eopptrT epd_headeop; /* head of operation list */
eopptrT epd_taileop; /* tail of operation list */
} epdT, *epdptrT;
/* EPD standard operators */
typedef siT epdsoT, *epdsoptrT;
# define epdsoL 51
# define epdso_nil (-1)
# define epdso_acd 0 /* analysis count: depth */
# define epdso_acn 1 /* analysis count: nodes */
# define epdso_acs 2 /* analysis count: seconds */
# define epdso_am 3 /* avoid move(s) */
# define epdso_bm 4 /* best move(s) */
# define epdso_c0 5 /* comment slot 0 */
# define epdso_c1 6 /* comment slot 1 */
# define epdso_c2 7 /* comment slot 2 */
# define epdso_c3 8 /* comment slot 3 */
# define epdso_c4 9 /* comment slot 4 */
# define epdso_c5 10 /* comment slot 5 */
# define epdso_c6 11 /* comment slot 6 */
# define epdso_c7 12 /* comment slot 7 */
# define epdso_c8 13 /* comment slot 8 */
# define epdso_c9 14 /* comment slot 9 */
# define epdso_cc 15 /* chess clock */
# define epdso_ce 16 /* centipawn evaluation */
# define epdso_dm 17 /* direct move count */
# define epdso_draw_accept 18 /* draw accept */
# define epdso_draw_claim 19 /* draw claim */
# define epdso_draw_offer 20 /* draw offer */
# define epdso_draw_reject 21 /* draw reject */
# define epdso_eco 22 /* ECO code */
# define epdso_fmvn 23 /* fullmove number */
# define epdso_hmvc 24 /* halfmove clock */
# define epdso_id 25 /* position identification */
# define epdso_nic 26 /* NIC code */
# define epdso_noop 27 /* no operation */
# define epdso_pm 28 /* predicted move */
# define epdso_ptp 29 /* PGN tag pair(s) */
# define epdso_pv 30 /* predicted variation */
# define epdso_rc 31 /* repetition count */
# define epdso_refcom 32 /* referee command */
# define epdso_refreq 33 /* referee request */
# define epdso_resign 34 /* resign */
# define epdso_sm 35 /* supplied move */
# define epdso_sv 36 /* supplied variation */
# define epdso_tcgs 37 /* telecommunications: game selector */
# define epdso_tcri 38 /* telecommunications: receiver identification */
# define epdso_tcsi 39 /* telecommunications: sender identification */
# define epdso_ts 40 /* timestamp */
# define epdso_v0 41 /* variation slot 0 */
# define epdso_v1 42 /* variation slot 1 */
# define epdso_v2 43 /* variation slot 2 */
# define epdso_v3 44 /* variation slot 3 */
# define epdso_v4 45 /* variation slot 4 */
# define epdso_v5 46 /* variation slot 5 */
# define epdso_v6 47 /* variation slot 6 */
# define epdso_v7 48 /* variation slot 7 */
# define epdso_v8 49 /* variation slot 8 */
# define epdso_v9 50 /* variation slot 9 */
/* referee commands */
typedef siT refcomT, *refcomptrT;
# define refcomL 7
# define refcom_nil (-1)
# define refcom_conclude 0
# define refcom_disconnect 1
# define refcom_execute 2
# define refcom_fault 3
# define refcom_inform 4
# define refcom_respond 5
# define refcom_reset 6
/* referee requests */
typedef siT refreqT, *refreqptrT;
# define refreqL 4
# define refreq_nil (-1)
# define refreq_fault 0
# define refreq_reply 1
# define refreq_sign_on 2
# define refreq_sign_off 3
/* referee interface procedure type */
typedef epdptrT(*refintptrT) (epdptrT epdptr, siptrT flagptr);
/* PGN Seven Tag Roster names */
typedef siT pgnstrT, *pgnstrptrT;
# define pgnstrL 7
# define pgnstr_nil (-1)
# define pgnstr_event 0
# define pgnstr_site 1
# define pgnstr_date 2
# define pgnstr_round 3
# define pgnstr_white 4
# define pgnstr_black 5
# define pgnstr_result 6
/* benchmark score structure */
typedef struct bmsS {
siT bms_acdflag; /* ACD (depth) data valid flag */
siT bms_acnflag; /* ACN (nodes) data valid flag */
siT bms_acsflag; /* ACS (seconds) data valid flag */
liT bms_total; /* total record count */
liT bms_solve; /* solved record count */
liT bms_unsol; /* unsolved record count */
liT bms_total_acd; /* ACD used, all records */
liT bms_solve_acd; /* ACD used, solved records */
liT bms_unsol_acd; /* ACD used, unsolved records */
liT bms_total_acn; /* ACN used, all records */
liT bms_solve_acn; /* ACN used, solved records */
liT bms_unsol_acn; /* ACN used, unsolved records */
liT bms_total_acs; /* ACS used, all records */
liT bms_solve_acs; /* ACS used, solved records */
liT bms_unsol_acs; /* ACS used, unsolved records */
} bmsT, *bmsptrT;
/* environment stack entry record type */
typedef struct eseS {
cT ese_actc; /* active color */
castT ese_cast; /* castling availability */
sqT ese_epsq; /* en passant target square */
siT ese_hmvc; /* halfmove clock */
siT ese_fmvn; /* fullmove number */
sqT ese_ksqv[rcL]; /* king square locations */
} eseT, *eseptrT;
/* game played move record type (entries are prior to move) */
typedef struct gpmS {
mT gpm_m; /* the move to be played */
eseT gpm_ese; /* environment statck entry storage */
nbvT gpm_nbv; /* nybble board vector */
struct gpmS *gpm_prev; /* previous played move record */
struct gpmS *gpm_next; /* next played move record */
} gpmT, *gpmptrT;
/* game record type */
typedef struct gamS {
charptrT gam_strv[pgnstrL]; /* PGN STR tag values */
gtimT gam_gtim; /* game termination indicator */
gpmptrT gam_headgpm; /* head of game played move list */
gpmptrT gam_tailgpm; /* tail of game played move list */
struct gamS *gam_prev; /* previous game */
struct gamS *gam_next; /* next game */
} gamT, *gamptrT;
/* statndard disply output column limit */
# define columnL 80
/* inclusion telltale closure */
# endif
/* *INDENT-ON* */
#endif
/*<<< epddefs.h: EOF */