diff options
author | Antoine Cellerier <dionoea@videolan.org> | 2007-09-30 16:39:36 +0000 |
---|---|---|
committer | Antoine Cellerier <dionoea@videolan.org> | 2007-09-30 16:39:36 +0000 |
commit | 34308c152206b9c476bf241a93978c0bb624e316 (patch) | |
tree | 06726e187753500f2a822b0b001ea7cac0308b05 | |
parent | c4d0a0ed8f09ba4e985ab86c17e449cc7690aa4c (diff) | |
download | rockbox-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.c | 37 |
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) | |||
592 | void solitaire_init(void); | 592 | void solitaire_init(void); |
593 | 593 | ||
594 | /* menu return codes */ | 594 | /* menu return codes */ |
595 | enum { MENU_RESUME, MENU_QUIT, MENU_USB }; | 595 | enum { MENU_RESUME, MENU_SAVE_AND_QUIT, MENU_QUIT, MENU_USB }; |
596 | 596 | ||
597 | int solitaire_menu(bool in_game) | 597 | int 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 | ||
1035 | enum { SOLITAIRE_WIN, SOLITAIRE_QUIT_NEW, SOLITAIRE_QUIT, SOLITAIRE_USB }; | 1046 | enum { 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 ) | |||
1122 | void delete_save_file( void ) | 1133 | void 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 | { |