| 143 |
143 |
| 144 #define POS_UNSPECIFIED UINT8_MAX |
144 #define POS_UNSPECIFIED UINT8_MAX |
| 145 #define mdst(b,m) b[(m)->torow][(m)->tofile] |
145 #define mdst(b,m) b[(m)->torow][(m)->tofile] |
| 146 #define msrc(b,m) b[(m)->fromrow][(m)->fromfile] |
146 #define msrc(b,m) b[(m)->fromrow][(m)->fromfile] |
| 147 |
147 |
| |
148 /** Checks if the index is specified and valid. */ |
| 148 #define isidx(idx) ((uint8_t)(idx) < 8) |
149 #define isidx(idx) ((uint8_t)(idx) < 8) |
| |
150 /** Checks if the index is unspecified or valid. */ |
| |
151 #define isidxr(idx) ((idx) == POS_UNSPECIFIED || (uint8_t)(idx) < 8) |
| 149 |
152 |
| 150 #define isfile(file) (file >= 'a' && file <= 'h') |
153 #define isfile(file) (file >= 'a' && file <= 'h') |
| 151 #define isrow(row) (row >= '1' && row <= '8') |
154 #define isrow(row) (row >= '1' && row <= '8') |
| 152 |
155 |
| 153 #define rowidx(row) (row-'1') |
156 #define rowidx(row) (row-'1') |
| 154 #define fileidx(file) (file-'a') |
157 #define fileidx(file) (file-'a') |
| 155 |
158 |
| 156 #define rowchr(row) (row+'1') |
159 #define rowchr(row) (row+'1') |
| 157 #define filechr(file) (file+'a') |
160 #define filechr(file) (file+'a') |
| 158 |
|
| 159 #define chkidx_from(move) (isidx((move)->fromfile) && isidx((move)->fromrow)) |
|
| 160 #define chkidx_to(move) (isidx((move)->tofile) && isidx((move)->torow)) |
|
| 161 #define chkidx(move) (chkidx_from(move) && chkidx_to(move)) |
|
| 162 |
161 |
| 163 /* secure versions - use, if index is not checked with isidx() */ |
162 /* secure versions - use, if index is not checked with isidx() */ |
| 164 #define fileidx_s(c) (isfile(c)?fileidx(c):POS_UNSPECIFIED) |
163 #define fileidx_s(c) (isfile(c)?fileidx(c):POS_UNSPECIFIED) |
| 165 #define rowidx_s(c) (isrow(c)?rowidx(c):POS_UNSPECIFIED) |
164 #define rowidx_s(c) (isrow(c)?rowidx(c):POS_UNSPECIFIED) |
| 166 |
165 |