Quick Start
This guide shows three small ways to consume an installed libscid release:
direct cc, a simple Makefile, and CMake.
The examples use a local installation directory named install/libscid.
See Installation if libscid is not installed yet.
Example Program
Create main.c:
#include <scid/scid.h>
#include <stdio.h>
int
main(void)
{
const char* standard_fen = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/"
"RNBQKBNR w KQkq - 0 1";
scid_position* position = NULL;
int is_start = 0;
if (scid_position_create_from_fen(standard_fen, &position) != SCID_OK)
{
return 1;
}
if (scid_position_is_start(position, &is_start) != SCID_OK)
{
scid_position_free(position);
return 1;
}
scid_position_free(position);
if (!is_start)
{
return 1;
}
puts("libscid is available");
return 0;
}
The public header is scid/scid.h, and the installed CMake target is
LibScid::LibScid.
PGN Workflow
The PGN-facing game API is built from a few foundational calls:
- Create a start position with
scid_position_create_from_fen(). - Create a blank game with
scid_game_create_blank()or parse moves and tags withscid_game_create(). - Create a
scid_game_cursorfrom the game. Cursor navigation is immutable: functions such asscid_game_cursor_next()return a new cursor through anout_...parameter. - Edit the game at a cursor, or merge another game's moves with
scid_game_merge_moves(). - Export with
scid_game_to_pgn(game, options, ...). PassNULLfor the default complete PGN export, or pass ascid_game_pgn_optionsobject to control symbolic NAGs, supplemental tags, comments, variations and line width.
See Examples and Recipes for complete programs that parse, author, navigate, mutate and export PGN.
With cc
cc -std=c11 \
-I install/libscid/include \
main.c \
-L install/libscid/lib \
-Wl,-rpath,install/libscid/lib \
-lscid \
-o libscid-hello
./libscid-hello
For a non-standard install prefix, replace install/libscid with the directory
where the release archive was extracted or where cmake --install installed
the library.
With Make
Create Makefile:
CC ?= cc
LIBSCID_PREFIX ?= install/libscid
CFLAGS += -std=c11 -I$(LIBSCID_PREFIX)/include
LDFLAGS += -L$(LIBSCID_PREFIX)/lib -Wl,-rpath,$(LIBSCID_PREFIX)/lib
LDLIBS += -lscid
libscid-hello: main.c
$(CC) $(CFLAGS) $< $(LDFLAGS) $(LDLIBS) -o $@
.PHONY: clean
clean:
rm -f libscid-hello
Build and run:
Use make LIBSCID_PREFIX=/path/to/libscid if libscid is installed somewhere
else.
With CMake
Create CMakeLists.txt:
cmake_minimum_required( VERSION 3.23 )
project( libscid-hello LANGUAGES C )
find_package( libscid CONFIG REQUIRED )
add_executable( libscid-hello main.c )
set_target_properties(
libscid-hello
PROPERTIES
C_STANDARD 11
C_STANDARD_REQUIRED ON
C_EXTENSIONS OFF )
target_link_libraries( libscid-hello PRIVATE LibScid::LibScid )
Configure, build and run: