From 4d5958f78c5741031f552b26cd0cb1da5fdab18d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Benencia?= Date: Sat, 28 Mar 2015 12:15:30 -0300 Subject: add a Coord type and init functions --- include/coordinate.h | 12 ++++++++++++ include/types.h | 5 +++++ lib/coordinate.c | 31 +++++++++++++++++++++++++++++++ 3 files changed, 48 insertions(+) create mode 100644 include/coordinate.h create mode 100644 lib/coordinate.c 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 @@ -6,6 +6,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; 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 +#include + +#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]); +} -- cgit v1.2.3