The Oscar Chess Library (OCL) is a set of ANSI C source files which implement a library for general, low-level chess programming tasks. It will be released under the GNU Public License for all to use without charge. At present, the OCL consists of about 6K+ lines of code contained in one C file and one header file.
I hope to have this ready in a week or two.
Project priorities in descending order:
1) Correctness
2) Standards adherence
3) Generality
4) Ease of use
5) Speed
Some scalar types:
Code: Select all
OclColor OclPiece OclMan OclFile OclRank OclSq OclMove OclPosTerm
Code: Select all
OclPosition OclMoveVec OclHash
Code: Select all
void OclInit(void); // One time library initialization
void OclTerm(void); // One time library termination
OclPosition *OclNewPosition(void); // Position instance constructor
void OclDeletePosition(OclPosition *objptr); // Position instance destructor
OclPosition *OclPositionCopy(OclPosition *objptr); // Position instance copy constructor
void OclPositionEncode(OclPosition *objptr, char *fenstr); // Position encoder (FEN)
bool OclPositionDecode(OclPosition *objptr, char *fenstr); // Position decoder (FEN)
void OclPositionReset(OclPosition *objptr); // Reset a position to the initial array
unsigned int OclPositionCountMoves(OclPosition *objptr); // Returns number of moves in a position
unsigned int OclPositionGenerate(OclPosition *objptr, OclMoveVec *movevec); // Move generation for a position
void OclPositionExecute(OclPosition *objptr, OclMove move); // Move execution
void OclPositionRetract(OclPosition *objptr); // Move retraction
bool OclPositionIsCheck(OclPosition *objptr); // Position status: in check
bool OclPositionIsCheckmate(OclPosition *objptr); // Position status: checkmated
bool OclPositionIsStalemate(OclPosition *objptr); // Position status: stalemated
bool OclPositionIsFiftyMove(OclPosition *objptr); // Position status: fifty move draw
bool OclPositionIsInsufficient(OclPosition *objptr); // Position status: insufficient material draw
bool OclPositionIsThreeFold(OclPosition *objptr); // Position status: threefold repetition draw
bool OclPositionIsMate(OclPosition *objptr); // Position status: checkmated or stalemated
bool OclPositionIsDraw(OclPosition *objptr); // Position status: drawn (50m, insufficienct, or 3rep)
bool OclPositionIsGameOver(OclPosition *objptr); // Position status: mated or drawn
OclPosTerm OclPositionCalcPosTerm(OclPosition *objptr); // Calculate positon termination (if any)
unsigned long long int OclPositionPerft(OclPosition *objptr. unsigned int draft); // Simple perft
void OclMoveEncode(OclMove *objptr, char *sanstr); // Move encoder (SAN)
bool OclMoveDecode(OclMove *objptr, char *sanstr, OclPosition *objptr); // Move decoder (SAN)
void OclMoveEncodeUCI(OclMove *objptr, char *ucistr); // Move encoder, UCI format
bool OclMoveDecodeUCI(OclMove *objptr, char *ucistr, OclPosition *objptr); // Move decoder, UCI+others format