#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 (sje@mv.mv.com)
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 */