-\r
-// square.c\r
-\r
-// includes\r
-\r
-#include "colour.h"\r
-#include "square.h"\r
-#include "util.h"\r
-\r
-// "constants"\r
-\r
-static const uint8 SquareFrom64[64] = {\r
- A1, B1, C1, D1, E1, F1, G1, H1,\r
- A2, B2, C2, D2, E2, F2, G2, H2,\r
- A3, B3, C3, D3, E3, F3, G3, H3,\r
- A4, B4, C4, D4, E4, F4, G4, H4,\r
- A5, B5, C5, D5, E5, F5, G5, H5,\r
- A6, B6, C6, D6, E6, F6, G6, H6,\r
- A7, B7, C7, D7, E7, F7, G7, H7,\r
- A8, B8, C8, D8, E8, F8, G8, H8,\r
-};\r
-\r
-// variables\r
-\r
-static sint8 SquareTo64[SquareNb];\r
-\r
-// functions\r
-\r
-// square_init()\r
-\r
-void square_init() {\r
-\r
- int sq;\r
-\r
- for (sq = 0; sq < SquareNb; sq++) SquareTo64[sq] = -1;\r
-\r
- for (sq = 0; sq < 64; sq++) {\r
- SquareTo64[SquareFrom64[sq]] = sq;\r
- }\r
-}\r
-\r
-// square_is_ok()\r
-\r
-bool square_is_ok(int square) {\r
-\r
- if (square < 0 || square >= SquareNb) return FALSE;\r
-\r
- if (SquareTo64[square] < 0) return FALSE;\r
-\r
- return TRUE;\r
-}\r
-\r
-// square_make()\r
-\r
-int square_make(int file, int rank) {\r
-\r
- int sq_64;\r
-\r
- ASSERT(file>=0&&file<8);\r
- ASSERT(rank>=0&&rank<8);\r
-\r
- sq_64 = (rank << 3) | file;\r
-\r
- return square_from_64(sq_64);\r
-}\r
-\r
-// square_file()\r
-\r
-int square_file(int square) {\r
-\r
- int file;\r
-\r
- ASSERT(square_is_ok(square));\r
-\r
- file = (square - 4) & 7;\r
- ASSERT(file==(square_to_64(square)&7));\r
-\r
- return file;\r
-}\r
-\r
-// square_rank()\r
-\r
-int square_rank(int square) {\r
-\r
- int rank;\r
-\r
- ASSERT(square_is_ok(square));\r
-\r
- rank = (square >> 4) - 2;\r
- ASSERT(rank==square_to_64(square)>>3);\r
-\r
- return rank;\r
-}\r
-\r
-// square_side_rank()\r
-\r
-int square_side_rank(int square, int colour) {\r
-\r
- int rank;\r
-\r
- ASSERT(square_is_ok(square));\r
- ASSERT(colour_is_ok(colour));\r
-\r
- rank = square_rank(square);\r
- if (colour_is_black(colour)) rank = 7-rank;\r
-\r
- return rank;\r
-}\r
-\r
-// square_from_64()\r
-\r
-int square_from_64(int square) {\r
-\r
- ASSERT(square>=0&&square<64);\r
-\r
- return SquareFrom64[square];\r
-}\r
-\r
-// square_to_64()\r
-\r
-int square_to_64(int square) {\r
-\r
- ASSERT(square_is_ok(square));\r
-\r
- return SquareTo64[square];\r
-}\r
-\r
-// square_is_promote()\r
-\r
-bool square_is_promote(int square) {\r
-\r
- int rank;\r
-\r
- ASSERT(square_is_ok(square));\r
-\r
- rank = square_rank(square);\r
-\r
- return rank == Rank1 || rank == Rank8;\r
-}\r
-\r
-// square_ep_dual()\r
-\r
-int square_ep_dual(int square) {\r
-\r
- ASSERT(square_is_ok(square));\r
- ASSERT(square_rank(square)>=2&&square_rank(square)<=5);\r
-\r
- return square ^ 16;\r
-}\r
-\r
-// square_colour()\r
-\r
-int square_colour(int square) {\r
-\r
- ASSERT(square_is_ok(square));\r
-\r
- return (square ^ (square >> 4)) & 1;\r
-}\r
-\r
-// file_from_char()\r
-\r
-int file_from_char(int c) {\r
-\r
- ASSERT(c>='a'&&c<='h');\r
-\r
- return c - 'a';\r
-}\r
-\r
-// rank_from_char()\r
-\r
-int rank_from_char(int c) {\r
-\r
- ASSERT(c>='1'&&c<='8');\r
-\r
- return c - '1';\r
-}\r
-\r
-// file_to_char()\r
-\r
-int file_to_char(int file) {\r
-\r
- ASSERT(file>=0&&file<8);\r
-\r
- return 'a' + file;\r
-}\r
-\r
-// rank_to_char()\r
-\r
-int rank_to_char(int rank) {\r
-\r
- ASSERT(rank>=0&&rank<8);\r
-\r
- return '1' + rank;\r
-}\r
-\r
-// char_is_file()\r
-\r
-bool char_is_file(int c) {\r
-\r
- return c >= 'a' && c <= 'h';\r
-}\r
-\r
-// char_is_rank()\r
-\r
-bool char_is_rank(int c) {\r
-\r
- return c >= '1' && c <= '8';\r
-}\r
-\r
-// square_to_string()\r
-\r
-bool square_to_string(int square, char string[], int size) {\r
-\r
- ASSERT(square_is_ok(square));\r
- ASSERT(string!=NULL);\r
- ASSERT(size>=3);\r
-\r
- if (size < 3) return FALSE;\r
-\r
- string[0] = 'a' + square_file(square);\r
- string[1] = '1' + square_rank(square);\r
- string[2] = '\0';\r
-\r
- return TRUE;\r
-}\r
-\r
-// square_from_string()\r
-\r
-int square_from_string(const char string[]) {\r
-\r
- int file, rank;\r
-\r
- ASSERT(string!=NULL);\r
-\r
- if (string[0] < 'a' || string[0] > 'h') return SquareNone;\r
- if (string[1] < '1' || string[1] > '8') return SquareNone;\r
- if (string[2] != '\0') return SquareNone;\r
-\r
- file = file_from_char(string[0]);\r
- rank = rank_from_char(string[1]);\r
-\r
- return square_make(file,rank);\r
-}\r
-\r
-// end of square.cpp\r
-\r
+
+// square.c
+
+// includes
+
+#include "colour.h"
+#include "square.h"
+#include "util.h"
+
+// "constants"
+
+static const uint8 SquareFrom64[64] = {
+ A1, B1, C1, D1, E1, F1, G1, H1,
+ A2, B2, C2, D2, E2, F2, G2, H2,
+ A3, B3, C3, D3, E3, F3, G3, H3,
+ A4, B4, C4, D4, E4, F4, G4, H4,
+ A5, B5, C5, D5, E5, F5, G5, H5,
+ A6, B6, C6, D6, E6, F6, G6, H6,
+ A7, B7, C7, D7, E7, F7, G7, H7,
+ A8, B8, C8, D8, E8, F8, G8, H8,
+};
+
+// variables
+
+static sint8 SquareTo64[SquareNb];
+
+// functions
+
+// square_init()
+
+void square_init() {
+
+ int sq;
+
+ for (sq = 0; sq < SquareNb; sq++) SquareTo64[sq] = -1;
+
+ for (sq = 0; sq < 64; sq++) {
+ SquareTo64[SquareFrom64[sq]] = sq;
+ }
+}
+
+// square_is_ok()
+
+bool square_is_ok(int square) {
+
+ if (square < 0 || square >= SquareNb) return FALSE;
+
+ if (SquareTo64[square] < 0) return FALSE;
+
+ return TRUE;
+}
+
+// square_make()
+
+int square_make(int file, int rank) {
+
+ int sq_64;
+
+ ASSERT(file>=0&&file<8);
+ ASSERT(rank>=0&&rank<8);
+
+ sq_64 = (rank << 3) | file;
+
+ return square_from_64(sq_64);
+}
+
+// square_file()
+
+int square_file(int square) {
+
+ int file;
+
+ ASSERT(square_is_ok(square));
+
+ file = (square - 4) & 7;
+ ASSERT(file==(square_to_64(square)&7));
+
+ return file;
+}
+
+// square_rank()
+
+int square_rank(int square) {
+
+ int rank;
+
+ ASSERT(square_is_ok(square));
+
+ rank = (square >> 4) - 2;
+ ASSERT(rank==square_to_64(square)>>3);
+
+ return rank;
+}
+
+// square_side_rank()
+
+int square_side_rank(int square, int colour) {
+
+ int rank;
+
+ ASSERT(square_is_ok(square));
+ ASSERT(colour_is_ok(colour));
+
+ rank = square_rank(square);
+ if (colour_is_black(colour)) rank = 7-rank;
+
+ return rank;
+}
+
+// square_from_64()
+
+int square_from_64(int square) {
+
+ ASSERT(square>=0&&square<64);
+
+ return SquareFrom64[square];
+}
+
+// square_to_64()
+
+int square_to_64(int square) {
+
+ ASSERT(square_is_ok(square));
+
+ return SquareTo64[square];
+}
+
+// square_is_promote()
+
+bool square_is_promote(int square) {
+
+ int rank;
+
+ ASSERT(square_is_ok(square));
+
+ rank = square_rank(square);
+
+ return rank == Rank1 || rank == Rank8;
+}
+
+// square_ep_dual()
+
+int square_ep_dual(int square) {
+
+ ASSERT(square_is_ok(square));
+ ASSERT(square_rank(square)>=2&&square_rank(square)<=5);
+
+ return square ^ 16;
+}
+
+// square_colour()
+
+int square_colour(int square) {
+
+ ASSERT(square_is_ok(square));
+
+ return (square ^ (square >> 4)) & 1;
+}
+
+// file_from_char()
+
+int file_from_char(int c) {
+
+ ASSERT(c>='a'&&c<='h');
+
+ return c - 'a';
+}
+
+// rank_from_char()
+
+int rank_from_char(int c) {
+
+ ASSERT(c>='1'&&c<='8');
+
+ return c - '1';
+}
+
+// file_to_char()
+
+int file_to_char(int file) {
+
+ ASSERT(file>=0&&file<8);
+
+ return 'a' + file;
+}
+
+// rank_to_char()
+
+int rank_to_char(int rank) {
+
+ ASSERT(rank>=0&&rank<8);
+
+ return '1' + rank;
+}
+
+// char_is_file()
+
+bool char_is_file(int c) {
+
+ return c >= 'a' && c <= 'h';
+}
+
+// char_is_rank()
+
+bool char_is_rank(int c) {
+
+ return c >= '1' && c <= '8';
+}
+
+// square_to_string()
+
+bool square_to_string(int square, char string[], int size) {
+
+ ASSERT(square_is_ok(square));
+ ASSERT(string!=NULL);
+ ASSERT(size>=3);
+
+ if (size < 3) return FALSE;
+
+ string[0] = 'a' + square_file(square);
+ string[1] = '1' + square_rank(square);
+ string[2] = '\0';
+
+ return TRUE;
+}
+
+// square_from_string()
+
+int square_from_string(const char string[]) {
+
+ int file, rank;
+
+ ASSERT(string!=NULL);
+
+ if (string[0] < 'a' || string[0] > 'h') return SquareNone;
+ if (string[1] < '1' || string[1] > '8') return SquareNone;
+ if (string[2] != '\0') return SquareNone;
+
+ file = file_from_char(string[0]);
+ rank = rank_from_char(string[1]);
+
+ return square_make(file,rank);
+}
+
+// end of square.cpp
+