76 _Bool checkmate; |
76 _Bool checkmate; |
77 _Bool capture; |
77 _Bool capture; |
78 } Move; |
78 } Move; |
79 |
79 |
80 #define POS_UNSPECIFIED UINT8_MAX |
80 #define POS_UNSPECIFIED UINT8_MAX |
81 #define mdst(b,m) b[m->torow][m->tofile] |
81 #define mdst(b,m) b[(m)->torow][(m)->tofile] |
82 #define msrc(b,m) b[m->fromrow][m->fromfile] |
82 #define msrc(b,m) b[(m)->fromrow][(m)->fromfile] |
83 |
83 |
84 #define isidx(idx) ((uint8_t)idx < 8) |
84 #define isidx(idx) ((uint8_t)idx < 8) |
85 |
85 |
86 #define isfile(file) (file >= 'a' && file <= 'h') |
86 #define isfile(file) (file >= 'a' && file <= 'h') |
87 #define isrow(row) (row >= '1' && row <= '8') |
87 #define isrow(row) (row >= '1' && row <= '8') |
88 |
88 |
89 #define rowidx(row) (row-'1') |
89 #define rowidx(row) (row-'1') |
90 #define fileidx(file) (file-'a') |
90 #define fileidx(file) (file-'a') |
91 |
91 |
92 #define chkidx(move) (isidx(move->fromfile) && isidx(move->fromrow) && \ |
92 #define chkidx(move) (isidx((move)->fromfile) && isidx((move)->fromrow) && \ |
93 isidx(move->tofile) && isidx(move->torow)) |
93 isidx((move)->tofile) && isidx((move)->torow)) |
94 |
94 |
95 /* secure versions - use, if index is not checked with isidx() */ |
95 /* secure versions - use, if index is not checked with isidx() */ |
96 #define fileidx_s(c) (isfile(c)?fileidx(c):POS_UNSPECIFIED) |
96 #define fileidx_s(c) (isfile(c)?fileidx(c):POS_UNSPECIFIED) |
97 #define rowidx_s(c) (isrow(c)?rowidx(c):POS_UNSPECIFIED) |
97 #define rowidx_s(c) (isrow(c)?rowidx(c):POS_UNSPECIFIED) |
98 |
98 |