diff options
-rw-r--r-- | include/coordinate.h | 12 | ||||
-rw-r--r-- | include/types.h | 5 | ||||
-rw-r--r-- | lib/coordinate.c | 31 |
3 files changed, 48 insertions, 0 deletions
diff --git a/include/coordinate.h b/include/coordinate.h new file mode 100644 index 0000000..52e7cf0 --- /dev/null +++ b/include/coordinate.h @@ -0,0 +1,12 @@ +#ifndef _COORD +#define _COORD + +#include "types.h" + +/* + * This functions will NOT alloc memory for the Coord pointer + */ +int coord_init(Coord*, char, char); +int coord_init_from_str(Coord*, char*); + +#endif diff --git a/include/types.h b/include/types.h index 7618916..07e63d3 100644 --- a/include/types.h +++ b/include/types.h @@ -7,6 +7,11 @@ typedef enum {WHITE, BLACK} Color; typedef enum {PAWN, ROCK, KNIGHT, BISHOP, QUEEN, KING} PieceType; typedef struct { + char row; + char col; +} Coord; + +typedef struct { Color color; PieceType type; } Piece; diff --git a/lib/coordinate.c b/lib/coordinate.c new file mode 100644 index 0000000..2dc0215 --- /dev/null +++ b/lib/coordinate.c @@ -0,0 +1,31 @@ +#include <ctype.h> +#include <string.h> + +#include "coordinate.h" + +static int _valid_coord(char col, char row) { + if (col >= 'a' && col <= 'h' && row >= '1' && row <= '8') + return 0; + + return 1; +} + +int coord_init(Coord* c, char col, char row) { + char lower_col = tolower(col); + char lower_row = tolower(row); + + if (! _valid_coord(lower_col, lower_row)) + return 1; + + c->row = row; + c->col = col; + + return 0; +} + +int coord_init_from_str(Coord* c, char* s) { + if (strlen(s) != 2) + return 1; + + return coord_init(c, s[0], s[1]); +} |