FS#12756 by Marek Salaba - update Czech translation
[maemo-rb.git] / apps / plugins / goban / sgf.h
blobd2aca81ebbb3c50f817f764e4b1d5ed70c6439fc
1 /***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
10 * Copyright (C) 2007-2009 Joshua Simmons <mud at majidejima dot com>
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
20 ****************************************************************************/
22 #ifndef GOBAN_SGF_H
23 #define GOBAN_SGF_H
25 #include "types.h"
27 /* Play one move. If play_mode is not PLAY_MODE_FORCE, this will fail if
28 an illegal move is played (plays by the "wrong" color are not counted
29 as illegal. pos may be a POS() on the board, or PASS_POS. Returns true
30 if the move was successfully played. */
31 bool play_move_sgf (unsigned short pos, unsigned char color);
33 /* Add a stone to the board, or remove one if color == EMPTY. returns true
34 if the stone is successfully added/removed (will return false if there
35 is nothing to add/remove there, eg. when adding a black stone when a
36 black stone is already there) */
37 bool add_stone_sgf (unsigned short pos, unsigned char color);
39 /* Add a mark to the board at the current node pos must be on the board
40 Returns false on failure. */
41 bool add_mark_sgf (unsigned short pos, enum prop_type_t type);
43 /* Returns true if there are more nodes before or after (respectively) the
44 current node */
45 bool has_prev_nodes_sgf (void);
46 bool has_more_nodes_sgf (void);
48 /* When at the start of a branch, this will follow one of the branches.
49 Variations are numbered from 0. Returns false on failure. */
50 bool go_to_variation_sgf (unsigned int num);
52 /* Get the number of variations at the current move (will be 1 unless the
53 current node is a branch node */
54 int num_variations_sgf (void);
56 /* Calls into the display subsystem to mark any child variations of the
57 current node. Returns the number of variations marked */
58 int mark_child_variations_sgf (void);
60 /* Calls into the display subsystem to pass marks to be drawn on the board
61 for the current node. Does not do child variation marks. */
62 void set_all_marks_sgf (void);
64 /* Add a child regardless of if there is a child node already or not.
65 *variation_number will be set to the variation number of the added
66 variation Returns the handle of the new node. */
67 int add_child_sgf (int *variation_number);
69 /* Goes to the next variation after the current one if the current node is
70 a branch node. Returns the number of the new variation */
71 int next_variation_sgf (void);
73 /* ints in these are handles to storage locations, bools mean failure if
74 false */
75 int add_prop_sgf (int node, enum prop_type_t type, union prop_data_t data);
76 bool delete_prop_sgf (int node, enum prop_type_t type);
77 bool delete_prop_handle_sgf (int node, int prop);
78 int get_prop_sgf (int node, enum prop_type_t type, int *previous_prop);
80 /* If there is already a property of the same type, it will be
81 overwritten, otherwise a new one is added Returns the handle of the
82 added property. */
83 int add_or_set_prop_sgf (int node, enum prop_type_t type,
84 union prop_data_t data);
86 /* Find a property of similar type with the same position in the current
87 node. (for example, if type == PROP_ADD_BLACK and pos == POS(0, 0), it
88 will find a prop with type == PROP_ADD_WHITE and pos == POS(0, 0), but
89 not any of the mark types with pos == POS(0, 0). returns the handle of
90 the found property */
91 int get_prop_pos_sgf (enum prop_type_t type, union prop_data_t data);
93 /* If there is a move in the current node, return its handle. */
94 int get_move_sgf (void);
96 /* If there is a comment in the current node, this will read it out into
97 the buffer. Returns the size of the comment read (including the '\0').
98 The buffer can be treated as a string. */
99 int read_comment_sgf (char *buffer, size_t buffer_size);
101 /* Write a comment property to the current node. This will overwrite any
102 comment that currently exists. Returns the number of characters
103 written. */
104 int write_comment_sgf (char *string);
106 /* Move forward or back in the SGF tree, following any chosen variations
107 (variations are "chosen" every time you go through one) These will
108 update the board showing any moves/added or removed stones/ marks/etc.
109 . */
110 bool undo_node_sgf (void);
111 bool redo_node_sgf (void);
113 /* Returns true if the SGF property type is handled in some way. For
114 * real SGF properties (in other words, ones that can actually be read from
115 * a file, not psuedo-properties), if they are unhandled that just means that
116 * we copy them verbatim from the old file to the new, keeping them with the
117 * correct node
119 bool is_handled_sgf (enum prop_type_t type);
121 /* Sets up the handicap on the board (based on header.handicap) */
122 void setup_handicap_sgf (void);
124 /* Goes to the start of a handicap game. */
125 void goto_handicap_start_sgf (void);
127 /* Must be called after setting up a new game, either blank or loaded from
128 a file. (Picks a place to put the header properties if none was found,
129 and may do other stuff) */
130 bool post_game_setup_sgf (void);
132 /* Get the child that matches the given move.
134 * Returns the variation number of the matching move, or negative if
135 * none is found.
137 int get_matching_child_sgf (unsigned short pos, unsigned char color);
139 #define NO_NODE (-1)
140 #define NO_PROP (-1)
142 /* These flags are used in undo handling for moves and added/removed
143 stones */
144 #define FLAG_ORIG_EMPTY ((uint8_t) (1 << 7))
145 #define FLAG_ORIG_BLACK ((uint8_t) (1 << 6))
146 #define FLAG_KO_THREAT ((uint8_t) (1 << 5))
147 #define FLAG_SELF_CAP ((uint8_t) (1 << 4))
148 #define FLAG_W_CAP ((uint8_t) (1 << 3))
149 #define FLAG_E_CAP ((uint8_t) (1 << 2))
150 #define FLAG_S_CAP ((uint8_t) (1 << 1))
151 #define FLAG_N_CAP ((uint8_t) (1))
153 #define MIN_STORAGE_BUFFER_SIZE 200
154 #define UNHANDLED_PROP_LIST_FILE (PLUGIN_GAMES_DIR "/gbn_misc.bin")
156 /* Handle of the current node, the start of the game, and the root
157 * of the tree
159 extern int current_node;
160 extern int tree_head;
161 extern int start_node;
163 extern int sgf_fd;
164 extern int unhandled_fd;
166 /* true if the header location has already been marked in the current
167 game, false otherwise */
168 extern bool header_marked;
170 #endif