summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntoine Cellerier <dionoea@videolan.org>2007-09-30 16:39:36 +0000
committerAntoine Cellerier <dionoea@videolan.org>2007-09-30 16:39:36 +0000
commit34308c152206b9c476bf241a93978c0bb624e316 (patch)
tree06726e187753500f2a822b0b001ea7cac0308b05
parentc4d0a0ed8f09ba4e985ab86c17e449cc7690aa4c (diff)
downloadrockbox-34308c152206b9c476bf241a93978c0bb624e316.tar.gz
rockbox-34308c152206b9c476bf241a93978c0bb624e316.zip
Fix a few solitaire game saving issues: Add a "Save and Quit" menu entry. Using "Quit" will delete the save file if it exists. Save on power off seems to work fine. Save on USB doesn't work (are file IOs disabled when USB is plugged?)
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@14921 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/plugins/solitaire.c37
1 files changed, 27 insertions, 10 deletions
diff --git a/apps/plugins/solitaire.c b/apps/plugins/solitaire.c
index 933a7226ca..89b3966dfd 100644
--- a/apps/plugins/solitaire.c
+++ b/apps/plugins/solitaire.c
@@ -592,7 +592,7 @@ static void create_unhide_option_string(void)
592void solitaire_init(void); 592void solitaire_init(void);
593 593
594/* menu return codes */ 594/* menu return codes */
595enum { MENU_RESUME, MENU_QUIT, MENU_USB }; 595enum { MENU_RESUME, MENU_SAVE_AND_QUIT, MENU_QUIT, MENU_USB };
596 596
597int solitaire_menu(bool in_game) 597int solitaire_menu(bool in_game)
598{ 598{
@@ -600,9 +600,9 @@ int solitaire_menu(bool in_game)
600 int result = -1; 600 int result = -1;
601 int i = 0; 601 int i = 0;
602 602
603 struct menu_item items[6]; 603 struct menu_item items[7];
604 604
605 if (in_game) 605 if( in_game )
606 { 606 {
607 items[i++].desc = "Resume Game"; 607 items[i++].desc = "Resume Game";
608 items[i++].desc = "Restart Game"; 608 items[i++].desc = "Restart Game";
@@ -615,6 +615,10 @@ int solitaire_menu(bool in_game)
615 items[i++].desc = unhide_option_string; 615 items[i++].desc = unhide_option_string;
616 items[i++].desc = "Help"; 616 items[i++].desc = "Help";
617 items[i++].desc = "Audio Playback"; 617 items[i++].desc = "Audio Playback";
618 if( in_game )
619 {
620 items[i++].desc = "Save and Quit";
621 }
618 items[i++].desc = "Quit"; 622 items[i++].desc = "Quit";
619 623
620 create_draw_option_string(); 624 create_draw_option_string();
@@ -665,6 +669,13 @@ int solitaire_menu(bool in_game)
665 break; 669 break;
666 670
667 case 5: 671 case 5:
672 if( in_game )
673 result = MENU_SAVE_AND_QUIT;
674 else
675 result = MENU_QUIT;
676 break;
677
678 case 6:
668 result = MENU_QUIT; 679 result = MENU_QUIT;
669 break; 680 break;
670 } 681 }
@@ -1032,7 +1043,7 @@ enum move move_card( int dest_col, int src_card )
1032 return MOVE_OK; 1043 return MOVE_OK;
1033} 1044}
1034 1045
1035enum { SOLITAIRE_WIN, SOLITAIRE_QUIT_NEW, SOLITAIRE_QUIT, SOLITAIRE_USB }; 1046enum { SOLITAIRE_WIN, SOLITAIRE_SAVE_AND_QUIT, SOLITAIRE_QUIT, SOLITAIRE_USB };
1036 1047
1037/** 1048/**
1038 * Bouncing cards at the end of the game 1049 * Bouncing cards at the end of the game
@@ -1122,6 +1133,7 @@ int open_save_file( int flags )
1122void delete_save_file( void ) 1133void delete_save_file( void )
1123{ 1134{
1124 char buf[MAX_PATH]; 1135 char buf[MAX_PATH];
1136 get_save_filename( buf );
1125 rb->remove( buf ); 1137 rb->remove( buf );
1126} 1138}
1127 1139
@@ -1233,7 +1245,7 @@ int solitaire( int skipmenu )
1233 switch( solitaire_menu(false) ) 1245 switch( solitaire_menu(false) )
1234 { 1246 {
1235 case MENU_QUIT: 1247 case MENU_QUIT:
1236 return SOLITAIRE_QUIT_NEW; 1248 return SOLITAIRE_QUIT;
1237 1249
1238 case MENU_USB: 1250 case MENU_USB:
1239 return SOLITAIRE_USB; 1251 return SOLITAIRE_USB;
@@ -1694,6 +1706,9 @@ int solitaire( int skipmenu )
1694 case SOL_QUIT: 1706 case SOL_QUIT:
1695 switch( solitaire_menu(true) ) 1707 switch( solitaire_menu(true) )
1696 { 1708 {
1709 case MENU_SAVE_AND_QUIT:
1710 return SOLITAIRE_SAVE_AND_QUIT;
1711
1697 case MENU_QUIT: 1712 case MENU_QUIT:
1698 return SOLITAIRE_QUIT; 1713 return SOLITAIRE_QUIT;
1699 1714
@@ -1703,7 +1718,7 @@ int solitaire( int skipmenu )
1703 break; 1718 break;
1704 1719
1705 case SYS_POWEROFF: 1720 case SYS_POWEROFF:
1706 return SOLITAIRE_QUIT; 1721 return SOLITAIRE_SAVE_AND_QUIT;
1707 1722
1708 default: 1723 default:
1709 if( rb->default_event_handler( button ) == SYS_USB_CONNECTED ) 1724 if( rb->default_event_handler( button ) == SYS_USB_CONNECTED )
@@ -1745,7 +1760,10 @@ enum plugin_status plugin_start( struct plugin_api* api, void* parameter )
1745 rb->memcpy(&sol, &sol_disk, sizeof(sol)); /* copy to running config */ 1760 rb->memcpy(&sol, &sol_disk, sizeof(sol)); /* copy to running config */
1746 1761
1747 if( load_game() == 0 ) 1762 if( load_game() == 0 )
1763 {
1764 rb->splash( HZ, "Resuming saved game." );
1748 result = SOLITAIRE_QUIT; 1765 result = SOLITAIRE_QUIT;
1766 }
1749 else 1767 else
1750 result = SOLITAIRE_WIN; 1768 result = SOLITAIRE_WIN;
1751 1769
@@ -1756,11 +1774,10 @@ enum plugin_status plugin_start( struct plugin_api* api, void* parameter )
1756 * winning instead of quiting) */ 1774 * winning instead of quiting) */
1757 while( ( result = solitaire( result ) ) == SOLITAIRE_WIN ); 1775 while( ( result = solitaire( result ) ) == SOLITAIRE_WIN );
1758 1776
1759 if( result != SOLITAIRE_QUIT_NEW ) 1777 if( result == SOLITAIRE_QUIT )
1760 save_game();
1761 else
1762 /* XXX: Not sure if this is the best spot to delete the save file */
1763 delete_save_file(); 1778 delete_save_file();
1779 else /* result == SOLITAIRE_USB || result == SOLITAIRE_SAVE_AND_QUIT */
1780 save_game();
1764 1781
1765 if (rb->memcmp(&sol, &sol_disk, sizeof(sol))) /* save settings if changed */ 1782 if (rb->memcmp(&sol, &sol_disk, sizeof(sol))) /* save settings if changed */
1766 { 1783 {