src/chess/pgn.h

Thu, 03 Sep 2026 12:13:05 +0200

author
Mike Becker <universe@uap-core.de>
date
Thu, 03 Sep 2026 12:13:05 +0200
changeset 214
31d73d150c76
parent 209
dc4f34426c66
permissions
-rw-r--r--

make all should really build all (including the tests)

we removed the tests from the all-target initially
because they will cause warnings with compilers not
supporting C23

but we should not care too much about this

50
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
1 /*
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
3 *
55
54ea19938d57 updated copyright and version info
Mike Becker <universe@uap-core.de>
parents: 54
diff changeset
4 * Copyright 2016 Mike Becker. All rights reserved.
50
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
5 *
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
6 * Redistribution and use in source and binary forms, with or without
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
8 *
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer.
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
11 *
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
15 *
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
26 * POSSIBILITY OF SUCH DAMAGE.
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
27 *
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
28 */
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
29
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
30
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
31 #ifndef PGN_H
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
32 #define PGN_H
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
33
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
34 #include "rules.h"
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
35 #include <stdio.h>
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
36
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
37 #ifdef __cplusplus
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
38 extern "C" {
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
39 #endif
149
ea2448961441 add 150 example games to test PGN parser
Mike Becker <universe@uap-core.de>
parents: 140
diff changeset
40
209
dc4f34426c66 improve error reporting in PGN parser - resolves #958
Mike Becker <universe@uap-core.de>
parents: 194
diff changeset
41 enum pgn_error_code {
149
ea2448961441 add 150 example games to test PGN parser
Mike Becker <universe@uap-core.de>
parents: 140
diff changeset
42 pgn_no_error = 0,
ea2448961441 add 150 example games to test PGN parser
Mike Becker <universe@uap-core.de>
parents: 140
diff changeset
43 pgn_error_missing_quote,
ea2448961441 add 150 example games to test PGN parser
Mike Becker <universe@uap-core.de>
parents: 140
diff changeset
44 pgn_error_missing_bracket,
ea2448961441 add 150 example games to test PGN parser
Mike Becker <universe@uap-core.de>
parents: 140
diff changeset
45 pgn_error_missing_brace,
ea2448961441 add 150 example games to test PGN parser
Mike Becker <universe@uap-core.de>
parents: 140
diff changeset
46 pgn_error_missing_dot,
ea2448961441 add 150 example games to test PGN parser
Mike Becker <universe@uap-core.de>
parents: 140
diff changeset
47 pgn_error_result_syntax,
ea2448961441 add 150 example games to test PGN parser
Mike Becker <universe@uap-core.de>
parents: 140
diff changeset
48 pgn_error_result_mismatch,
ea2448961441 add 150 example games to test PGN parser
Mike Becker <universe@uap-core.de>
parents: 140
diff changeset
49 pgn_error_unexpected_eof,
209
dc4f34426c66 improve error reporting in PGN parser - resolves #958
Mike Becker <universe@uap-core.de>
parents: 194
diff changeset
50 pgn_error_move,
149
ea2448961441 add 150 example games to test PGN parser
Mike Becker <universe@uap-core.de>
parents: 140
diff changeset
51 };
ea2448961441 add 150 example games to test PGN parser
Mike Becker <universe@uap-core.de>
parents: 140
diff changeset
52
209
dc4f34426c66 improve error reporting in PGN parser - resolves #958
Mike Becker <universe@uap-core.de>
parents: 194
diff changeset
53 typedef struct {
dc4f34426c66 improve error reporting in PGN parser - resolves #958
Mike Becker <universe@uap-core.de>
parents: 194
diff changeset
54 size_t position;
dc4f34426c66 improve error reporting in PGN parser - resolves #958
Mike Becker <universe@uap-core.de>
parents: 194
diff changeset
55 enum pgn_error_code code;
dc4f34426c66 improve error reporting in PGN parser - resolves #958
Mike Becker <universe@uap-core.de>
parents: 194
diff changeset
56 int move_error; // TODO: should probably also be an enum eventually
dc4f34426c66 improve error reporting in PGN parser - resolves #958
Mike Becker <universe@uap-core.de>
parents: 194
diff changeset
57 unsigned move_half_number;
dc4f34426c66 improve error reporting in PGN parser - resolves #958
Mike Becker <universe@uap-core.de>
parents: 194
diff changeset
58 } pgn_result;
dc4f34426c66 improve error reporting in PGN parser - resolves #958
Mike Becker <universe@uap-core.de>
parents: 194
diff changeset
59
dc4f34426c66 improve error reporting in PGN parser - resolves #958
Mike Becker <universe@uap-core.de>
parents: 194
diff changeset
60
dc4f34426c66 improve error reporting in PGN parser - resolves #958
Mike Becker <universe@uap-core.de>
parents: 194
diff changeset
61 pgn_result read_pgn(FILE *stream, GameState *gamestate);
178
724e8acff6f8 add create_pgn() function and use it in test-real-pgn
Mike Becker <universe@uap-core.de>
parents: 150
diff changeset
62 int write_pgn(FILE* stream, const GameState *gamestate, bool export_comments);
724e8acff6f8 add create_pgn() function and use it in test-real-pgn
Mike Becker <universe@uap-core.de>
parents: 150
diff changeset
63
209
dc4f34426c66 improve error reporting in PGN parser - resolves #958
Mike Becker <universe@uap-core.de>
parents: 194
diff changeset
64 pgn_result parse_pgn(const char *data, GameState *gamestate);
178
724e8acff6f8 add create_pgn() function and use it in test-real-pgn
Mike Becker <universe@uap-core.de>
parents: 150
diff changeset
65 char *create_pgn(const GameState *gamestate, bool export_comments);
50
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
66
209
dc4f34426c66 improve error reporting in PGN parser - resolves #958
Mike Becker <universe@uap-core.de>
parents: 194
diff changeset
67 // TODO: this function looks a bit misplaced
194
619f07c95894 rename Row to Rank
Mike Becker <universe@uap-core.de>
parents: 178
diff changeset
68 const char *pgn_player_name(const GameState *gamestate, Color color);
127
7258a46bf5ae ask for player names during PGN export
Mike Becker <universe@uap-core.de>
parents: 117
diff changeset
69
60
0c50aac49e55 adds error messages to PGN reader
Mike Becker <universe@uap-core.de>
parents: 59
diff changeset
70 const char* pgn_error_str(int code);
0c50aac49e55 adds error messages to PGN reader
Mike Becker <universe@uap-core.de>
parents: 59
diff changeset
71
50
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
72 #ifdef __cplusplus
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
73 }
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
74 #endif
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
75
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
76 #endif /* PGN_H */
41017d0a72c5 added pgn parser and writer (without comment support yet) + minor refactorings
Mike Becker <universe@uap-core.de>
parents:
diff changeset
77

mercurial