summaryrefslogtreecommitdiff
path: root/apps/plugins/demystify.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/demystify.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/demystify.c')
-rw-r--r--apps/plugins/demystify.c14
1 files changed, 6 insertions, 8 deletions
diff --git a/apps/plugins/demystify.c b/apps/plugins/demystify.c
index 468f1806ce..6a8f1eb0c1 100644
--- a/apps/plugins/demystify.c
+++ b/apps/plugins/demystify.c
@@ -22,11 +22,12 @@
22****************************************************************************/ 22****************************************************************************/
23 23
24#include "plugin.h" 24#include "plugin.h"
25#include "lib/pluginlib_exit.h"
25 26
26#ifdef HAVE_LCD_BITMAP 27#ifdef HAVE_LCD_BITMAP
27#include "lib/pluginlib_actions.h" 28#include "lib/pluginlib_actions.h"
28#include "lib/helper.h" 29#include "lib/helper.h"
29PLUGIN_HEADER 30
30 31
31#define DEFAULT_WAIT_TIME 3 32#define DEFAULT_WAIT_TIME 3
32#define DEFAULT_NB_POLYGONS 7 33#define DEFAULT_NB_POLYGONS 7
@@ -259,10 +260,8 @@ void polygons_draw(struct polygon_fifo * polygons, struct screen * display)
259 } 260 }
260} 261}
261 262
262void cleanup(void *parameter) 263void cleanup(void)
263{ 264{
264 (void)parameter;
265
266 backlight_use_settings(); 265 backlight_use_settings();
267#ifdef HAVE_REMOTE_LCD 266#ifdef HAVE_REMOTE_LCD
268 remote_backlight_use_settings(); 267 remote_backlight_use_settings();
@@ -394,7 +393,6 @@ int plugin_main(void)
394 switch(action) 393 switch(action)
395 { 394 {
396 case DEMYSTIFY_QUIT: 395 case DEMYSTIFY_QUIT:
397 cleanup(NULL);
398 return PLUGIN_OK; 396 return PLUGIN_OK;
399 397
400 case DEMYSTIFY_ADD_POLYGON: 398 case DEMYSTIFY_ADD_POLYGON:
@@ -421,9 +419,7 @@ int plugin_main(void)
421 break; 419 break;
422 420
423 default: 421 default:
424 if (rb->default_event_handler_ex(action, cleanup, NULL) 422 exit_on_usb(action);
425 == SYS_USB_CONNECTED)
426 return PLUGIN_USB_CONNECTED;
427 break; 423 break;
428 } 424 }
429 } 425 }
@@ -436,6 +432,8 @@ enum plugin_status plugin_start(const void* parameter)
436 int ret; 432 int ret;
437 433
438 (void)parameter; 434 (void)parameter;
435 atexit(cleanup);
436
439#if LCD_DEPTH > 1 437#if LCD_DEPTH > 1
440 rb->lcd_set_backdrop(NULL); 438 rb->lcd_set_backdrop(NULL);
441#endif 439#endif