summaryrefslogtreecommitdiff
path: root/apps/plugins/jackpot.c
diff options
context:
space:
mode:
authorThomas Martitz <kugel@rockbox.org>2010-08-23 16:56:49 +0000
committerThomas Martitz <kugel@rockbox.org>2010-08-23 16:56:49 +0000
commitabdc5935beb7dc3fa63bffeec584921ad2a4c8bd (patch)
tree3eb3ca86063d0fff58ca8ed2c49dbb0af0792570 /apps/plugins/jackpot.c
parent8106c9dc646bbb26131896eb12d23edb26cba476 (diff)
downloadrockbox-abdc5935beb7dc3fa63bffeec584921ad2a4c8bd.tar.gz
rockbox-abdc5935beb7dc3fa63bffeec584921ad2a4c8bd.zip
Introduce plugin_crt0.c that every plugin links.
It handles exit() properly, calling the handler also when the plugin returns normally (also it makes exit() more standard compliant while at it). It also holds PLUGIN_HEADER, so that it doesn't need to be in each plugin anymore. To work better together with callbacks passed to rb->default_event_handler_ex introduce exit_on_usb() which will call the exit handler before showing the usb screen and exit() after it. In most cases it was passed a callback which was manually called at all other return points. This can now be done via atexit(). In future plugin_crt0.c could also handle clearing bss, initializing iram and more. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27862 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/plugins/jackpot.c')
-rw-r--r--apps/plugins/jackpot.c12
1 files changed, 5 insertions, 7 deletions
diff --git a/apps/plugins/jackpot.c b/apps/plugins/jackpot.c
index 56c2910b70..abf1cf8fb2 100644
--- a/apps/plugins/jackpot.c
+++ b/apps/plugins/jackpot.c
@@ -22,8 +22,9 @@
22#include "plugin.h" 22#include "plugin.h"
23#include "lib/pluginlib_actions.h" 23#include "lib/pluginlib_actions.h"
24#include "lib/picture.h" 24#include "lib/picture.h"
25#include "lib/pluginlib_exit.h"
26
25 27
26PLUGIN_HEADER
27 28
28const struct button_mapping* plugin_contexts[]={pla_main_ctx}; 29const struct button_mapping* plugin_contexts[]={pla_main_ctx};
29#define NB_PICTURES 9 30#define NB_PICTURES 9
@@ -109,9 +110,8 @@ void patterns_deinit(struct screen* display)
109#endif /* HAVE_LCD_CHARCELLS */ 110#endif /* HAVE_LCD_CHARCELLS */
110 111
111/*Call when the program exit*/ 112/*Call when the program exit*/
112void jackpot_exit(void *parameter) 113void jackpot_exit(void)
113{ 114{
114 (void)parameter;
115#ifdef HAVE_LCD_CHARCELLS 115#ifdef HAVE_LCD_CHARCELLS
116 patterns_deinit(rb->screens[SCREEN_MAIN]); 116 patterns_deinit(rb->screens[SCREEN_MAIN]);
117#endif /* HAVE_LCD_CHARCELLS */ 117#endif /* HAVE_LCD_CHARCELLS */
@@ -298,6 +298,7 @@ enum plugin_status plugin_start(const void* parameter)
298 int action, i; 298 int action, i;
299 struct jackpot game; 299 struct jackpot game;
300 (void)parameter; 300 (void)parameter;
301 atexit(jackpot_exit);
301 rb->srand(*rb->current_tick); 302 rb->srand(*rb->current_tick);
302#ifdef HAVE_LCD_CHARCELLS 303#ifdef HAVE_LCD_CHARCELLS
303 patterns_init(rb->screens[SCREEN_MAIN]); 304 patterns_init(rb->screens[SCREEN_MAIN]);
@@ -323,12 +324,9 @@ enum plugin_status plugin_start(const void* parameter)
323 break; 324 break;
324 325
325 default: 326 default:
326 if (rb->default_event_handler_ex(action, jackpot_exit, NULL) 327 exit_on_usb(action);
327 == SYS_USB_CONNECTED)
328 return PLUGIN_USB_CONNECTED;
329 break; 328 break;
330 } 329 }
331 } 330 }
332 jackpot_exit(NULL);
333 return PLUGIN_OK; 331 return PLUGIN_OK;
334} 332}