summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/plugins/chessbox/chessbox.c107
1 files changed, 89 insertions, 18 deletions
diff --git a/apps/plugins/chessbox/chessbox.c b/apps/plugins/chessbox/chessbox.c
index 0bd72ebcd8..8db5488105 100644
--- a/apps/plugins/chessbox/chessbox.c
+++ b/apps/plugins/chessbox/chessbox.c
@@ -49,7 +49,7 @@ PLUGIN_HEADER
49#define CB_PLAY (BUTTON_SELECT | BUTTON_PLAY) 49#define CB_PLAY (BUTTON_SELECT | BUTTON_PLAY)
50#define CB_LEVEL (BUTTON_SELECT | BUTTON_RIGHT) 50#define CB_LEVEL (BUTTON_SELECT | BUTTON_RIGHT)
51#define CB_RESTART (BUTTON_SELECT | BUTTON_LEFT) 51#define CB_RESTART (BUTTON_SELECT | BUTTON_LEFT)
52#define CB_QUIT (BUTTON_SELECT | BUTTON_MENU) 52#define CB_MENU (BUTTON_SELECT | BUTTON_MENU)
53 53
54#elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD 54#elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD
55#define CB_SELECT BUTTON_SELECT 55#define CB_SELECT BUTTON_SELECT
@@ -60,7 +60,7 @@ PLUGIN_HEADER
60#define CB_PLAY BUTTON_PLAY 60#define CB_PLAY BUTTON_PLAY
61#define CB_LEVEL BUTTON_REC 61#define CB_LEVEL BUTTON_REC
62#define CB_RESTART (BUTTON_SELECT | BUTTON_PLAY) 62#define CB_RESTART (BUTTON_SELECT | BUTTON_PLAY)
63#define CB_QUIT BUTTON_POWER 63#define CB_MENU BUTTON_POWER
64 64
65#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) 65#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD)
66#define CB_SELECT BUTTON_SELECT 66#define CB_SELECT BUTTON_SELECT
@@ -71,7 +71,7 @@ PLUGIN_HEADER
71#define CB_PLAY BUTTON_ON 71#define CB_PLAY BUTTON_ON
72#define CB_LEVEL BUTTON_MODE 72#define CB_LEVEL BUTTON_MODE
73#define CB_RESTART BUTTON_REC 73#define CB_RESTART BUTTON_REC
74#define CB_QUIT BUTTON_OFF 74#define CB_MENU BUTTON_OFF
75 75
76#define CB_RC_QUIT BUTTON_RC_STOP 76#define CB_RC_QUIT BUTTON_RC_STOP
77 77
@@ -83,7 +83,7 @@ PLUGIN_HEADER
83#define CB_RIGHT BUTTON_RIGHT 83#define CB_RIGHT BUTTON_RIGHT
84#define CB_PLAY BUTTON_PLAY 84#define CB_PLAY BUTTON_PLAY
85#define CB_LEVEL BUTTON_EQ 85#define CB_LEVEL BUTTON_EQ
86#define CB_QUIT BUTTON_MODE 86#define CB_MENU BUTTON_MODE
87 87
88#elif CONFIG_KEYPAD == RECORDER_PAD 88#elif CONFIG_KEYPAD == RECORDER_PAD
89#define CB_SELECT BUTTON_PLAY 89#define CB_SELECT BUTTON_PLAY
@@ -94,7 +94,7 @@ PLUGIN_HEADER
94#define CB_PLAY BUTTON_ON 94#define CB_PLAY BUTTON_ON
95#define CB_LEVEL BUTTON_F1 95#define CB_LEVEL BUTTON_F1
96#define CB_RESTART BUTTON_F3 96#define CB_RESTART BUTTON_F3
97#define CB_QUIT BUTTON_OFF 97#define CB_MENU BUTTON_OFF
98 98
99#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD 99#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
100#define CB_SELECT BUTTON_SELECT 100#define CB_SELECT BUTTON_SELECT
@@ -105,7 +105,7 @@ PLUGIN_HEADER
105#define CB_PLAY BUTTON_ON 105#define CB_PLAY BUTTON_ON
106#define CB_LEVEL BUTTON_F1 106#define CB_LEVEL BUTTON_F1
107#define CB_RESTART BUTTON_F3 107#define CB_RESTART BUTTON_F3
108#define CB_QUIT BUTTON_OFF 108#define CB_MENU BUTTON_OFF
109 109
110#elif CONFIG_KEYPAD == ONDIO_PAD 110#elif CONFIG_KEYPAD == ONDIO_PAD
111#define CB_SELECT_PRE BUTTON_MENU 111#define CB_SELECT_PRE BUTTON_MENU
@@ -118,7 +118,7 @@ PLUGIN_HEADER
118#define CB_PLAY (BUTTON_MENU|BUTTON_REPEAT) 118#define CB_PLAY (BUTTON_MENU|BUTTON_REPEAT)
119#define CB_LEVEL (BUTTON_MENU|BUTTON_OFF) 119#define CB_LEVEL (BUTTON_MENU|BUTTON_OFF)
120#define CB_RESTART (BUTTON_MENU|BUTTON_LEFT) 120#define CB_RESTART (BUTTON_MENU|BUTTON_LEFT)
121#define CB_QUIT BUTTON_OFF 121#define CB_MENU BUTTON_OFF
122 122
123#elif (CONFIG_KEYPAD == GIGABEAT_PAD) 123#elif (CONFIG_KEYPAD == GIGABEAT_PAD)
124#define CB_SELECT BUTTON_SELECT 124#define CB_SELECT BUTTON_SELECT
@@ -128,7 +128,7 @@ PLUGIN_HEADER
128#define CB_RIGHT BUTTON_RIGHT 128#define CB_RIGHT BUTTON_RIGHT
129#define CB_PLAY BUTTON_POWER 129#define CB_PLAY BUTTON_POWER
130#define CB_LEVEL BUTTON_MENU 130#define CB_LEVEL BUTTON_MENU
131#define CB_QUIT BUTTON_A 131#define CB_MENU BUTTON_A
132 132
133#elif CONFIG_KEYPAD == IRIVER_H10_PAD 133#elif CONFIG_KEYPAD == IRIVER_H10_PAD
134#define CB_SELECT BUTTON_REW 134#define CB_SELECT BUTTON_REW
@@ -139,7 +139,7 @@ PLUGIN_HEADER
139#define CB_PLAY BUTTON_PLAY 139#define CB_PLAY BUTTON_PLAY
140#define CB_LEVEL BUTTON_FF 140#define CB_LEVEL BUTTON_FF
141#define CB_RESTART (BUTTON_REW | BUTTON_PLAY) 141#define CB_RESTART (BUTTON_REW | BUTTON_PLAY)
142#define CB_QUIT BUTTON_POWER 142#define CB_MENU BUTTON_POWER
143 143
144#elif CONFIG_KEYPAD == SANSA_E200_PAD 144#elif CONFIG_KEYPAD == SANSA_E200_PAD
145#define CB_SELECT BUTTON_SELECT 145#define CB_SELECT BUTTON_SELECT
@@ -150,7 +150,7 @@ PLUGIN_HEADER
150#define CB_PLAY (BUTTON_SELECT | BUTTON_RIGHT) 150#define CB_PLAY (BUTTON_SELECT | BUTTON_RIGHT)
151#define CB_LEVEL BUTTON_REC 151#define CB_LEVEL BUTTON_REC
152#define CB_RESTART (BUTTON_SELECT | BUTTON_REPEAT) 152#define CB_RESTART (BUTTON_SELECT | BUTTON_REPEAT)
153#define CB_QUIT BUTTON_POWER 153#define CB_MENU BUTTON_POWER
154 154
155#else 155#else
156 #error CHESSBOX: Unsupported keypad 156 #error CHESSBOX: Unsupported keypad
@@ -196,10 +196,12 @@ PLUGIN_HEADER
196#define COMMAND_MOVE 1 196#define COMMAND_MOVE 1
197#define COMMAND_PLAY 2 197#define COMMAND_PLAY 2
198#define COMMAND_LEVEL 3 198#define COMMAND_LEVEL 3
199#ifdef CB_RESTART 199#define COMMAND_RESTART 4
200 #define COMMAND_RESTART 4
201#endif
202#define COMMAND_QUIT 5 200#define COMMAND_QUIT 5
201#define COMMAND_MENU 6
202#define COMMAND_SAVE 7
203#define COMMAND_RESTORE 8
204#define COMMAND_RESUME 9
203 205
204/* level+1's string */ 206/* level+1's string */
205const char *level_string[] = { "Level 1: 60 moves / 5 min" , 207const char *level_string[] = { "Level 1: 60 moves / 5 min" ,
@@ -317,11 +319,14 @@ void cb_wt_callback ( void ) {
317 switch (button) { 319 switch (button) {
318#ifdef CB_RC_QUIT 320#ifdef CB_RC_QUIT
319 case CB_RC_QUIT: 321 case CB_RC_QUIT:
320#endif
321 case CB_QUIT:
322 wt_command = COMMAND_QUIT; 322 wt_command = COMMAND_QUIT;
323 timeout = true; 323 timeout = true;
324 break; 324 break;
325#endif
326 case CB_MENU:
327 wt_command = COMMAND_MENU;
328 timeout = true;
329 break;
325 case CB_PLAY: 330 case CB_PLAY:
326 wt_command = COMMAND_PLAY; 331 wt_command = COMMAND_PLAY;
327 timeout = true; 332 timeout = true;
@@ -510,6 +515,46 @@ void cb_restoreposition ( void ) {
510 Sdepth = 0; 515 Sdepth = 0;
511} 516}
512 517
518/* ---- show menu ---- */
519static int cb_menu(void)
520{
521 int selection;
522 int result;
523 bool menu_quit = false;
524
525 MENUITEM_STRINGLIST(menu,"Chessbox Menu",NULL,"New Game","Resume Game",
526 "Save Game", "Restore Game", "Quit");
527
528 while(!menu_quit)
529 {
530 selection = rb->do_menu(&menu, &selection);
531 switch(selection)
532 {
533 case 0:
534 menu_quit = true;
535 result = COMMAND_RESTART;
536 break;
537 case 1:
538 result = COMMAND_RESUME;
539 menu_quit = true;
540 break;
541 case 2:
542 result = COMMAND_SAVE;
543 menu_quit = true;
544 break;
545 case 3:
546 result = COMMAND_RESTORE;
547 menu_quit = true;
548 break;
549 case 4:
550 result = COMMAND_QUIT;
551 menu_quit = true;
552 break;
553 }
554 }
555 return result;
556}
557
513/* ---- main user loop ---- */ 558/* ---- main user loop ---- */
514struct cb_command cb_getcommand (void) { 559struct cb_command cb_getcommand (void) {
515 static short x = 4 , y = 3 ; 560 static short x = 4 , y = 3 ;
@@ -526,10 +571,12 @@ struct cb_command cb_getcommand (void) {
526 switch (button) { 571 switch (button) {
527#ifdef CB_RC_QUIT 572#ifdef CB_RC_QUIT
528 case CB_RC_QUIT: 573 case CB_RC_QUIT:
529#endif
530 case CB_QUIT:
531 result.type = COMMAND_QUIT; 574 result.type = COMMAND_QUIT;
532 return result; 575 return result;
576#endif
577 case CB_MENU:
578 result.type = cb_menu();
579 return result;
533#ifdef CB_RESTART 580#ifdef CB_RESTART
534 case CB_RESTART: 581 case CB_RESTART:
535 result.type = COMMAND_RESTART; 582 result.type = COMMAND_RESTART;
@@ -707,8 +754,32 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) {
707 cb_drawboard(); 754 cb_drawboard();
708 break; 755 break;
709#endif 756#endif
757 case COMMAND_RESUME:
758 cb_drawboard();
759 break;
760 case COMMAND_SAVE:
761 cb_saveposition();
762 cb_drawboard();
763 break;
764 case COMMAND_RESTORE:
765 /* watch out, it will reset the game if no previous game was saved! */
766
767 /* init board */
768 GNUChess_Initialize();
769
770 /* restore saved position, if saved */
771 cb_restoreposition();
772
773 cb_drawboard();
774 break;
710 case COMMAND_PLAY: 775 case COMMAND_PLAY:
711 opponent = !opponent; computer = !computer; 776 if (opponent == white) {
777 opponent = black;
778 computer = white;
779 } else {
780 opponent = white;
781 computer = black;
782 }
712 rb->splash ( 0 , "Thinking..." ); 783 rb->splash ( 0 , "Thinking..." );
713#ifdef HAVE_ADJUSTABLE_CPU_FREQ 784#ifdef HAVE_ADJUSTABLE_CPU_FREQ
714 rb->cpu_boost ( true ); 785 rb->cpu_boost ( true );