diff --git a/.gitignore b/.gitignore index 18adb28..3cd6d16 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ *.dSYM main +build diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..ebf8400 --- /dev/null +++ b/Makefile @@ -0,0 +1,22 @@ +CC = gcc +CFLAGS = -Wall -g +SRCDIR = src +BUILDDIR = build +TARGET = main + +SOURCES = $(wildcard $(SRCDIR)/*.c) +OBJECTS = $(patsubst $(SRCDIR)/%.c, $(BUILDDIR)/%.o, $(SOURCES)) + +all: $(BUILDDIR)/$(TARGET) + +$(BUILDDIR)/$(TARGET): $(OBJECTS) + $(CC) $(CFLAGS) -o $@ $^ + +$(BUILDDIR)/%.o: $(SRCDIR)/%.c + @mkdir -p $(BUILDDIR) + $(CC) $(CFLAGS) -c -o $@ $< + +clean: + rm -rf $(BUILDDIR)/* + +.PHONY: clean diff --git a/src/board.c b/src/board.c new file mode 100644 index 0000000..9850daf --- /dev/null +++ b/src/board.c @@ -0,0 +1,6 @@ +#include "board.h" + +PieceColors piece_getColor(const Piece piece) { return Black & piece; } +Piece piece_getColorlessPiece(const Piece piece) { + return piece_getColor(piece) ^ piece; +} diff --git a/src/board.h b/src/board.h new file mode 100644 index 0000000..0c22a98 --- /dev/null +++ b/src/board.h @@ -0,0 +1,18 @@ +#ifndef __BOARD_HEADER +#include "common.h" +typedef int Piece; +typedef enum { Pawn = 0, Knight, Bishop, Rook, Queen, King } Pieces; +typedef enum { White = 0, Black = 8 } PieceColors; + +typedef struct { + Piece piece; + uint row; + uint column; +} Square; + +typedef Square Board[64]; + +PieceColors piece_getColor(const Piece piece); +Piece piece_getColorlessPiece(const Piece piece); + +#endif // !__BOARD_HEADER diff --git a/src/common.c b/src/common.c new file mode 100644 index 0000000..4e1b0b4 --- /dev/null +++ b/src/common.c @@ -0,0 +1,13 @@ +#include "common.h" + +char chrToLower(char chr) { + if (chr >= 'A' && chr <= 'Z') + return chr + 32; + return chr; +} + +char chrToUpper(char chr) { + if (chr >= 'a' && chr <= 'z') + return chr - 32; + return chr; +} diff --git a/src/common.h b/src/common.h new file mode 100644 index 0000000..ee70eac --- /dev/null +++ b/src/common.h @@ -0,0 +1,9 @@ +#ifndef __COMMON_HEADER +#include +#include +typedef unsigned int uint; + +char chrToLower(char chr); +char chrToUpper(char chr); + +#endif // !__COMMON_HEADER diff --git a/main.c b/src/fen.c similarity index 74% rename from main.c rename to src/fen.c index d0e235e..9fc4218 100644 --- a/main.c +++ b/src/fen.c @@ -1,37 +1,4 @@ -#include -#include - -typedef unsigned int uint; -typedef int Piece; -typedef char FEN[75]; -typedef enum { Pawn = 0, Knight, Bishop, Rook, Queen, King } Pieces; -typedef enum { White = 0, Black = 8 } PieceColors; - -typedef struct { - Piece piece; - uint row; - uint column; -} Square; - -typedef Square Board[64]; - -char chrToLower(char chr) { - if (chr >= 'A' && chr <= 'Z') - return chr + 32; - return chr; -} - -char chrToUpper(char chr) { - if (chr >= 'a' && chr <= 'z') - return chr - 32; - return chr; -} - -PieceColors piece_getColor(const Piece piece) { return Black & piece; } -Piece piece_getColorlessPiece(const Piece piece) { - return piece_getColor(piece) ^ piece; -} - +#include "fen.h" // Starter fen: rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR void fen_toBoard(const FEN fen, Board board) { uint i = 0; @@ -48,7 +15,7 @@ void fen_toBoard(const FEN fen, Board board) { // Upper case or lower case bool is_upper_case; if ((is_upper_case = fen_char > 'A' && fen_char < 'Z') || - fen_char > 'a' && fen_char < 'z') { + (fen_char > 'a' && fen_char < 'z')) { char lowered_char = chrToLower(fen_char); Pieces p; switch (lowered_char) { @@ -149,12 +116,3 @@ void fen_fromBoard(const Board board, FEN fen) { fen[fen_i++] = fen_char; } } - -int main() { - Board board; - FEN fen = "rnbqkbnr/ppppp1pp/5p2/8/8/8/PPPPPPPP/RNBQKBNR"; - fen_toBoard(fen, board); - fen_fromBoard(board, fen); - printf("%s", fen); - return 0; -} diff --git a/src/fen.h b/src/fen.h new file mode 100644 index 0000000..aa2c653 --- /dev/null +++ b/src/fen.h @@ -0,0 +1,9 @@ +#ifndef __FEN_HEADER +#include "board.h" +#include "common.h" + +typedef char FEN[75]; +void fen_fromBoard(const Board board, FEN fen); +void fen_toBoard(const FEN fen, Board board); + +#endif // !__FEN_HEADER diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..5137f03 --- /dev/null +++ b/src/main.c @@ -0,0 +1,10 @@ +#include "fen.h" + +int main() { + Board board; + FEN fen = "rnbqkbnr/ppppp1pp/5p2/8/8/8/PPPPPPPP/RNBQKBNR"; + fen_toBoard(fen, board); + fen_fromBoard(board, fen); + printf("%s", fen); + return 0; +}