fix red
[kugel-rb.git] / apps / plugins / chessbox / chessbox_pgn.h
blobd292e6b40a3db77e301654fb91876f77acc32f0d
1 /***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
10 * Copyright (C) 2007 Mauricio Peccorini
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 #include "plugin.h"
23 #include "gnuchess.h"
25 /* button definitions */
26 #if (CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD) || \
27 (CONFIG_KEYPAD == IPOD_1G2G_PAD)
28 #define CB_SELECT BUTTON_SELECT
29 #define CB_UP BUTTON_MENU
30 #define CB_DOWN BUTTON_PLAY
31 #define CB_LEFT BUTTON_LEFT
32 #define CB_RIGHT BUTTON_RIGHT
33 #define CB_PLAY (BUTTON_SELECT | BUTTON_PLAY)
34 #define CB_LEVEL (BUTTON_SELECT | BUTTON_RIGHT)
35 #define CB_RESTART (BUTTON_SELECT | BUTTON_LEFT)
36 #define CB_MENU (BUTTON_SELECT | BUTTON_MENU)
38 #define CB_SCROLL_UP (BUTTON_SCROLL_FWD|BUTTON_REPEAT)
39 #define CB_SCROLL_DOWN (BUTTON_SCROLL_BACK|BUTTON_REPEAT)
40 #define CB_SCROLL_LEFT (BUTTON_LEFT|BUTTON_REPEAT)
41 #define CB_SCROLL_RIGHT (BUTTON_RIGHT|BUTTON_REPEAT)
43 #elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD
44 #define CB_SELECT BUTTON_SELECT
45 #define CB_UP BUTTON_UP
46 #define CB_DOWN BUTTON_DOWN
47 #define CB_LEFT BUTTON_LEFT
48 #define CB_RIGHT BUTTON_RIGHT
49 #define CB_PLAY BUTTON_PLAY
50 #define CB_LEVEL BUTTON_REC
51 #define CB_RESTART (BUTTON_SELECT | BUTTON_PLAY)
52 #define CB_MENU BUTTON_POWER
54 #define CB_SCROLL_UP (BUTTON_UP|BUTTON_REPEAT)
55 #define CB_SCROLL_DOWN (BUTTON_DOWN|BUTTON_REPEAT)
56 #define CB_SCROLL_LEFT (BUTTON_LEFT|BUTTON_REPEAT)
57 #define CB_SCROLL_RIGHT (BUTTON_RIGHT|BUTTON_REPEAT)
59 #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD)
60 #define CB_SELECT BUTTON_SELECT
61 #define CB_UP BUTTON_UP
62 #define CB_DOWN BUTTON_DOWN
63 #define CB_LEFT BUTTON_LEFT
64 #define CB_RIGHT BUTTON_RIGHT
65 #define CB_PLAY BUTTON_ON
66 #define CB_LEVEL BUTTON_MODE
67 #define CB_RESTART BUTTON_REC
68 #define CB_MENU BUTTON_OFF
70 #define CB_RC_QUIT BUTTON_RC_STOP
72 #define CB_SCROLL_UP (BUTTON_UP|BUTTON_REPEAT)
73 #define CB_SCROLL_DOWN (BUTTON_DOWN|BUTTON_REPEAT)
74 #define CB_SCROLL_LEFT (BUTTON_LEFT|BUTTON_REPEAT)
75 #define CB_SCROLL_RIGHT (BUTTON_RIGHT|BUTTON_REPEAT)
77 #elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD
78 #define CB_SELECT BUTTON_SELECT
79 #define CB_UP BUTTON_UP
80 #define CB_DOWN BUTTON_DOWN
81 #define CB_LEFT BUTTON_LEFT
82 #define CB_RIGHT BUTTON_RIGHT
83 #define CB_PLAY BUTTON_PLAY
84 #define CB_LEVEL BUTTON_EQ
85 #define CB_MENU BUTTON_MODE
87 #define CB_SCROLL_UP (BUTTON_UP|BUTTON_REPEAT)
88 #define CB_SCROLL_DOWN (BUTTON_DOWN|BUTTON_REPEAT)
89 #define CB_SCROLL_LEFT (BUTTON_LEFT|BUTTON_REPEAT)
90 #define CB_SCROLL_RIGHT (BUTTON_RIGHT|BUTTON_REPEAT)
92 #elif CONFIG_KEYPAD == RECORDER_PAD
93 #define CB_SELECT BUTTON_PLAY
94 #define CB_UP BUTTON_UP
95 #define CB_DOWN BUTTON_DOWN
96 #define CB_LEFT BUTTON_LEFT
97 #define CB_RIGHT BUTTON_RIGHT
98 #define CB_PLAY BUTTON_ON
99 #define CB_LEVEL BUTTON_F1
100 #define CB_RESTART BUTTON_F3
101 #define CB_MENU BUTTON_OFF
103 #define CB_SCROLL_UP (BUTTON_UP|BUTTON_REPEAT)
104 #define CB_SCROLL_DOWN (BUTTON_DOWN|BUTTON_REPEAT)
105 #define CB_SCROLL_LEFT (BUTTON_LEFT|BUTTON_REPEAT)
106 #define CB_SCROLL_RIGHT (BUTTON_RIGHT|BUTTON_REPEAT)
108 #elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
109 #define CB_SELECT BUTTON_SELECT
110 #define CB_UP BUTTON_UP
111 #define CB_DOWN BUTTON_DOWN
112 #define CB_LEFT BUTTON_LEFT
113 #define CB_RIGHT BUTTON_RIGHT
114 #define CB_PLAY BUTTON_ON
115 #define CB_LEVEL BUTTON_F1
116 #define CB_RESTART BUTTON_F3
117 #define CB_MENU BUTTON_OFF
119 #define CB_SCROLL_UP (BUTTON_UP|BUTTON_REPEAT)
120 #define CB_SCROLL_DOWN (BUTTON_DOWN|BUTTON_REPEAT)
121 #define CB_SCROLL_LEFT (BUTTON_LEFT|BUTTON_REPEAT)
122 #define CB_SCROLL_RIGHT (BUTTON_RIGHT|BUTTON_REPEAT)
124 #elif CONFIG_KEYPAD == ONDIO_PAD
125 #define CB_SELECT_PRE BUTTON_MENU
126 #define CB_SELECT (BUTTON_MENU|BUTTON_REL)
127 #define CB_UP BUTTON_UP
128 #define CB_DOWN BUTTON_DOWN
129 #define CB_LEFT BUTTON_LEFT
130 #define CB_RIGHT BUTTON_RIGHT
131 #define CB_PLAY_PRE BUTTON_MENU
132 #define CB_PLAY (BUTTON_MENU|BUTTON_REPEAT)
133 #define CB_LEVEL (BUTTON_MENU|BUTTON_OFF)
134 #define CB_RESTART (BUTTON_MENU|BUTTON_LEFT)
135 #define CB_MENU BUTTON_OFF
137 #define CB_SCROLL_UP (BUTTON_UP|BUTTON_REPEAT)
138 #define CB_SCROLL_DOWN (BUTTON_DOWN|BUTTON_REPEAT)
139 #define CB_SCROLL_LEFT (BUTTON_LEFT|BUTTON_REPEAT)
140 #define CB_SCROLL_RIGHT (BUTTON_RIGHT|BUTTON_REPEAT)
142 #elif (CONFIG_KEYPAD == GIGABEAT_PAD)
143 #define CB_SELECT BUTTON_SELECT
144 #define CB_UP BUTTON_UP
145 #define CB_DOWN BUTTON_DOWN
146 #define CB_LEFT BUTTON_LEFT
147 #define CB_RIGHT BUTTON_RIGHT
148 #define CB_PLAY BUTTON_A
149 #define CB_LEVEL BUTTON_MENU
150 #define CB_MENU BUTTON_POWER
152 #define CB_SCROLL_UP (BUTTON_UP|BUTTON_REPEAT)
153 #define CB_SCROLL_DOWN (BUTTON_DOWN|BUTTON_REPEAT)
154 #define CB_SCROLL_LEFT (BUTTON_LEFT|BUTTON_REPEAT)
155 #define CB_SCROLL_RIGHT (BUTTON_RIGHT|BUTTON_REPEAT)
157 #elif (CONFIG_KEYPAD == GIGABEAT_S_PAD)
158 #define CB_SELECT BUTTON_SELECT
159 #define CB_UP BUTTON_UP
160 #define CB_DOWN BUTTON_DOWN
161 #define CB_LEFT BUTTON_LEFT
162 #define CB_RIGHT BUTTON_RIGHT
163 #define CB_PLAY BUTTON_PLAY
164 #define CB_LEVEL BUTTON_MENU
165 #define CB_MENU BUTTON_POWER
167 #define CB_SCROLL_UP (BUTTON_UP|BUTTON_REPEAT)
168 #define CB_SCROLL_DOWN (BUTTON_DOWN|BUTTON_REPEAT)
169 #define CB_SCROLL_LEFT (BUTTON_LEFT|BUTTON_REPEAT)
170 #define CB_SCROLL_RIGHT (BUTTON_RIGHT|BUTTON_REPEAT)
172 #elif CONFIG_KEYPAD == IRIVER_H10_PAD
173 #define CB_SELECT BUTTON_REW
174 #define CB_UP BUTTON_SCROLL_UP
175 #define CB_DOWN BUTTON_SCROLL_DOWN
176 #define CB_LEFT BUTTON_LEFT
177 #define CB_RIGHT BUTTON_RIGHT
178 #define CB_PLAY BUTTON_PLAY
179 #define CB_LEVEL BUTTON_FF
180 #define CB_RESTART (BUTTON_REW | BUTTON_PLAY)
181 #define CB_MENU BUTTON_POWER
183 #define CB_SCROLL_UP (BUTTON_SCROLL_BACK|BUTTON_REPEAT)
184 #define CB_SCROLL_DOWN (BUTTON_SCROLL_FWD|BUTTON_REPEAT)
185 #define CB_SCROLL_LEFT (BUTTON_LEFT|BUTTON_REPEAT)
186 #define CB_SCROLL_RIGHT (BUTTON_RIGHT|BUTTON_REPEAT)
188 #elif CONFIG_KEYPAD == SANSA_E200_PAD
189 #define CB_SELECT BUTTON_SELECT
190 #define CB_UP BUTTON_UP
191 #define CB_DOWN BUTTON_DOWN
192 #define CB_LEFT BUTTON_LEFT
193 #define CB_RIGHT BUTTON_RIGHT
194 #define CB_PLAY (BUTTON_SELECT | BUTTON_RIGHT)
195 #define CB_LEVEL BUTTON_REC
196 #define CB_RESTART (BUTTON_SELECT | BUTTON_REPEAT)
197 #define CB_MENU BUTTON_POWER
199 #define CB_SCROLL_UP (BUTTON_SCROLL_UP|BUTTON_REPEAT)
200 #define CB_SCROLL_DOWN (BUTTON_SCROLL_DOWN|BUTTON_REPEAT)
201 #define CB_SCROLL_LEFT (BUTTON_LEFT|BUTTON_REPEAT)
202 #define CB_SCROLL_RIGHT (BUTTON_RIGHT|BUTTON_REPEAT)
204 #elif CONFIG_KEYPAD == SANSA_FUZE_PAD
205 #define CB_SELECT BUTTON_SELECT
206 #define CB_UP BUTTON_UP
207 #define CB_DOWN BUTTON_DOWN
208 #define CB_LEFT BUTTON_LEFT
209 #define CB_RIGHT BUTTON_RIGHT
210 #define CB_PLAY (BUTTON_SELECT | BUTTON_RIGHT)
211 #define CB_LEVEL (BUTTON_SELECT|BUTTON_LEFT)
212 #define CB_RESTART (BUTTON_SELECT | BUTTON_REPEAT)
213 #define CB_MENU (BUTTON_HOME|BUTTON_REPEAT)
215 #define CB_SCROLL_UP (BUTTON_SCROLL_UP|BUTTON_REPEAT)
216 #define CB_SCROLL_DOWN (BUTTON_SCROLL_DOWN|BUTTON_REPEAT)
217 #define CB_SCROLL_LEFT (BUTTON_LEFT|BUTTON_REPEAT)
218 #define CB_SCROLL_RIGHT (BUTTON_RIGHT|BUTTON_REPEAT)
220 #elif CONFIG_KEYPAD == SANSA_CLIP_PAD
221 #define CB_SELECT BUTTON_SELECT
222 #define CB_UP BUTTON_UP
223 #define CB_DOWN BUTTON_DOWN
224 #define CB_LEFT BUTTON_LEFT
225 #define CB_RIGHT BUTTON_RIGHT
226 #define CB_PLAY BUTTON_VOL_UP
227 #define CB_LEVEL BUTTON_HOME
228 #define CB_MENU BUTTON_POWER
230 #define CB_SCROLL_UP (BUTTON_UP|BUTTON_REPEAT)
231 #define CB_SCROLL_DOWN (BUTTON_DOWN|BUTTON_REPEAT)
232 #define CB_SCROLL_LEFT (BUTTON_LEFT|BUTTON_REPEAT)
233 #define CB_SCROLL_RIGHT (BUTTON_RIGHT|BUTTON_REPEAT)
235 #elif CONFIG_KEYPAD == SANSA_M200_PAD
236 #define CB_SELECT (BUTTON_SELECT | BUTTON_REPEAT)
237 #define CB_UP BUTTON_UP
238 #define CB_DOWN BUTTON_DOWN
239 #define CB_LEFT BUTTON_LEFT
240 #define CB_RIGHT BUTTON_RIGHT
241 #define CB_PLAY BUTTON_VOL_UP
242 #define CB_LEVEL (BUTTON_SELECT | BUTTON_UP)
243 #define CB_MENU BUTTON_POWER
245 #define CB_SCROLL_UP (BUTTON_UP|BUTTON_REPEAT)
246 #define CB_SCROLL_DOWN (BUTTON_DOWN|BUTTON_REPEAT)
247 #define CB_SCROLL_LEFT (BUTTON_LEFT|BUTTON_REPEAT)
248 #define CB_SCROLL_RIGHT (BUTTON_RIGHT|BUTTON_REPEAT)
250 #elif CONFIG_KEYPAD == SANSA_C200_PAD
251 #define CB_SELECT BUTTON_SELECT
252 #define CB_UP BUTTON_UP
253 #define CB_DOWN BUTTON_DOWN
254 #define CB_LEFT BUTTON_LEFT
255 #define CB_RIGHT BUTTON_RIGHT
256 #define CB_PLAY BUTTON_VOL_UP
257 #define CB_LEVEL BUTTON_REC
258 #define CB_MENU BUTTON_POWER
260 #define CB_SCROLL_UP (BUTTON_UP|BUTTON_REPEAT)
261 #define CB_SCROLL_DOWN (BUTTON_DOWN|BUTTON_REPEAT)
262 #define CB_SCROLL_LEFT (BUTTON_LEFT|BUTTON_REPEAT)
263 #define CB_SCROLL_RIGHT (BUTTON_RIGHT|BUTTON_REPEAT)
265 #elif CONFIG_KEYPAD == MROBE500_PAD
267 #elif (CONFIG_KEYPAD == MROBE100_PAD)
268 #define CB_SELECT BUTTON_SELECT
269 #define CB_UP BUTTON_UP
270 #define CB_DOWN BUTTON_DOWN
271 #define CB_LEFT BUTTON_LEFT
272 #define CB_RIGHT BUTTON_RIGHT
273 #define CB_PLAY BUTTON_PLAY
274 #define CB_LEVEL BUTTON_DISPLAY
275 #define CB_MENU BUTTON_POWER
277 #define CB_SCROLL_UP (BUTTON_UP|BUTTON_REPEAT)
278 #define CB_SCROLL_DOWN (BUTTON_DOWN|BUTTON_REPEAT)
279 #define CB_SCROLL_LEFT (BUTTON_LEFT|BUTTON_REPEAT)
280 #define CB_SCROLL_RIGHT (BUTTON_RIGHT|BUTTON_REPEAT)
282 #elif CONFIG_KEYPAD == IAUDIO_M3_PAD
283 #define CB_SELECT BUTTON_RC_PLAY
284 #define CB_UP BUTTON_RC_VOL_UP
285 #define CB_DOWN BUTTON_RC_VOL_DOWN
286 #define CB_LEFT BUTTON_RC_REW
287 #define CB_RIGHT BUTTON_RC_FF
288 #define CB_PLAY BUTTON_RC_MODE
289 #define CB_LEVEL BUTTON_RC_MENU
290 #define CB_RESTART (BUTTON_RC_PLAY|BUTTON_REPEAT)
291 #define CB_MENU BUTTON_RC_REC
293 #define CB_SCROLL_UP (BUTTON_RC_VOL_UP|BUTTON_REPEAT)
294 #define CB_SCROLL_DOWN (BUTTON_RC_VOL_DOWN|BUTTON_REPEAT)
295 #define CB_SCROLL_LEFT (BUTTON_RC_REW|BUTTON_REPEAT)
296 #define CB_SCROLL_RIGHT (BUTTON_RC_FF|BUTTON_REPEAT)
298 #define CB_RC_QUIT BUTTON_REC
300 #elif CONFIG_KEYPAD == COWOND2_PAD
301 #define CB_LEVEL BUTTON_PLUS
302 #define CB_RESTART BUTTON_MINUS
303 #define CB_MENU (BUTTON_MENU|BUTTON_REL)
305 #elif CONFIG_KEYPAD == CREATIVEZVM_PAD
307 #define CB_SELECT BUTTON_PLAY
308 #define CB_UP BUTTON_UP
309 #define CB_DOWN BUTTON_DOWN
310 #define CB_LEFT BUTTON_LEFT
311 #define CB_RIGHT BUTTON_RIGHT
312 #define CB_PLAY BUTTON_SELECT
313 #define CB_LEVEL BUTTON_CUSTOM
314 #define CB_MENU BUTTON_MENU
316 #elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
317 #define CB_SELECT BUTTON_SELECT
318 #define CB_UP BUTTON_UP
319 #define CB_DOWN BUTTON_DOWN
320 #define CB_LEFT BUTTON_LEFT
321 #define CB_RIGHT BUTTON_RIGHT
322 #define CB_PLAY BUTTON_VIEW
323 #define CB_LEVEL BUTTON_PLAYLIST
324 #define CB_MENU BUTTON_MENU
326 #define CB_SCROLL_UP (BUTTON_UP|BUTTON_REPEAT)
327 #define CB_SCROLL_DOWN (BUTTON_DOWN|BUTTON_REPEAT)
328 #define CB_SCROLL_LEFT (BUTTON_LEFT|BUTTON_REPEAT)
329 #define CB_SCROLL_RIGHT (BUTTON_RIGHT|BUTTON_REPEAT)
331 #elif CONFIG_KEYPAD == ONDAVX747_PAD
332 #define CB_LEVEL BUTTON_VOL_UP
333 #define CB_RESTART BUTTON_VOL_DOWN
334 #define CB_MENU (BUTTON_MENU|BUTTON_REL)
336 #elif CONFIG_KEYPAD == SAMSUNG_YH_PAD
337 #define CB_SELECT (BUTTON_FFWD|BUTTON_RIGHT)
338 #define CB_UP BUTTON_UP
339 #define CB_DOWN BUTTON_DOWN
340 #define CB_LEFT BUTTON_LEFT
341 #define CB_RIGHT BUTTON_RIGHT
342 #define CB_PLAY BUTTON_PLAY
343 #define CB_LEVEL (BUTTON_FFWD|BUTTON_UP)
344 #define CB_MENU (BUTTON_FFWD|BUTTON_LEFT)
346 #else
347 #error No keymap defined!
348 #endif
350 #ifdef HAVE_TOUCHSCREEN
351 #ifndef CB_LEVEL
352 #define CB_LEVEL BUTTON_TOPLEFT
353 #endif
354 #ifndef CB_RESTART
355 #define CB_RESTART BUTTON_TOPRIGHT
356 #endif
357 #ifndef CB_MENU
358 #define CB_MENU (BUTTON_BOTTOMLEFT|BUTTON_REL)
359 #endif
360 #ifndef CB_PLAY
361 #define CB_PLAY (BUTTON_CENTER|BUTTON_REPEAT)
362 #endif
363 #ifndef CB_SELECT
364 #define CB_SELECT BUTTON_CENTER
365 #endif
366 #ifndef CB_UP
367 #define CB_UP BUTTON_TOPMIDDLE
368 #endif
369 #ifndef CB_DOWN
370 #define CB_DOWN BUTTON_BOTTOMMIDDLE
371 #endif
372 #ifndef CB_LEFT
373 #define CB_LEFT BUTTON_MIDLEFT
374 #endif
375 #ifndef CB_RIGHT
376 #define CB_RIGHT BUTTON_MIDRIGHT
377 #endif
378 #ifndef CB_SCROLL_UP
379 #define CB_SCROLL_UP (BUTTON_TOPMIDDLE|BUTTON_REPEAT)
380 #endif
381 #ifndef CB_SCROLL_DOWN
382 #define CB_SCROLL_DOWN (BUTTON_BOTTOMMIDDLE|BUTTON_REPEAT)
383 #endif
384 #ifndef CB_SCROLL_LEFT
385 #define CB_SCROLL_LEFT (BUTTON_MIDLEFT|BUTTON_REPEAT)
386 #endif
387 #ifndef CB_SCROLL_RIGHT
388 #define CB_SCROLL_RIGHT (BUTTON_MIDRIGHT|BUTTON_REPEAT)
389 #endif
390 #endif
392 /* structure to represent the plies */
393 struct pgn_ply_node {
394 unsigned short player;
395 char pgn_text[9];
396 unsigned short row_from;
397 unsigned short column_from;
398 unsigned short row_to;
399 unsigned short column_to;
400 unsigned short taken_piece;
401 unsigned short promotion_piece;
402 bool enpassant;
403 bool castle;
404 bool promotion;
405 bool checkmate;
406 bool draw;
407 struct pgn_ply_node* prev_node;
408 struct pgn_ply_node* next_node;
411 /* structure to list the games */
412 struct pgn_game_node {
413 unsigned short game_number;
414 char white_player[20];
415 char black_player[20];
416 char game_date[11];
417 char result[8];
418 int pgn_line;
419 struct pgn_ply_node* first_ply;
420 struct pgn_game_node* next_node;
423 /* Return the list of games in a PGN file.
424 * Parsing of the games themselves is postponed until
425 * the user selects a game, that obviously saves processing
426 * and speeds up response when the user selects the file
428 struct pgn_game_node* pgn_list_games(const char* filename);
430 /* Show the list of games found in a file and allow the user
431 * to select a game to be parsed and showed
433 struct pgn_game_node* pgn_show_game_list(struct pgn_game_node* first_game);
435 /* Parse the pgn string of a game and assign it to the move
436 * list in the structure
438 void pgn_parse_game(const char* filename,
439 struct pgn_game_node* selected_game);
441 /* Initialize a new game structure with default values and make
442 * it ready to store the history of a newly played match
444 struct pgn_game_node* pgn_init_game(void);
446 /* Add a new ply to the game structure based on the positions */
447 void pgn_append_ply(struct pgn_game_node* game,
448 unsigned short ply_player, char *move_buffer, bool is_mate);
450 /* Set the result of the game if it was reached during the opponent's ply
452 void pgn_set_result(struct pgn_game_node* game,
453 bool is_mate);
455 /* Store a complete game in the PGN history file
457 void pgn_store_game(struct pgn_game_node* game);