summaryrefslogtreecommitdiff
path: root/apps/plugins
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
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')
-rw-r--r--apps/plugins/alarmclock.c2
-rw-r--r--apps/plugins/alpine_cdc.c2
-rw-r--r--apps/plugins/battery_bench.c2
-rw-r--r--apps/plugins/beatbox/beatbox.c2
-rw-r--r--apps/plugins/bench_mem_jpeg.c2
-rw-r--r--apps/plugins/bench_scaler.c2
-rw-r--r--apps/plugins/blackjack.c2
-rw-r--r--apps/plugins/bounce.c2
-rw-r--r--apps/plugins/brickmania.c2
-rw-r--r--apps/plugins/bubbles.c2
-rw-r--r--apps/plugins/calculator.c2
-rw-r--r--apps/plugins/calendar.c2
-rw-r--r--apps/plugins/chessbox.c2
-rw-r--r--apps/plugins/chessbox/chessbox.c2
-rw-r--r--apps/plugins/chessclock.c2
-rw-r--r--apps/plugins/chip8.c2
-rw-r--r--apps/plugins/chopper.c2
-rw-r--r--apps/plugins/clix.c2
-rw-r--r--apps/plugins/clock/clock.c12
-rw-r--r--apps/plugins/codebuster.c2
-rw-r--r--apps/plugins/credits.c2
-rw-r--r--apps/plugins/crypt_firmware.c2
-rw-r--r--apps/plugins/cube.c24
-rw-r--r--apps/plugins/demystify.c14
-rw-r--r--apps/plugins/dice.c2
-rw-r--r--apps/plugins/dict.c2
-rw-r--r--apps/plugins/disktidy.c2
-rw-r--r--apps/plugins/doom/rockdoom.c2
-rw-r--r--apps/plugins/euroconverter.c12
-rw-r--r--apps/plugins/fft/fft.c2
-rw-r--r--apps/plugins/fire.c2
-rw-r--r--apps/plugins/fireworks.c2
-rw-r--r--apps/plugins/firmware_flash.c2
-rw-r--r--apps/plugins/flipit.c2
-rw-r--r--apps/plugins/fractals/fractal.c20
-rw-r--r--apps/plugins/frotz/frotz.c4
-rw-r--r--apps/plugins/goban.c2
-rw-r--r--apps/plugins/goban/goban.c2
-rw-r--r--apps/plugins/greyscale.c9
-rw-r--r--apps/plugins/helloworld.c2
-rw-r--r--apps/plugins/imageviewer/imageviewer.c2
-rw-r--r--apps/plugins/invadrox.c2
-rw-r--r--apps/plugins/iriver_flash.c2
-rw-r--r--apps/plugins/iriverify.c2
-rw-r--r--apps/plugins/jackpot.c12
-rw-r--r--apps/plugins/jewels.c2
-rw-r--r--apps/plugins/keybox.c2
-rw-r--r--apps/plugins/lamp.c2
-rw-r--r--apps/plugins/lib/SOURCES1
-rw-r--r--apps/plugins/lib/pluginlib_exit.c25
-rw-r--r--apps/plugins/lib/pluginlib_exit.h52
-rw-r--r--apps/plugins/logo.c2
-rw-r--r--apps/plugins/lrcplayer.c2
-rw-r--r--apps/plugins/lua/rocklua.c5
-rw-r--r--apps/plugins/matrix.c2
-rw-r--r--apps/plugins/maze.c2
-rw-r--r--apps/plugins/mazezam.c2
-rw-r--r--apps/plugins/md5sum.c2
-rw-r--r--apps/plugins/metronome.c29
-rw-r--r--apps/plugins/midi/midiplay.c3
-rw-r--r--apps/plugins/minesweeper.c2
-rw-r--r--apps/plugins/mosaique.c2
-rw-r--r--apps/plugins/mp3_encoder.c2
-rw-r--r--apps/plugins/mpegplayer/mpegplayer.c2
-rw-r--r--apps/plugins/nim.c9
-rw-r--r--apps/plugins/oscilloscope.c12
-rw-r--r--apps/plugins/pacbox/pacbox.c2
-rw-r--r--apps/plugins/pdbox/pdbox.c2
-rw-r--r--apps/plugins/pegbox.c2
-rw-r--r--apps/plugins/pictureflow.c2
-rw-r--r--apps/plugins/pictureflow/pictureflow.c41
-rw-r--r--apps/plugins/pitch_detector.c2
-rw-r--r--apps/plugins/plasma.c32
-rwxr-xr-xapps/plugins/plugin_crt0.c116
-rw-r--r--apps/plugins/plugins.make4
-rw-r--r--apps/plugins/pong.c2
-rw-r--r--apps/plugins/ppmviewer.c2
-rw-r--r--apps/plugins/properties.c2
-rw-r--r--apps/plugins/random_folder_advance_config.c2
-rw-r--r--apps/plugins/remote_control.c2
-rw-r--r--apps/plugins/reversi/reversi-gui.c2
-rw-r--r--apps/plugins/robotfindskitten.c2
-rw-r--r--apps/plugins/rockblox.c2
-rw-r--r--apps/plugins/rockblox1d.c2
-rw-r--r--apps/plugins/rockbox_flash.c2
-rw-r--r--apps/plugins/rockboy.c2
-rw-r--r--apps/plugins/rockboy/rockboy.c2
-rw-r--r--apps/plugins/rocklife.c2
-rw-r--r--apps/plugins/rockpaint.c2
-rw-r--r--apps/plugins/search.c2
-rw-r--r--apps/plugins/searchengine/searchengine.c2
-rw-r--r--apps/plugins/settings_dumper.c2
-rw-r--r--apps/plugins/shopper.c2
-rw-r--r--apps/plugins/shortcuts/shortcuts_append.c2
-rw-r--r--apps/plugins/shortcuts/shortcuts_view.c2
-rw-r--r--apps/plugins/sliding_puzzle.c2
-rw-r--r--apps/plugins/snake.c2
-rw-r--r--apps/plugins/snake2.c2
-rw-r--r--apps/plugins/snow.c2
-rw-r--r--apps/plugins/sokoban.c2
-rw-r--r--apps/plugins/solitaire.c2
-rw-r--r--apps/plugins/sort.c2
-rw-r--r--apps/plugins/spacerocks.c2
-rw-r--r--apps/plugins/splitedit.c2
-rw-r--r--apps/plugins/star.c2
-rw-r--r--apps/plugins/starfield.c7
-rw-r--r--apps/plugins/stats.c2
-rw-r--r--apps/plugins/stopwatch.c2
-rw-r--r--apps/plugins/sudoku/sudoku.c2
-rw-r--r--apps/plugins/superdom.c2
-rw-r--r--apps/plugins/test_boost.c2
-rw-r--r--apps/plugins/test_codec.c2
-rw-r--r--apps/plugins/test_core_jpeg.c2
-rw-r--r--apps/plugins/test_disk.c2
-rw-r--r--apps/plugins/test_fps.c2
-rw-r--r--apps/plugins/test_gfx.c2
-rw-r--r--apps/plugins/test_grey.c2
-rw-r--r--apps/plugins/test_greylib_bitmap_scale.c2
-rw-r--r--apps/plugins/test_mem.c2
-rw-r--r--apps/plugins/test_mem_jpeg.c2
-rw-r--r--apps/plugins/test_resize.c2
-rw-r--r--apps/plugins/test_sampr.c2
-rw-r--r--apps/plugins/test_scanrate.c2
-rw-r--r--apps/plugins/test_touchscreen.c2
-rw-r--r--apps/plugins/test_viewports.c2
-rw-r--r--apps/plugins/text_editor.c2
-rw-r--r--apps/plugins/text_viewer/text_viewer.c13
-rw-r--r--apps/plugins/text_viewer/tv_action.c4
-rw-r--r--apps/plugins/text_viewer/tv_action.h5
-rw-r--r--apps/plugins/theme_remove.c2
-rw-r--r--apps/plugins/vbrfix.c2
-rw-r--r--apps/plugins/video.c2
-rw-r--r--apps/plugins/vu_meter.c2
-rw-r--r--apps/plugins/wav2wv.c2
-rw-r--r--apps/plugins/wavplay.c2
-rw-r--r--apps/plugins/wavrecord.c2
-rw-r--r--apps/plugins/wavview.c2
-rw-r--r--apps/plugins/wormlet.c2
-rw-r--r--apps/plugins/xobox.c2
-rw-r--r--apps/plugins/zxbox.c2
-rw-r--r--apps/plugins/zxbox/zxbox.c2
141 files changed, 363 insertions, 336 deletions
diff --git a/apps/plugins/alarmclock.c b/apps/plugins/alarmclock.c
index a22a2f29a5..3ccb0c3ebd 100644
--- a/apps/plugins/alarmclock.c
+++ b/apps/plugins/alarmclock.c
@@ -22,7 +22,7 @@
22#include "plugin.h" 22#include "plugin.h"
23#include "lib/pluginlib_actions.h" 23#include "lib/pluginlib_actions.h"
24 24
25PLUGIN_HEADER 25
26 26
27const struct button_mapping *plugin_contexts[] = { pla_main_ctx }; 27const struct button_mapping *plugin_contexts[] = { pla_main_ctx };
28 28
diff --git a/apps/plugins/alpine_cdc.c b/apps/plugins/alpine_cdc.c
index 9357b2e5ab..f6b236895d 100644
--- a/apps/plugins/alpine_cdc.c
+++ b/apps/plugins/alpine_cdc.c
@@ -36,7 +36,7 @@
36/* Only build for (correct) target */ 36/* Only build for (correct) target */
37#if CONFIG_CPU==SH7034 && !(CONFIG_STORAGE & STORAGE_MMC) 37#if CONFIG_CPU==SH7034 && !(CONFIG_STORAGE & STORAGE_MMC)
38 38
39PLUGIN_HEADER 39
40 40
41#ifdef HAVE_LCD_CHARCELLS /* player model */ 41#ifdef HAVE_LCD_CHARCELLS /* player model */
42#define LINES 2 42#define LINES 2
diff --git a/apps/plugins/battery_bench.c b/apps/plugins/battery_bench.c
index e6efd38d96..bb0e4f594b 100644
--- a/apps/plugins/battery_bench.c
+++ b/apps/plugins/battery_bench.c
@@ -22,7 +22,7 @@
22 22
23#include "version.h" 23#include "version.h"
24#include "plugin.h" 24#include "plugin.h"
25PLUGIN_HEADER 25
26 26
27#define BATTERY_LOG "/battery_bench.txt" 27#define BATTERY_LOG "/battery_bench.txt"
28#define BUF_SIZE 16000 28#define BUF_SIZE 16000
diff --git a/apps/plugins/beatbox/beatbox.c b/apps/plugins/beatbox/beatbox.c
index a51f738cd2..9cb7dd4465 100644
--- a/apps/plugins/beatbox/beatbox.c
+++ b/apps/plugins/beatbox/beatbox.c
@@ -26,7 +26,7 @@
26#include "midi/sequencer.h" 26#include "midi/sequencer.h"
27#include "midi/midifile.h" 27#include "midi/midifile.h"
28 28
29PLUGIN_HEADER 29
30PLUGIN_IRAM_DECLARE 30PLUGIN_IRAM_DECLARE
31 31
32/* variable button definitions */ 32/* variable button definitions */
diff --git a/apps/plugins/bench_mem_jpeg.c b/apps/plugins/bench_mem_jpeg.c
index 5169286fe3..4e24f2a405 100644
--- a/apps/plugins/bench_mem_jpeg.c
+++ b/apps/plugins/bench_mem_jpeg.c
@@ -23,7 +23,7 @@
23 23
24#include "plugin.h" 24#include "plugin.h"
25#include "lib/jpeg_mem.h" 25#include "lib/jpeg_mem.h"
26PLUGIN_HEADER 26
27 27
28/* a null output plugin to save memory and better isolate decode cost */ 28/* a null output plugin to save memory and better isolate decode cost */
29static unsigned int get_size_null(struct bitmap *bm) 29static unsigned int get_size_null(struct bitmap *bm)
diff --git a/apps/plugins/bench_scaler.c b/apps/plugins/bench_scaler.c
index 246271dcc8..5db2987ec7 100644
--- a/apps/plugins/bench_scaler.c
+++ b/apps/plugins/bench_scaler.c
@@ -23,7 +23,7 @@
23 23
24#include "plugin.h" 24#include "plugin.h"
25#include "lib/jpeg_mem.h" 25#include "lib/jpeg_mem.h"
26PLUGIN_HEADER 26
27 27
28static unsigned char output; 28static unsigned char output;
29static int output_y = 0; 29static int output_y = 0;
diff --git a/apps/plugins/blackjack.c b/apps/plugins/blackjack.c
index 7b3dbef805..8b28b815b8 100644
--- a/apps/plugins/blackjack.c
+++ b/apps/plugins/blackjack.c
@@ -26,7 +26,7 @@
26#include "lib/highscore.h" 26#include "lib/highscore.h"
27#include "lib/playback_control.h" 27#include "lib/playback_control.h"
28 28
29PLUGIN_HEADER 29
30 30
31/* save files */ 31/* save files */
32#define SCORE_FILE PLUGIN_GAMES_DIR "/blackjack.score" 32#define SCORE_FILE PLUGIN_GAMES_DIR "/blackjack.score"
diff --git a/apps/plugins/bounce.c b/apps/plugins/bounce.c
index f193818850..1ee5b1eaeb 100644
--- a/apps/plugins/bounce.c
+++ b/apps/plugins/bounce.c
@@ -22,7 +22,7 @@
22#include "time.h" 22#include "time.h"
23#include "lib/fixedpoint.h" 23#include "lib/fixedpoint.h"
24 24
25PLUGIN_HEADER 25
26 26
27#define SS_TITLE "Bouncer" 27#define SS_TITLE "Bouncer"
28 28
diff --git a/apps/plugins/brickmania.c b/apps/plugins/brickmania.c
index 98de3d439f..50ceaa7557 100644
--- a/apps/plugins/brickmania.c
+++ b/apps/plugins/brickmania.c
@@ -41,7 +41,7 @@
41#include "pluginbitmaps/brickmania_break.h" 41#include "pluginbitmaps/brickmania_break.h"
42#endif 42#endif
43 43
44PLUGIN_HEADER 44
45 45
46 46
47/* 47/*
diff --git a/apps/plugins/bubbles.c b/apps/plugins/bubbles.c
index f169a2ef45..320fd3e4c6 100644
--- a/apps/plugins/bubbles.c
+++ b/apps/plugins/bubbles.c
@@ -31,8 +31,6 @@
31#include "lib/playback_control.h" 31#include "lib/playback_control.h"
32#include "lib/highscore.h" 32#include "lib/highscore.h"
33 33
34PLUGIN_HEADER
35
36/* files */ 34/* files */
37#define SCORE_FILE PLUGIN_GAMES_DIR "/bubbles.score" 35#define SCORE_FILE PLUGIN_GAMES_DIR "/bubbles.score"
38#define SAVE_FILE PLUGIN_GAMES_DIR "/bubbles.save" 36#define SAVE_FILE PLUGIN_GAMES_DIR "/bubbles.save"
diff --git a/apps/plugins/calculator.c b/apps/plugins/calculator.c
index 95b35e903c..8068b9c4f3 100644
--- a/apps/plugins/calculator.c
+++ b/apps/plugins/calculator.c
@@ -78,7 +78,7 @@ F3: equal to "="
78#ifdef HAVE_LCD_BITMAP 78#ifdef HAVE_LCD_BITMAP
79#include "math.h" 79#include "math.h"
80 80
81PLUGIN_HEADER 81
82 82
83 83
84#define M_TWOPI (M_PI * 2.0) 84#define M_TWOPI (M_PI * 2.0)
diff --git a/apps/plugins/calendar.c b/apps/plugins/calendar.c
index 13abdfc29a..32d4501920 100644
--- a/apps/plugins/calendar.c
+++ b/apps/plugins/calendar.c
@@ -25,7 +25,7 @@
25#include "lib/playback_control.h" 25#include "lib/playback_control.h"
26#include "lib/configfile.h" 26#include "lib/configfile.h"
27 27
28PLUGIN_HEADER 28
29 29
30#if CONFIG_KEYPAD == RECORDER_PAD 30#if CONFIG_KEYPAD == RECORDER_PAD
31#define CALENDAR_QUIT BUTTON_OFF 31#define CALENDAR_QUIT BUTTON_OFF
diff --git a/apps/plugins/chessbox.c b/apps/plugins/chessbox.c
index a6db7ba949..14d2936848 100644
--- a/apps/plugins/chessbox.c
+++ b/apps/plugins/chessbox.c
@@ -24,7 +24,7 @@
24 24
25#include "lib/overlay.h" 25#include "lib/overlay.h"
26 26
27PLUGIN_HEADER 27
28 28
29/* this is the plugin entry point */ 29/* this is the plugin entry point */
30enum plugin_status plugin_start(const void* parameter) 30enum plugin_status plugin_start(const void* parameter)
diff --git a/apps/plugins/chessbox/chessbox.c b/apps/plugins/chessbox/chessbox.c
index 45f052d30a..4e298a8214 100644
--- a/apps/plugins/chessbox/chessbox.c
+++ b/apps/plugins/chessbox/chessbox.c
@@ -49,7 +49,7 @@ struct cb_command {
49extern const fb_data chessbox_pieces[]; 49extern const fb_data chessbox_pieces[];
50 50
51 51
52PLUGIN_HEADER 52
53 53
54/* Tile size defined by the assigned bitmap */ 54/* Tile size defined by the assigned bitmap */
55#include "pluginbitmaps/chessbox_pieces.h" 55#include "pluginbitmaps/chessbox_pieces.h"
diff --git a/apps/plugins/chessclock.c b/apps/plugins/chessclock.c
index 3afa705bf1..0ddfcb59fc 100644
--- a/apps/plugins/chessclock.c
+++ b/apps/plugins/chessclock.c
@@ -21,7 +21,7 @@
21#include "plugin.h" 21#include "plugin.h"
22#include "lib/playback_control.h" 22#include "lib/playback_control.h"
23 23
24PLUGIN_HEADER 24
25 25
26/* variable button definitions */ 26/* variable button definitions */
27#if CONFIG_KEYPAD == RECORDER_PAD 27#if CONFIG_KEYPAD == RECORDER_PAD
diff --git a/apps/plugins/chip8.c b/apps/plugins/chip8.c
index f60bdb36c0..cca6229a3f 100644
--- a/apps/plugins/chip8.c
+++ b/apps/plugins/chip8.c
@@ -21,7 +21,7 @@
21 ****************************************************************************/ 21 ****************************************************************************/
22#include "plugin.h" 22#include "plugin.h"
23 23
24PLUGIN_HEADER 24
25 25
26#define EXTERN static 26#define EXTERN static
27#define STATIC static 27#define STATIC static
diff --git a/apps/plugins/chopper.c b/apps/plugins/chopper.c
index 67cb9ee760..86f1bfba5d 100644
--- a/apps/plugins/chopper.c
+++ b/apps/plugins/chopper.c
@@ -26,7 +26,7 @@
26#include "lib/helper.h" 26#include "lib/helper.h"
27#include "lib/playback_control.h" 27#include "lib/playback_control.h"
28 28
29PLUGIN_HEADER 29
30 30
31/* 31/*
32Still To do: 32Still To do:
diff --git a/apps/plugins/clix.c b/apps/plugins/clix.c
index 0735656839..0bdf693f54 100644
--- a/apps/plugins/clix.c
+++ b/apps/plugins/clix.c
@@ -22,7 +22,7 @@
22#include "lib/playback_control.h" 22#include "lib/playback_control.h"
23#include "lib/display_text.h" 23#include "lib/display_text.h"
24 24
25PLUGIN_HEADER 25
26 26
27#if (CONFIG_KEYPAD == SANSA_E200_PAD) 27#if (CONFIG_KEYPAD == SANSA_E200_PAD)
28#define CLIX_BUTTON_QUIT BUTTON_POWER 28#define CLIX_BUTTON_QUIT BUTTON_POWER
diff --git a/apps/plugins/clock/clock.c b/apps/plugins/clock/clock.c
index f06f3e15e4..8a1a55e17f 100644
--- a/apps/plugins/clock/clock.c
+++ b/apps/plugins/clock/clock.c
@@ -22,6 +22,7 @@
22#include "plugin.h" 22#include "plugin.h"
23#include "time.h" 23#include "time.h"
24#include "lib/pluginlib_actions.h" 24#include "lib/pluginlib_actions.h"
25#include "lib/pluginlib_exit.h"
25#include "lib/xlcd.h" 26#include "lib/xlcd.h"
26 27
27#include "clock.h" 28#include "clock.h"
@@ -30,7 +31,7 @@
30#include "clock_menu.h" 31#include "clock_menu.h"
31#include "clock_settings.h" 32#include "clock_settings.h"
32 33
33PLUGIN_HEADER 34
34 35
35/* Keymaps */ 36/* Keymaps */
36const struct button_mapping* plugin_contexts[]={ 37const struct button_mapping* plugin_contexts[]={
@@ -56,9 +57,8 @@ const struct button_mapping* plugin_contexts[]={
56/************************** 57/**************************
57 * Cleanup on plugin return 58 * Cleanup on plugin return
58 *************************/ 59 *************************/
59void cleanup(void *parameter) 60void cleanup(void)
60{ 61{
61 (void)parameter;
62 clock_draw_restore_colors(); 62 clock_draw_restore_colors();
63 if(clock_settings.general.save_settings == 1) 63 if(clock_settings.general.save_settings == 1)
64 save_settings(); 64 save_settings();
@@ -115,6 +115,7 @@ enum plugin_status plugin_start(const void* parameter){
115 struct counter counter; 115 struct counter counter;
116 bool exit_clock = false; 116 bool exit_clock = false;
117 (void)parameter; 117 (void)parameter;
118 atexit(cleanup);
118 119
119#if LCD_DEPTH > 1 120#if LCD_DEPTH > 1
120 rb->lcd_set_backdrop(NULL); 121 rb->lcd_set_backdrop(NULL);
@@ -174,9 +175,7 @@ enum plugin_status plugin_start(const void* parameter){
174 exit_clock=main_menu(); 175 exit_clock=main_menu();
175 break; 176 break;
176 default: 177 default:
177 if(rb->default_event_handler_ex(button, cleanup, NULL) 178 exit_on_usb(button);
178 == SYS_USB_CONNECTED)
179 return PLUGIN_USB_CONNECTED;
180 if(time.second != last_second){ 179 if(time.second != last_second){
181 last_second=time.second; 180 last_second=time.second;
182 redraw=true; 181 redraw=true;
@@ -193,6 +192,5 @@ enum plugin_status plugin_start(const void* parameter){
193 } 192 }
194 } 193 }
195 194
196 cleanup(NULL);
197 return PLUGIN_OK; 195 return PLUGIN_OK;
198} 196}
diff --git a/apps/plugins/codebuster.c b/apps/plugins/codebuster.c
index 810bd0c570..1169f265c3 100644
--- a/apps/plugins/codebuster.c
+++ b/apps/plugins/codebuster.c
@@ -24,7 +24,7 @@
24#include "lib/playback_control.h" 24#include "lib/playback_control.h"
25#include "lib/pluginlib_actions.h" 25#include "lib/pluginlib_actions.h"
26 26
27PLUGIN_HEADER 27
28 28
29/* Limits */ 29/* Limits */
30#define MAX_PIECES_COUNT 5 30#define MAX_PIECES_COUNT 5
diff --git a/apps/plugins/credits.c b/apps/plugins/credits.c
index 0251849c11..a05b44c20d 100644
--- a/apps/plugins/credits.c
+++ b/apps/plugins/credits.c
@@ -21,7 +21,7 @@
21#include "plugin.h" 21#include "plugin.h"
22#include "lib/helper.h" 22#include "lib/helper.h"
23 23
24PLUGIN_HEADER 24
25 25
26static const char* const credits[] = { 26static const char* const credits[] = {
27#include "credits.raw" /* generated list of names from docs/CREDITS */ 27#include "credits.raw" /* generated list of names from docs/CREDITS */
diff --git a/apps/plugins/crypt_firmware.c b/apps/plugins/crypt_firmware.c
index 051a3d1bd9..f9bdd4d031 100644
--- a/apps/plugins/crypt_firmware.c
+++ b/apps/plugins/crypt_firmware.c
@@ -37,7 +37,7 @@
37 37
38#include "plugin.h" 38#include "plugin.h"
39 39
40PLUGIN_HEADER 40
41 41
42static void aes_encrypt(void* data, uint32_t size) 42static void aes_encrypt(void* data, uint32_t size)
43{ 43{
diff --git a/apps/plugins/cube.c b/apps/plugins/cube.c
index 2b1e00d690..7dec822d56 100644
--- a/apps/plugins/cube.c
+++ b/apps/plugins/cube.c
@@ -22,6 +22,7 @@
22***************************************************************************/ 22***************************************************************************/
23#include "plugin.h" 23#include "plugin.h"
24#include "lib/playergfx.h" 24#include "lib/playergfx.h"
25#include "lib/pluginlib_exit.h"
25#if LCD_DEPTH > 1 26#if LCD_DEPTH > 1
26#include "lib/mylcd.h" /* MYLCD_CFG_RB_XLCD or MYLCD_CFG_PGFX */ 27#include "lib/mylcd.h" /* MYLCD_CFG_RB_XLCD or MYLCD_CFG_PGFX */
27#include "lib/grey.h" 28#include "lib/grey.h"
@@ -32,8 +33,6 @@
32#include "lib/xlcd.h" 33#include "lib/xlcd.h"
33#include "lib/fixedpoint.h" 34#include "lib/fixedpoint.h"
34 35
35PLUGIN_HEADER
36
37/* Loops that the values are displayed */ 36/* Loops that the values are displayed */
38#define DISP_TIME 30 37#define DISP_TIME 30
39 38
@@ -611,10 +610,8 @@ static void cube_draw(void)
611 } 610 }
612} 611}
613 612
614void cleanup(void *parameter) 613void cleanup(void)
615{ 614{
616 (void)parameter;
617
618#ifdef USEGSLIB 615#ifdef USEGSLIB
619 grey_release(); 616 grey_release();
620#elif defined HAVE_LCD_CHARCELLS 617#elif defined HAVE_LCD_CHARCELLS
@@ -638,7 +635,7 @@ enum plugin_status plugin_start(const void* parameter)
638 bool highspeed = false; 635 bool highspeed = false;
639 bool paused = false; 636 bool paused = false;
640 bool redraw = true; 637 bool redraw = true;
641 bool exit = false; 638 bool quit = false;
642 639
643 (void)(parameter); 640 (void)(parameter);
644 641
@@ -651,6 +648,7 @@ enum plugin_status plugin_start(const void* parameter)
651 rb->splash(HZ, "Couldn't init greyscale display"); 648 rb->splash(HZ, "Couldn't init greyscale display");
652 return PLUGIN_ERROR; 649 return PLUGIN_ERROR;
653 } 650 }
651
654 /* init lcd_ function pointers */ 652 /* init lcd_ function pointers */
655 lcdfuncs.update = rb->lcd_update; 653 lcdfuncs.update = rb->lcd_update;
656 lcdfuncs.clear_display = rb->lcd_clear_display; 654 lcdfuncs.clear_display = rb->lcd_clear_display;
@@ -673,7 +671,8 @@ enum plugin_status plugin_start(const void* parameter)
673 pgfx_display(0, 0); 671 pgfx_display(0, 0);
674#endif 672#endif
675 673
676 while(!exit) 674 atexit(cleanup);
675 while(!quit)
677 { 676 {
678 if (redraw) 677 if (redraw)
679 { 678 {
@@ -830,24 +829,17 @@ enum plugin_status plugin_start(const void* parameter)
830 case CUBE_RC_QUIT: 829 case CUBE_RC_QUIT:
831#endif 830#endif
832 case CUBE_QUIT: 831 case CUBE_QUIT:
833 exit = true; 832 exit(EXIT_SUCCESS);
834 break; 833 break;
835 834
836 default: 835 default:
837 if (rb->default_event_handler_ex(button, cleanup, NULL) 836 exit_on_usb(button);
838 == SYS_USB_CONNECTED)
839 return PLUGIN_USB_CONNECTED;
840 break; 837 break;
841 } 838 }
842 if (button != BUTTON_NONE) 839 if (button != BUTTON_NONE)
843 lastbutton = button; 840 lastbutton = button;
844 } 841 }
845 842
846#ifdef USEGSLIB
847 grey_release();
848#elif defined(HAVE_LCD_CHARCELLS)
849 pgfx_release();
850#endif
851 return PLUGIN_OK; 843 return PLUGIN_OK;
852} 844}
853 845
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
diff --git a/apps/plugins/dice.c b/apps/plugins/dice.c
index 7bd51122ee..7acb2e79ca 100644
--- a/apps/plugins/dice.c
+++ b/apps/plugins/dice.c
@@ -45,7 +45,7 @@ struct dices
45}; 45};
46 46
47#define PRINT_BUFFER_LENGTH MAX_DICES*4 47#define PRINT_BUFFER_LENGTH MAX_DICES*4
48PLUGIN_HEADER 48
49 49
50static struct dices dice; 50static struct dices dice;
51static int sides_index; 51static int sides_index;
diff --git a/apps/plugins/dict.c b/apps/plugins/dict.c
index 13fe8e3cc6..a9c481742d 100644
--- a/apps/plugins/dict.c
+++ b/apps/plugins/dict.c
@@ -22,7 +22,7 @@
22#include "plugin.h" 22#include "plugin.h"
23#include "lib/simple_viewer.h" 23#include "lib/simple_viewer.h"
24 24
25PLUGIN_HEADER 25
26 26
27#define MIN_DESC_BUF_SIZE 0x400 /* arbitrary minimum size for description */ 27#define MIN_DESC_BUF_SIZE 0x400 /* arbitrary minimum size for description */
28 28
diff --git a/apps/plugins/disktidy.c b/apps/plugins/disktidy.c
index 8d8515e27b..d83ecf4312 100644
--- a/apps/plugins/disktidy.c
+++ b/apps/plugins/disktidy.c
@@ -21,7 +21,7 @@
21#include "plugin.h" 21#include "plugin.h"
22#include "errno.h" 22#include "errno.h"
23 23
24PLUGIN_HEADER 24
25 25
26/* function return values */ 26/* function return values */
27enum tidy_return 27enum tidy_return
diff --git a/apps/plugins/doom/rockdoom.c b/apps/plugins/doom/rockdoom.c
index 042212812a..324cb24d51 100644
--- a/apps/plugins/doom/rockdoom.c
+++ b/apps/plugins/doom/rockdoom.c
@@ -41,7 +41,7 @@
41#include "st_stuff.h" 41#include "st_stuff.h"
42#include "lib/helper.h" 42#include "lib/helper.h"
43 43
44PLUGIN_HEADER 44
45PLUGIN_IRAM_DECLARE 45PLUGIN_IRAM_DECLARE
46 46
47extern boolean timingdemo, singledemo, demoplayback, fastdemo; // killough 47extern boolean timingdemo, singledemo, demoplayback, fastdemo; // killough
diff --git a/apps/plugins/euroconverter.c b/apps/plugins/euroconverter.c
index f85ee798c4..24cebe69d1 100644
--- a/apps/plugins/euroconverter.c
+++ b/apps/plugins/euroconverter.c
@@ -45,7 +45,7 @@ To do:
45- The Irish currency needs 6 digits after the . to have sufficient precision on big number 45- The Irish currency needs 6 digits after the . to have sufficient precision on big number
46*/ 46*/
47 47
48PLUGIN_HEADER 48
49 49
50/* Name and path of the config file*/ 50/* Name and path of the config file*/
51static const char cfg_filename[] = "euroconverter.cfg"; 51static const char cfg_filename[] = "euroconverter.cfg";
@@ -387,10 +387,8 @@ static int euro_menu(void)
387 387
388 388
389/* Call when the program end */ 389/* Call when the program end */
390static void euro_exit(void *parameter) 390static void euro_exit(void)
391{ 391{
392 (void)parameter;
393
394 //Restore the old pattern (i don't find another way to do this. An idea?) 392 //Restore the old pattern (i don't find another way to do this. An idea?)
395 rb->lcd_unlock_pattern(heuro); 393 rb->lcd_unlock_pattern(heuro);
396 rb->lcd_unlock_pattern(hhome); 394 rb->lcd_unlock_pattern(hhome);
@@ -411,6 +409,7 @@ enum plugin_status plugin_start(const void* parameter)
411 /* if you don't use the parameter, you can do like 409 /* if you don't use the parameter, you can do like
412 this to avoid the compiler warning about it */ 410 this to avoid the compiler warning about it */
413 (void)parameter; 411 (void)parameter;
412 atexit(euro_exit);
414 413
415 /*Get the pattern handle*/ 414 /*Get the pattern handle*/
416 heuro=rb->lcd_get_locked_pattern(); 415 heuro=rb->lcd_get_locked_pattern();
@@ -587,9 +586,7 @@ enum plugin_status plugin_start(const void* parameter)
587 break; 586 break;
588 587
589 default: 588 default:
590 if (rb->default_event_handler_ex(button, euro_exit, NULL) 589 exit_on_usb(button);
591 == SYS_USB_CONNECTED)
592 return PLUGIN_USB_CONNECTED;
593 break; 590 break;
594 } 591 }
595 /*Display*/ 592 /*Display*/
@@ -599,7 +596,6 @@ enum plugin_status plugin_start(const void* parameter)
599 e=mydiv(h,currency[country]); 596 e=mydiv(h,currency[country]);
600 display(e,h,pos); 597 display(e,h,pos);
601 } 598 }
602 euro_exit(NULL);
603 return PLUGIN_OK; 599 return PLUGIN_OK;
604} 600}
605 601
diff --git a/apps/plugins/fft/fft.c b/apps/plugins/fft/fft.c
index e352c1c041..a9724196ac 100644
--- a/apps/plugins/fft/fft.c
+++ b/apps/plugins/fft/fft.c
@@ -29,7 +29,7 @@
29#endif 29#endif
30#include "lib/mylcd.h" 30#include "lib/mylcd.h"
31 31
32PLUGIN_HEADER 32
33 33
34#ifndef HAVE_LCD_COLOR 34#ifndef HAVE_LCD_COLOR
35GREY_INFO_STRUCT 35GREY_INFO_STRUCT
diff --git a/apps/plugins/fire.c b/apps/plugins/fire.c
index e1362dc900..268a934692 100644
--- a/apps/plugins/fire.c
+++ b/apps/plugins/fire.c
@@ -41,8 +41,6 @@
41#define FIRE_XPOS 0 41#define FIRE_XPOS 0
42#endif 42#endif
43 43
44PLUGIN_HEADER
45
46#ifndef HAVE_LCD_COLOR 44#ifndef HAVE_LCD_COLOR
47GREY_INFO_STRUCT 45GREY_INFO_STRUCT
48 static unsigned char draw_buffer[FIRE_WIDTH]; 46 static unsigned char draw_buffer[FIRE_WIDTH];
diff --git a/apps/plugins/fireworks.c b/apps/plugins/fireworks.c
index 1ad5f9a2ca..1954f19cac 100644
--- a/apps/plugins/fireworks.c
+++ b/apps/plugins/fireworks.c
@@ -22,7 +22,7 @@
22#include "lib/helper.h" 22#include "lib/helper.h"
23#include "lib/playback_control.h" 23#include "lib/playback_control.h"
24 24
25PLUGIN_HEADER 25
26 26
27/*** 27/***
28 * FIREWORKS.C by ZAKK ROBERTS 28 * FIREWORKS.C by ZAKK ROBERTS
diff --git a/apps/plugins/firmware_flash.c b/apps/plugins/firmware_flash.c
index 317bc92f04..02c4098ec1 100644
--- a/apps/plugins/firmware_flash.c
+++ b/apps/plugins/firmware_flash.c
@@ -77,7 +77,7 @@
77#error this platform is not (yet) flashable 77#error this platform is not (yet) flashable
78#endif 78#endif
79 79
80PLUGIN_HEADER 80
81 81
82#if CONFIG_KEYPAD == ONDIO_PAD /* limited keypad */ 82#if CONFIG_KEYPAD == ONDIO_PAD /* limited keypad */
83#define KEY1 BUTTON_LEFT 83#define KEY1 BUTTON_LEFT
diff --git a/apps/plugins/flipit.c b/apps/plugins/flipit.c
index d4c5702bc0..44ad011a64 100644
--- a/apps/plugins/flipit.c
+++ b/apps/plugins/flipit.c
@@ -20,7 +20,7 @@
20 ****************************************************************************/ 20 ****************************************************************************/
21#include "plugin.h" 21#include "plugin.h"
22 22
23PLUGIN_HEADER 23
24 24
25/* variable button definitions */ 25/* variable button definitions */
26#if CONFIG_KEYPAD == RECORDER_PAD 26#if CONFIG_KEYPAD == RECORDER_PAD
diff --git a/apps/plugins/fractals/fractal.c b/apps/plugins/fractals/fractal.c
index 971ae506ca..179bc3e562 100644
--- a/apps/plugins/fractals/fractal.c
+++ b/apps/plugins/fractals/fractal.c
@@ -29,6 +29,7 @@
29#include "fractal_rect.h" 29#include "fractal_rect.h"
30#include "fractal_sets.h" 30#include "fractal_sets.h"
31#include "mandelbrot_set.h" 31#include "mandelbrot_set.h"
32#include "lib/pluginlib_exit.h"
32 33
33#ifdef USEGSLIB 34#ifdef USEGSLIB
34GREY_INFO_STRUCT 35GREY_INFO_STRUCT
@@ -41,7 +42,7 @@ static size_t gbuf_size = 0;
41#define REDRAW_FULL 2 42#define REDRAW_FULL 2
42#define REDRAW_FULL_OVERLAY 3 43#define REDRAW_FULL_OVERLAY 3
43 44
44PLUGIN_HEADER 45
45 46
46/* returns 1 if a button has been pressed, 0 otherwise */ 47/* returns 1 if a button has been pressed, 0 otherwise */
47static int button_yield(void *ctx) 48static int button_yield(void *ctx)
@@ -85,9 +86,8 @@ static int button_yield(void *ctx)
85 } 86 }
86} 87}
87 88
88static void cleanup(void *parameter) 89static void cleanup(void)
89{ 90{
90 (void)parameter;
91#ifdef USEGSLIB 91#ifdef USEGSLIB
92 grey_release(); 92 grey_release();
93#endif 93#endif
@@ -109,11 +109,13 @@ enum plugin_status plugin_start(const void* parameter)
109 if (!grey_init(gbuf, gbuf_size, GREY_ON_COP, LCD_WIDTH, LCD_HEIGHT, NULL)) 109 if (!grey_init(gbuf, gbuf_size, GREY_ON_COP, LCD_WIDTH, LCD_HEIGHT, NULL))
110 { 110 {
111 rb->splash(HZ, "Couldn't init greyscale display"); 111 rb->splash(HZ, "Couldn't init greyscale display");
112 return 0; 112 return PLUGIN_ERROR;
113 } 113 }
114 grey_show(true); /* switch on greyscale overlay */ 114 grey_show(true); /* switch on greyscale overlay */
115#endif 115#endif
116 116
117 /* release greylib on exit */
118 atexit(cleanup);
117#if LCD_DEPTH > 1 119#if LCD_DEPTH > 1
118 rb->lcd_set_backdrop(NULL); 120 rb->lcd_set_backdrop(NULL);
119#endif 121#endif
@@ -161,9 +163,6 @@ enum plugin_status plugin_start(const void* parameter)
161 case FRACTAL_RC_QUIT: 163 case FRACTAL_RC_QUIT:
162#endif 164#endif
163 case FRACTAL_QUIT: 165 case FRACTAL_QUIT:
164#ifdef USEGSLIB
165 grey_release();
166#endif
167 return PLUGIN_OK; 166 return PLUGIN_OK;
168 167
169 case FRACTAL_ZOOM_OUT: 168 case FRACTAL_ZOOM_OUT:
@@ -246,18 +245,13 @@ enum plugin_status plugin_start(const void* parameter)
246 break; 245 break;
247 246
248 default: 247 default:
249 if (rb->default_event_handler_ex(button, cleanup, NULL) 248 exit_on_usb(button);
250 == SYS_USB_CONNECTED)
251 return PLUGIN_USB_CONNECTED;
252 break; 249 break;
253 } 250 }
254 251
255 if (button != BUTTON_NONE) 252 if (button != BUTTON_NONE)
256 lastbutton = button; 253 lastbutton = button;
257 } 254 }
258#ifdef USEGSLIB
259 grey_release();
260#endif
261 return PLUGIN_OK; 255 return PLUGIN_OK;
262} 256}
263 257
diff --git a/apps/plugins/frotz/frotz.c b/apps/plugins/frotz/frotz.c
index aff91002ef..23da650706 100644
--- a/apps/plugins/frotz/frotz.c
+++ b/apps/plugins/frotz/frotz.c
@@ -23,7 +23,7 @@
23#include "lib/pluginlib_exit.h" 23#include "lib/pluginlib_exit.h"
24#include "lib/pluginlib_actions.h" 24#include "lib/pluginlib_actions.h"
25 25
26PLUGIN_HEADER 26
27 27
28extern int frotz_main(void); 28extern int frotz_main(void);
29extern bool hot_key_quit(void); 29extern bool hot_key_quit(void);
@@ -41,7 +41,7 @@ enum plugin_status plugin_start(const void* parameter)
41 int i; 41 int i;
42 char* ext; 42 char* ext;
43 43
44 PLUGINLIB_EXIT_INIT_ATEXIT(atexit_cleanup); 44 atexit(atexit_cleanup);
45 45
46 if (!parameter) 46 if (!parameter)
47 return PLUGIN_ERROR; 47 return PLUGIN_ERROR;
diff --git a/apps/plugins/goban.c b/apps/plugins/goban.c
index 7bb6744dde..1a121202c6 100644
--- a/apps/plugins/goban.c
+++ b/apps/plugins/goban.c
@@ -24,7 +24,7 @@
24 24
25#include "lib/overlay.h" 25#include "lib/overlay.h"
26 26
27PLUGIN_HEADER 27
28 28
29enum plugin_status plugin_start(const void* parameter) 29enum plugin_status plugin_start(const void* parameter)
30{ 30{
diff --git a/apps/plugins/goban/goban.c b/apps/plugins/goban/goban.c
index 4e20e71a37..b2306c00a8 100644
--- a/apps/plugins/goban/goban.c
+++ b/apps/plugins/goban/goban.c
@@ -23,7 +23,7 @@
23#include "lib/playback_control.h" 23#include "lib/playback_control.h"
24#include "lib/configfile.h" 24#include "lib/configfile.h"
25 25
26PLUGIN_HEADER 26
27 27
28#include "goban.h" 28#include "goban.h"
29#include "game.h" 29#include "game.h"
diff --git a/apps/plugins/greyscale.c b/apps/plugins/greyscale.c
index 73dd98b216..33254439b6 100644
--- a/apps/plugins/greyscale.c
+++ b/apps/plugins/greyscale.c
@@ -27,7 +27,7 @@
27#if defined(HAVE_LCD_BITMAP) && (LCD_DEPTH < 4) 27#if defined(HAVE_LCD_BITMAP) && (LCD_DEPTH < 4)
28#include "lib/grey.h" 28#include "lib/grey.h"
29 29
30PLUGIN_HEADER 30
31 31
32/* variable button definitions */ 32/* variable button definitions */
33#if CONFIG_KEYPAD == RECORDER_PAD 33#if CONFIG_KEYPAD == RECORDER_PAD
@@ -316,9 +316,7 @@ int main(void)
316 316
317 button = rb->button_get(true); 317 button = rb->button_get(true);
318 318
319 if (rb->default_event_handler_ex(button, cleanup, NULL) 319 exit_on_usb(button);
320 == SYS_USB_CONNECTED)
321 return PLUGIN_USB_CONNECTED;
322 320
323 if (button & GREYSCALE_SHIFT) 321 if (button & GREYSCALE_SHIFT)
324 { 322 {
@@ -369,8 +367,6 @@ int main(void)
369 case GREYSCALE_RC_OFF: 367 case GREYSCALE_RC_OFF:
370#endif 368#endif
371 case GREYSCALE_OFF: 369 case GREYSCALE_OFF:
372
373 cleanup(NULL);
374 return PLUGIN_OK; 370 return PLUGIN_OK;
375 } 371 }
376 } 372 }
@@ -382,6 +378,7 @@ enum plugin_status plugin_start(const void* parameter)
382{ 378{
383 (void)parameter; 379 (void)parameter;
384 380
381 atexit(cleanup);
385 return main(); 382 return main();
386} 383}
387 384
diff --git a/apps/plugins/helloworld.c b/apps/plugins/helloworld.c
index e582eb77b3..f1093f0a8b 100644
--- a/apps/plugins/helloworld.c
+++ b/apps/plugins/helloworld.c
@@ -24,7 +24,7 @@
24 24
25/* This macros must always be included. Should be placed at the top by 25/* This macros must always be included. Should be placed at the top by
26 convention, although the actual position doesn't matter */ 26 convention, although the actual position doesn't matter */
27PLUGIN_HEADER 27
28 28
29/* this is the plugin entry point */ 29/* this is the plugin entry point */
30enum plugin_status plugin_start(const void* parameter) 30enum plugin_status plugin_start(const void* parameter)
diff --git a/apps/plugins/imageviewer/imageviewer.c b/apps/plugins/imageviewer/imageviewer.c
index 0fd25e7b29..e581407290 100644
--- a/apps/plugins/imageviewer/imageviewer.c
+++ b/apps/plugins/imageviewer/imageviewer.c
@@ -25,7 +25,7 @@
25#include <lib/configfile.h> 25#include <lib/configfile.h>
26#include "imageviewer.h" 26#include "imageviewer.h"
27 27
28PLUGIN_HEADER 28
29 29
30#ifdef USEGSLIB 30#ifdef USEGSLIB
31GREY_INFO_STRUCT 31GREY_INFO_STRUCT
diff --git a/apps/plugins/invadrox.c b/apps/plugins/invadrox.c
index 851487cf9a..ea4a0a28e5 100644
--- a/apps/plugins/invadrox.c
+++ b/apps/plugins/invadrox.c
@@ -61,7 +61,7 @@
61#define FIRE_WIDTH BMPWIDTH_invadrox_fire 61#define FIRE_WIDTH BMPWIDTH_invadrox_fire
62#define FIRE_HEIGHT BMPHEIGHT_invadrox_fire 62#define FIRE_HEIGHT BMPHEIGHT_invadrox_fire
63 63
64PLUGIN_HEADER 64
65 65
66/* Original graphics is only 1bpp so it should be portable 66/* Original graphics is only 1bpp so it should be portable
67 * to most targets. But for now, only support the simple ones. 67 * to most targets. But for now, only support the simple ones.
diff --git a/apps/plugins/iriver_flash.c b/apps/plugins/iriver_flash.c
index 24542a9398..a1ce22c83f 100644
--- a/apps/plugins/iriver_flash.c
+++ b/apps/plugins/iriver_flash.c
@@ -35,7 +35,7 @@ ssize_t audiobuf_size;
35 35
36#ifdef PLATFORM_ID 36#ifdef PLATFORM_ID
37 37
38PLUGIN_HEADER 38
39 39
40#if CONFIG_KEYPAD == IRIVER_H100_PAD 40#if CONFIG_KEYPAD == IRIVER_H100_PAD
41#define KEY1 BUTTON_OFF 41#define KEY1 BUTTON_OFF
diff --git a/apps/plugins/iriverify.c b/apps/plugins/iriverify.c
index 4e8ca5b420..1109cde179 100644
--- a/apps/plugins/iriverify.c
+++ b/apps/plugins/iriverify.c
@@ -25,7 +25,7 @@
25 ****************************************************************************/ 25 ****************************************************************************/
26#include "plugin.h" 26#include "plugin.h"
27 27
28PLUGIN_HEADER 28
29 29
30ssize_t buf_size; 30ssize_t buf_size;
31static char *filename; 31static char *filename;
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}
diff --git a/apps/plugins/jewels.c b/apps/plugins/jewels.c
index c2340aa557..fdf4ff70e5 100644
--- a/apps/plugins/jewels.c
+++ b/apps/plugins/jewels.c
@@ -29,7 +29,7 @@
29 29
30#ifdef HAVE_LCD_BITMAP 30#ifdef HAVE_LCD_BITMAP
31 31
32PLUGIN_HEADER 32
33 33
34/* button definitions */ 34/* button definitions */
35#if CONFIG_KEYPAD == RECORDER_PAD 35#if CONFIG_KEYPAD == RECORDER_PAD
diff --git a/apps/plugins/keybox.c b/apps/plugins/keybox.c
index a241e40440..8ac4064996 100644
--- a/apps/plugins/keybox.c
+++ b/apps/plugins/keybox.c
@@ -21,7 +21,7 @@
21#include "plugin.h" 21#include "plugin.h"
22#include "lib/playback_control.h" 22#include "lib/playback_control.h"
23#include "lib/md5.h" 23#include "lib/md5.h"
24PLUGIN_HEADER 24
25 25
26#define KEYBOX_FILE PLUGIN_APPS_DIR "/keybox.dat" 26#define KEYBOX_FILE PLUGIN_APPS_DIR "/keybox.dat"
27#define BLOCK_SIZE 8 27#define BLOCK_SIZE 8
diff --git a/apps/plugins/lamp.c b/apps/plugins/lamp.c
index 8c2dff5254..0074933fd8 100644
--- a/apps/plugins/lamp.c
+++ b/apps/plugins/lamp.c
@@ -25,7 +25,7 @@
25#include "plugin.h" 25#include "plugin.h"
26#include "lib/helper.h" 26#include "lib/helper.h"
27 27
28PLUGIN_HEADER 28
29 29
30/* variable button definitions - only targets with a colour display */ 30/* variable button definitions - only targets with a colour display */
31#if defined(HAVE_LCD_COLOR) 31#if defined(HAVE_LCD_COLOR)
diff --git a/apps/plugins/lib/SOURCES b/apps/plugins/lib/SOURCES
index fa12f94730..9b8b2146cc 100644
--- a/apps/plugins/lib/SOURCES
+++ b/apps/plugins/lib/SOURCES
@@ -2,7 +2,6 @@ gcc-support.c
2pluginlib_actions.c 2pluginlib_actions.c
3helper.c 3helper.c
4md5.c 4md5.c
5pluginlib_exit.c
6jhash.c 5jhash.c
7configfile.c 6configfile.c
8fixedpoint.c 7fixedpoint.c
diff --git a/apps/plugins/lib/pluginlib_exit.c b/apps/plugins/lib/pluginlib_exit.c
deleted file mode 100644
index 82ae11aca0..0000000000
--- a/apps/plugins/lib/pluginlib_exit.c
+++ /dev/null
@@ -1,25 +0,0 @@
1/***************************************************************************
2* __________ __ ___.
3* Open \______ \ ____ ____ | | _\_ |__ _______ ___
4* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7* \/ \/ \/ \/ \/
8* $Id$
9*
10* Copyright (C) 2009 by Maurus Cuelenaere
11*
12* This program is free software; you can redistribute it and/or
13* modify it under the terms of the GNU General Public License
14* as published by the Free Software Foundation; either version 2
15* of the License, or (at your option) any later version.
16*
17* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18* KIND, either express or implied.
19*
20****************************************************************************/
21
22#include "pluginlib_exit.h"
23
24jmp_buf __exit_env DATA_ATTR;
25
diff --git a/apps/plugins/lib/pluginlib_exit.h b/apps/plugins/lib/pluginlib_exit.h
index 00cbc8dc7f..411d0751d1 100644
--- a/apps/plugins/lib/pluginlib_exit.h
+++ b/apps/plugins/lib/pluginlib_exit.h
@@ -22,35 +22,33 @@
22#ifndef __PLUGINLIB_EXIT_H__ 22#ifndef __PLUGINLIB_EXIT_H__
23#define __PLUGINLIB_EXIT_H__ 23#define __PLUGINLIB_EXIT_H__
24 24
25#include "config.h" 25/* make sure we are in sync with the real definitions, especially on
26#if (CONFIG_PLATFORM & PLATFORM_NATIVE) 26 * hosted systems */
27#include "../../codecs/lib/setjmp.h" 27#include <stdlib.h>
28#else 28#include "gcc_extensions.h"
29#include <setjmp.h>
30#endif
31 29
32#define _PLUGINLIB_EXIT_INIT(atexit) switch(setjmp(__exit_env)) \ 30/* these are actually implemented in plugin_crt0.c which all plugins link */
33 { \ 31extern int atexit(void (*func)(void));
34 case 1: \ 32extern void exit(int status) NORETURN_ATTR;
35 atexit \ 33/* these don't call the exit handlers */
36 return PLUGIN_OK; \ 34extern void _exit(int status) NORETURN_ATTR;
37 case 2: \ 35/* C99 version */
38 atexit \ 36#define _Exit _exit
39 return PLUGIN_ERROR; \
40 case 0: \
41 default: \
42 break; \
43 }
44 37
45/* Either PLUGINLIB_EXIT_INIT or PLUGINLIB_EXIT_INIT_ATEXIT needs to be placed 38#ifndef EXIT_SUCCESS
46 * as the first line in plugin_start. The _ATEXIT version will call the named 39#define EXIT_SUCCESS 0
47 * no-argument function when exit() is called before exiting the plugin, to 40#define EXIT_FAILURE 1
48 * allow for cleanup. 41#endif
49 */
50#define PLUGINLIB_EXIT_INIT _PLUGINLIB_EXIT_INIT()
51#define PLUGINLIB_EXIT_INIT_ATEXIT(atexit) _PLUGINLIB_EXIT_INIT(atexit();)
52 42
53extern jmp_buf __exit_env; 43/**
54#define exit(status) longjmp(__exit_env, status != 0 ? 2 : 1) 44 * helper function to handle USB connected events coming from
45 * button_get()
46 *
47 * it will exit the plugin if usb is detected, but it will call the atexit func
48 * before actually showing the usb screen
49 *
50 * it additionally handles power off as well, with the same behavior
51 */
52extern void exit_on_usb(int button);
55 53
56#endif /* __PLUGINLIB_EXIT_H__ */ 54#endif /* __PLUGINLIB_EXIT_H__ */
diff --git a/apps/plugins/logo.c b/apps/plugins/logo.c
index db692840ba..43a7c3fd46 100644
--- a/apps/plugins/logo.c
+++ b/apps/plugins/logo.c
@@ -21,7 +21,7 @@
21#include "plugin.h" 21#include "plugin.h"
22#include "lib/playergfx.h" 22#include "lib/playergfx.h"
23 23
24PLUGIN_HEADER 24
25 25
26#ifdef HAVE_LCD_BITMAP 26#ifdef HAVE_LCD_BITMAP
27#define DISPLAY_WIDTH LCD_WIDTH 27#define DISPLAY_WIDTH LCD_WIDTH
diff --git a/apps/plugins/lrcplayer.c b/apps/plugins/lrcplayer.c
index 43f3b8e359..9f43849d5b 100644
--- a/apps/plugins/lrcplayer.c
+++ b/apps/plugins/lrcplayer.c
@@ -24,7 +24,7 @@
24#include "lib/helper.h" 24#include "lib/helper.h"
25#include <ctype.h> 25#include <ctype.h>
26 26
27PLUGIN_HEADER 27
28 28
29#define MAX_LINE_LEN 256 29#define MAX_LINE_LEN 256
30#define LRC_BUFFER_SIZE 0x3000 /* 12 kiB */ 30#define LRC_BUFFER_SIZE 0x3000 /* 12 kiB */
diff --git a/apps/plugins/lua/rocklua.c b/apps/plugins/lua/rocklua.c
index b92c274fb0..00bfd8e43e 100644
--- a/apps/plugins/lua/rocklua.c
+++ b/apps/plugins/lua/rocklua.c
@@ -20,7 +20,6 @@
20 ****************************************************************************/ 20 ****************************************************************************/
21 21
22#include "plugin.h" 22#include "plugin.h"
23#include "lib/pluginlib_exit.h"
24#include "lua.h" 23#include "lua.h"
25#include "lauxlib.h" 24#include "lauxlib.h"
26#include "lualib.h" 25#include "lualib.h"
@@ -28,7 +27,7 @@
28#include "rockmalloc.h" 27#include "rockmalloc.h"
29#include "luadir.h" 28#include "luadir.h"
30 29
31PLUGIN_HEADER 30
32 31
33static const luaL_Reg lualibs[] = { 32static const luaL_Reg lualibs[] = {
34 {"", luaopen_base}, 33 {"", luaopen_base},
@@ -148,8 +147,6 @@ enum plugin_status plugin_start(const void* parameter)
148 const char* filename; 147 const char* filename;
149 int status; 148 int status;
150 149
151 PLUGINLIB_EXIT_INIT
152
153 if (parameter == NULL) 150 if (parameter == NULL)
154 { 151 {
155 rb->splash(HZ, "Play a .lua file!"); 152 rb->splash(HZ, "Play a .lua file!");
diff --git a/apps/plugins/matrix.c b/apps/plugins/matrix.c
index 5a13b3aa38..d3429699af 100644
--- a/apps/plugins/matrix.c
+++ b/apps/plugins/matrix.c
@@ -34,7 +34,7 @@
34 34
35 35
36#include "plugin.h" 36#include "plugin.h"
37PLUGIN_HEADER 37
38 38
39/* Images */ 39/* Images */
40#include "pluginbitmaps/matrix_bold.h" 40#include "pluginbitmaps/matrix_bold.h"
diff --git a/apps/plugins/maze.c b/apps/plugins/maze.c
index 465dfa9e84..231b602911 100644
--- a/apps/plugins/maze.c
+++ b/apps/plugins/maze.c
@@ -33,7 +33,7 @@
33#include "plugin.h" 33#include "plugin.h"
34#include "lib/helper.h" 34#include "lib/helper.h"
35 35
36PLUGIN_HEADER 36
37 37
38/* key assignments */ 38/* key assignments */
39 39
diff --git a/apps/plugins/mazezam.c b/apps/plugins/mazezam.c
index f4b76df374..bb93825453 100644
--- a/apps/plugins/mazezam.c
+++ b/apps/plugins/mazezam.c
@@ -25,7 +25,7 @@
25#include "lib/playback_control.h" 25#include "lib/playback_control.h"
26 26
27/* Include standard plugin macro */ 27/* Include standard plugin macro */
28PLUGIN_HEADER 28
29 29
30#if (CONFIG_KEYPAD == IPOD_3G_PAD) 30#if (CONFIG_KEYPAD == IPOD_3G_PAD)
31# define MAZEZAM_MENU BUTTON_MENU 31# define MAZEZAM_MENU BUTTON_MENU
diff --git a/apps/plugins/md5sum.c b/apps/plugins/md5sum.c
index 9dd8f5a8a7..fe1c65efb0 100644
--- a/apps/plugins/md5sum.c
+++ b/apps/plugins/md5sum.c
@@ -22,7 +22,7 @@
22#include "plugin.h" 22#include "plugin.h"
23#include "lib/md5.h" 23#include "lib/md5.h"
24 24
25PLUGIN_HEADER 25
26 26
27#define BUFFERSIZE 16384 27#define BUFFERSIZE 16384
28 28
diff --git a/apps/plugins/metronome.c b/apps/plugins/metronome.c
index 37a7329b22..b38f0bbf2c 100644
--- a/apps/plugins/metronome.c
+++ b/apps/plugins/metronome.c
@@ -20,8 +20,9 @@
20 ****************************************************************************/ 20 ****************************************************************************/
21#include "plugin.h" 21#include "plugin.h"
22#include "lib/pluginlib_actions.h" 22#include "lib/pluginlib_actions.h"
23#include "lib/pluginlib_exit.h"
24
23 25
24PLUGIN_HEADER
25 26
26#if CONFIG_CODEC != SWCODEC 27#if CONFIG_CODEC != SWCODEC
27/* tick sound from a metronome */ 28/* tick sound from a metronome */
@@ -846,13 +847,14 @@ void timer_callback(void)
846 } 847 }
847} 848}
848 849
849void cleanup(void *parameter) 850void cleanup(void)
850{ 851{
851 (void)parameter;
852
853 rb->timer_unregister(); 852 rb->timer_unregister();
854 MET_PLAY_STOP; /* stop audio ISR */ 853 MET_PLAY_STOP; /* stop audio ISR */
855 rb->led(0); 854 rb->led(0);
855#if CONFIG_CODEC == SWCODEC
856 rb->pcm_set_frequency(HW_SAMPR_DEFAULT);
857#endif
856} 858}
857 859
858void tap(void) 860void tap(void)
@@ -885,9 +887,9 @@ enum plugin_status plugin_start(const void* parameter)
885{ 887{
886 int button; 888 int button;
887 static int last_button = BUTTON_NONE; 889 static int last_button = BUTTON_NONE;
888 enum plugin_status status;
889 890
890 (void)parameter; 891 (void)parameter;
892 atexit(cleanup);
891 893
892 if (MET_IS_PLAYING) 894 if (MET_IS_PLAYING)
893 MET_PLAY_STOP; /* stop audio IS */ 895 MET_PLAY_STOP; /* stop audio IS */
@@ -927,9 +929,7 @@ enum plugin_status plugin_start(const void* parameter)
927 929
928 case METRONOME_QUIT: 930 case METRONOME_QUIT:
929 /* get out of here */ 931 /* get out of here */
930 cleanup(NULL); 932 return PLUGIN_OK;
931 status = PLUGIN_OK;
932 goto metronome_exit;
933 933
934 case METRONOME_PAUSE: 934 case METRONOME_PAUSE:
935 if(!sound_paused) 935 if(!sound_paused)
@@ -981,12 +981,7 @@ enum plugin_status plugin_start(const void* parameter)
981#endif 981#endif
982 982
983 default: 983 default:
984 if (rb->default_event_handler_ex(button, cleanup, NULL) 984 exit_on_usb(button);
985 == SYS_USB_CONNECTED)
986 {
987 status = PLUGIN_USB_CONNECTED;
988 goto metronome_exit;
989 }
990 reset_tap = false; 985 reset_tap = false;
991 break; 986 break;
992 987
@@ -998,11 +993,5 @@ enum plugin_status plugin_start(const void* parameter)
998 } 993 }
999 rb->yield(); 994 rb->yield();
1000 } 995 }
1001
1002metronome_exit:
1003#if CONFIG_CODEC == SWCODEC
1004 rb->pcm_set_frequency(HW_SAMPR_DEFAULT);
1005#endif
1006 return status;
1007} 996}
1008 997
diff --git a/apps/plugins/midi/midiplay.c b/apps/plugins/midi/midiplay.c
index d9e215158e..442a747d89 100644
--- a/apps/plugins/midi/midiplay.c
+++ b/apps/plugins/midi/midiplay.c
@@ -25,7 +25,7 @@
25#include "sequencer.h" 25#include "sequencer.h"
26#include "midifile.h" 26#include "midifile.h"
27 27
28PLUGIN_HEADER 28
29PLUGIN_IRAM_DECLARE 29PLUGIN_IRAM_DECLARE
30 30
31/* variable button definitions */ 31/* variable button definitions */
@@ -450,7 +450,6 @@ static int midimain(const void * filename)
450enum plugin_status plugin_start(const void* parameter) 450enum plugin_status plugin_start(const void* parameter)
451{ 451{
452 int retval; 452 int retval;
453 PLUGINLIB_EXIT_INIT;
454 453
455 PLUGIN_IRAM_INIT(rb) 454 PLUGIN_IRAM_INIT(rb)
456 455
diff --git a/apps/plugins/minesweeper.c b/apps/plugins/minesweeper.c
index 58e56de159..5793ddedf8 100644
--- a/apps/plugins/minesweeper.c
+++ b/apps/plugins/minesweeper.c
@@ -25,7 +25,7 @@
25 25
26#include "lib/playback_control.h" 26#include "lib/playback_control.h"
27 27
28PLUGIN_HEADER 28
29 29
30/* what the minesweeper() function can return */ 30/* what the minesweeper() function can return */
31enum minesweeper_status { 31enum minesweeper_status {
diff --git a/apps/plugins/mosaique.c b/apps/plugins/mosaique.c
index 43efc27d77..42c9254259 100644
--- a/apps/plugins/mosaique.c
+++ b/apps/plugins/mosaique.c
@@ -22,7 +22,7 @@
22#include "lib/playergfx.h" 22#include "lib/playergfx.h"
23#include "lib/mylcd.h" 23#include "lib/mylcd.h"
24 24
25PLUGIN_HEADER 25
26 26
27#ifdef HAVE_LCD_BITMAP 27#ifdef HAVE_LCD_BITMAP
28#define GFX_X (LCD_WIDTH/2-1) 28#define GFX_X (LCD_WIDTH/2-1)
diff --git a/apps/plugins/mp3_encoder.c b/apps/plugins/mp3_encoder.c
index da749b82c9..06d28a344a 100644
--- a/apps/plugins/mp3_encoder.c
+++ b/apps/plugins/mp3_encoder.c
@@ -14,7 +14,7 @@
14#include <inttypes.h> 14#include <inttypes.h>
15#include "plugin.h" 15#include "plugin.h"
16 16
17PLUGIN_HEADER 17
18PLUGIN_IRAM_DECLARE 18PLUGIN_IRAM_DECLARE
19 19
20#define SAMP_PER_FRAME 1152 20#define SAMP_PER_FRAME 1152
diff --git a/apps/plugins/mpegplayer/mpegplayer.c b/apps/plugins/mpegplayer/mpegplayer.c
index 961214f407..8142c6f43e 100644
--- a/apps/plugins/mpegplayer/mpegplayer.c
+++ b/apps/plugins/mpegplayer/mpegplayer.c
@@ -108,7 +108,7 @@
108#include "stream_thread.h" 108#include "stream_thread.h"
109#include "stream_mgr.h" 109#include "stream_mgr.h"
110 110
111PLUGIN_HEADER 111
112PLUGIN_IRAM_DECLARE 112PLUGIN_IRAM_DECLARE
113 113
114/* button definitions */ 114/* button definitions */
diff --git a/apps/plugins/nim.c b/apps/plugins/nim.c
index 460e2751e9..3301277410 100644
--- a/apps/plugins/nim.c
+++ b/apps/plugins/nim.c
@@ -48,7 +48,7 @@ V1.2 : 2003-07-30
48 take a match. Later you are obliged to take at least one.) 48 take a match. Later you are obliged to take at least one.)
49*/ 49*/
50 50
51PLUGIN_HEADER 51
52 52
53/*Pattern for the game*/ 53/*Pattern for the game*/
54static unsigned char smile[]={0x00, 0x11, 0x04, 0x04, 0x00, 0x11, 0x0E}; /* :-) */ 54static unsigned char smile[]={0x00, 0x11, 0x04, 0x04, 0x00, 0x11, 0x0E}; /* :-) */
@@ -144,6 +144,7 @@ enum plugin_status plugin_start(const void* parameter)
144 int x,v,min; 144 int x,v,min;
145 bool ok; 145 bool ok;
146 bool go; 146 bool go;
147 atexit(nim_exit);
147 148
148 /* if you don't use the parameter, you can do like 149 /* if you don't use the parameter, you can do like
149 this to avoid the compiler warning about it */ 150 this to avoid the compiler warning about it */
@@ -193,7 +194,6 @@ enum plugin_status plugin_start(const void* parameter)
193 { 194 {
194 case BUTTON_STOP|BUTTON_REL: 195 case BUTTON_STOP|BUTTON_REL:
195 go = true; 196 go = true;
196 nim_exit(NULL);
197 return PLUGIN_OK; 197 return PLUGIN_OK;
198 break; 198 break;
199 199
@@ -214,9 +214,7 @@ enum plugin_status plugin_start(const void* parameter)
214 break; 214 break;
215 215
216 default: 216 default:
217 if (rb->default_event_handler_ex(button, nim_exit, 217 exit_on_usb(button);
218 NULL) == SYS_USB_CONNECTED)
219 return PLUGIN_USB_CONNECTED;
220 break; 218 break;
221 } 219 }
222 display_first_line(x); 220 display_first_line(x);
@@ -291,7 +289,6 @@ enum plugin_status plugin_start(const void* parameter)
291 min=1; 289 min=1;
292 } 290 }
293 } 291 }
294 nim_exit(NULL);
295 return PLUGIN_OK; 292 return PLUGIN_OK;
296} 293}
297#endif 294#endif
diff --git a/apps/plugins/oscilloscope.c b/apps/plugins/oscilloscope.c
index 4195d96d5f..e9c21ff119 100644
--- a/apps/plugins/oscilloscope.c
+++ b/apps/plugins/oscilloscope.c
@@ -23,12 +23,13 @@
23 23
24#include "plugin.h" 24#include "plugin.h"
25#include "lib/helper.h" 25#include "lib/helper.h"
26#include "lib/pluginlib_exit.h"
26 27
27#ifdef HAVE_LCD_BITMAP 28#ifdef HAVE_LCD_BITMAP
28#include "lib/xlcd.h" 29#include "lib/xlcd.h"
29#include "lib/configfile.h" 30#include "lib/configfile.h"
30 31
31PLUGIN_HEADER 32
32 33
33/* variable button definitions */ 34/* variable button definitions */
34#if CONFIG_KEYPAD == RECORDER_PAD 35#if CONFIG_KEYPAD == RECORDER_PAD
@@ -751,9 +752,8 @@ void anim_vertical(int cur_left, int cur_right)
751 last_pos = cur_y; 752 last_pos = cur_y;
752} 753}
753 754
754void cleanup(void *parameter) 755void cleanup(void)
755{ 756{
756 (void)parameter;
757#if LCD_DEPTH > 1 757#if LCD_DEPTH > 1
758 rb->lcd_set_foreground(LCD_DEFAULT_FG); 758 rb->lcd_set_foreground(LCD_DEFAULT_FG);
759 rb->lcd_set_background(LCD_DEFAULT_BG); 759 rb->lcd_set_background(LCD_DEFAULT_BG);
@@ -772,6 +772,7 @@ enum plugin_status plugin_start(const void* parameter)
772 772
773 (void)parameter; 773 (void)parameter;
774 774
775 atexit(cleanup);
775 configfile_load(cfg_filename, disk_config, 776 configfile_load(cfg_filename, disk_config,
776 sizeof(disk_config) / sizeof(disk_config[0]), 777 sizeof(disk_config) / sizeof(disk_config[0]),
777 CFGFILE_MINVERSION); 778 CFGFILE_MINVERSION);
@@ -892,9 +893,7 @@ enum plugin_status plugin_start(const void* parameter)
892 break; 893 break;
893 894
894 default: 895 default:
895 if (rb->default_event_handler_ex(button, cleanup, NULL) 896 exit_on_usb(button);
896 == SYS_USB_CONNECTED)
897 return PLUGIN_USB_CONNECTED;
898 break; 897 break;
899 } 898 }
900 if (button != BUTTON_NONE) 899 if (button != BUTTON_NONE)
@@ -908,7 +907,6 @@ enum plugin_status plugin_start(const void* parameter)
908 displaymsg = true; 907 displaymsg = true;
909 } 908 }
910 } 909 }
911 cleanup(NULL);
912 if (rb->memcmp(&osc, &osc_disk, sizeof(osc))) /* save settings if changed */ 910 if (rb->memcmp(&osc, &osc_disk, sizeof(osc))) /* save settings if changed */
913 { 911 {
914 rb->memcpy(&osc_disk, &osc, sizeof(osc)); 912 rb->memcpy(&osc_disk, &osc, sizeof(osc));
diff --git a/apps/plugins/pacbox/pacbox.c b/apps/plugins/pacbox/pacbox.c
index 7f40822e0d..db25b1c0f1 100644
--- a/apps/plugins/pacbox/pacbox.c
+++ b/apps/plugins/pacbox/pacbox.c
@@ -32,7 +32,7 @@
32#include "lib/configfile.h" 32#include "lib/configfile.h"
33#include "lib/playback_control.h" 33#include "lib/playback_control.h"
34 34
35PLUGIN_HEADER 35
36PLUGIN_IRAM_DECLARE 36PLUGIN_IRAM_DECLARE
37 37
38struct pacman_settings { 38struct pacman_settings {
diff --git a/apps/plugins/pdbox/pdbox.c b/apps/plugins/pdbox/pdbox.c
index 4fa6978417..7f4a7ac6dc 100644
--- a/apps/plugins/pdbox/pdbox.c
+++ b/apps/plugins/pdbox/pdbox.c
@@ -28,7 +28,7 @@
28#include "PDa/src/s_stuff.h" 28#include "PDa/src/s_stuff.h"
29 29
30/* Welcome to the PDBox plugin */ 30/* Welcome to the PDBox plugin */
31PLUGIN_HEADER 31
32PLUGIN_IRAM_DECLARE 32PLUGIN_IRAM_DECLARE
33 33
34/* Name of the file to open. */ 34/* Name of the file to open. */
diff --git a/apps/plugins/pegbox.c b/apps/plugins/pegbox.c
index a429b00166..a953c6804b 100644
--- a/apps/plugins/pegbox.c
+++ b/apps/plugins/pegbox.c
@@ -26,7 +26,7 @@
26#include "pluginbitmaps/pegbox_header.h" 26#include "pluginbitmaps/pegbox_header.h"
27#include "pluginbitmaps/pegbox_pieces.h" 27#include "pluginbitmaps/pegbox_pieces.h"
28 28
29PLUGIN_HEADER 29
30 30
31#define CONFIG_FILE_NAME "pegbox.cfg" 31#define CONFIG_FILE_NAME "pegbox.cfg"
32 32
diff --git a/apps/plugins/pictureflow.c b/apps/plugins/pictureflow.c
index 75dc4052c5..738ca2f672 100644
--- a/apps/plugins/pictureflow.c
+++ b/apps/plugins/pictureflow.c
@@ -24,7 +24,7 @@
24 24
25#include "lib/overlay.h" 25#include "lib/overlay.h"
26 26
27PLUGIN_HEADER 27
28 28
29/* this is the plugin entry point */ 29/* this is the plugin entry point */
30enum plugin_status plugin_start(const void* parameter) 30enum plugin_status plugin_start(const void* parameter)
diff --git a/apps/plugins/pictureflow/pictureflow.c b/apps/plugins/pictureflow/pictureflow.c
index 546afad217..8ad62b0238 100644
--- a/apps/plugins/pictureflow/pictureflow.c
+++ b/apps/plugins/pictureflow/pictureflow.c
@@ -27,6 +27,7 @@
27#include <albumart.h> 27#include <albumart.h>
28#include "lib/read_image.h" 28#include "lib/read_image.h"
29#include "lib/pluginlib_actions.h" 29#include "lib/pluginlib_actions.h"
30#include "lib/pluginlib_exit.h"
30#include "lib/helper.h" 31#include "lib/helper.h"
31#include "lib/configfile.h" 32#include "lib/configfile.h"
32#include "lib/grey.h" 33#include "lib/grey.h"
@@ -34,7 +35,7 @@
34#include "lib/feature_wrappers.h" 35#include "lib/feature_wrappers.h"
35#include "lib/buflib.h" 36#include "lib/buflib.h"
36 37
37PLUGIN_HEADER 38
38 39
39/******************************* Globals ***********************************/ 40/******************************* Globals ***********************************/
40 41
@@ -2068,9 +2069,8 @@ void update_scroll_animation(void)
2068/** 2069/**
2069 Cleanup the plugin 2070 Cleanup the plugin
2070*/ 2071*/
2071void cleanup(void *parameter) 2072void cleanup(void)
2072{ 2073{
2073 (void) parameter;
2074 int i; 2074 int i;
2075#ifdef HAVE_ADJUSTABLE_CPU_FREQ 2075#ifdef HAVE_ADJUSTABLE_CPU_FREQ
2076 rb->cpu_boost(false); 2076 rb->cpu_boost(false);
@@ -2610,19 +2610,6 @@ int main(void)
2610 cache_version = CACHE_VERSION; 2610 cache_version = CACHE_VERSION;
2611 configfile_save(CONFIG_FILE, config, CONFIG_NUM_ITEMS, CONFIG_VERSION); 2611 configfile_save(CONFIG_FILE, config, CONFIG_NUM_ITEMS, CONFIG_VERSION);
2612 2612
2613
2614#ifdef USEGSLIB
2615 long grey_buf_used;
2616 if (!grey_init(buf, buf_size, GREY_BUFFERED|GREY_ON_COP,
2617 LCD_WIDTH, LCD_HEIGHT, &grey_buf_used))
2618 {
2619 error_wait("Greylib init failed!");
2620 return PLUGIN_ERROR;
2621 }
2622 grey_setfont(FONT_UI);
2623 buf_size -= grey_buf_used;
2624 buf = (void*)(grey_buf_used + (char*)buf);
2625#endif
2626 buflib_init(&buf_ctx, (void *)buf, buf_size); 2613 buflib_init(&buf_ctx, (void *)buf, buf_size);
2627 2614
2628 if (!(empty_slide_hid = read_pfraw(EMPTY_SLIDE, 0))) 2615 if (!(empty_slide_hid = read_pfraw(EMPTY_SLIDE, 0)))
@@ -2841,9 +2828,7 @@ int main(void)
2841 } 2828 }
2842 break; 2829 break;
2843 default: 2830 default:
2844 if (rb->default_event_handler_ex(button, cleanup, NULL) 2831 exit_on_usb(button);
2845 == SYS_USB_CONNECTED)
2846 return PLUGIN_USB_CONNECTED;
2847 break; 2832 break;
2848 } 2833 }
2849 } 2834 }
@@ -2855,6 +2840,7 @@ enum plugin_status plugin_start(const void *parameter)
2855{ 2840{
2856 int ret, i; 2841 int ret, i;
2857 (void) parameter; 2842 (void) parameter;
2843 atexit(cleanup);
2858 2844
2859 FOR_NB_SCREENS(i) 2845 FOR_NB_SCREENS(i)
2860 rb->viewportmanager_theme_enable(i, false, NULL); 2846 rb->viewportmanager_theme_enable(i, false, NULL);
@@ -2873,6 +2859,21 @@ enum plugin_status plugin_start(const void *parameter)
2873 } 2859 }
2874#endif 2860#endif
2875#endif 2861#endif
2862
2863#ifdef USEGSLIB
2864 long grey_buf_used;
2865 if (!grey_init(buf, buf_size, GREY_BUFFERED|GREY_ON_COP,
2866 LCD_WIDTH, LCD_HEIGHT, &grey_buf_used))
2867 {
2868 error_wait("Greylib init failed!");
2869 return PLUGIN_ERROR;
2870 }
2871 grey_setfont(FONT_UI);
2872 buf_size -= grey_buf_used;
2873 buf = (void*)(grey_buf_used + (char*)buf);
2874#endif
2875
2876 atexit(cleanup);
2876 ret = main(); 2877 ret = main();
2877 if ( ret == PLUGIN_OK || ret == PLUGIN_GOTO_WPS) { 2878 if ( ret == PLUGIN_OK || ret == PLUGIN_GOTO_WPS) {
2878 if (configfile_save(CONFIG_FILE, config, CONFIG_NUM_ITEMS, 2879 if (configfile_save(CONFIG_FILE, config, CONFIG_NUM_ITEMS,
@@ -2882,7 +2883,5 @@ enum plugin_status plugin_start(const void *parameter)
2882 ret = PLUGIN_ERROR; 2883 ret = PLUGIN_ERROR;
2883 } 2884 }
2884 } 2885 }
2885
2886 cleanup(NULL);
2887 return ret; 2886 return ret;
2888} 2887}
diff --git a/apps/plugins/pitch_detector.c b/apps/plugins/pitch_detector.c
index 36248a540d..b3003cd522 100644
--- a/apps/plugins/pitch_detector.c
+++ b/apps/plugins/pitch_detector.c
@@ -68,7 +68,7 @@
68#include "lib/helper.h" 68#include "lib/helper.h"
69#include "pluginbitmaps/pitch_notes.h" 69#include "pluginbitmaps/pitch_notes.h"
70 70
71PLUGIN_HEADER 71
72PLUGIN_IRAM_DECLARE 72PLUGIN_IRAM_DECLARE
73 73
74/* Some fixed point calculation stuff */ 74/* Some fixed point calculation stuff */
diff --git a/apps/plugins/plasma.c b/apps/plugins/plasma.c
index 637d948f3d..35bc03ba1f 100644
--- a/apps/plugins/plasma.c
+++ b/apps/plugins/plasma.c
@@ -27,6 +27,7 @@
27#include "plugin.h" 27#include "plugin.h"
28#include "lib/helper.h" 28#include "lib/helper.h"
29#include "lib/pluginlib_actions.h" 29#include "lib/pluginlib_actions.h"
30#include "lib/pluginlib_exit.h"
30 31
31#ifdef HAVE_LCD_BITMAP 32#ifdef HAVE_LCD_BITMAP
32 33
@@ -35,7 +36,6 @@
35#endif 36#endif
36#include "lib/fixedpoint.h" 37#include "lib/fixedpoint.h"
37 38
38PLUGIN_HEADER
39 39
40/******************************* Globals ***********************************/ 40/******************************* Globals ***********************************/
41 41
@@ -131,10 +131,8 @@ static void shades_generate(void)
131} 131}
132#endif 132#endif
133 133
134void cleanup(void *parameter) 134void cleanup(void)
135{ 135{
136 (void)parameter;
137
138#ifdef HAVE_ADJUSTABLE_CPU_FREQ 136#ifdef HAVE_ADJUSTABLE_CPU_FREQ
139 if (boosted) 137 if (boosted)
140 rb->cpu_boost(false); 138 rb->cpu_boost(false);
@@ -144,6 +142,9 @@ void cleanup(void *parameter)
144#endif 142#endif
145 /* Turn on backlight timeout (revert to settings) */ 143 /* Turn on backlight timeout (revert to settings) */
146 backlight_use_settings(); /* backlight control in lib/helper.c */ 144 backlight_use_settings(); /* backlight control in lib/helper.c */
145#if defined(HAVE_LCD_MODES) && (HAVE_LCD_MODES & LCD_MODE_PAL256)
146 rb->lcd_set_mode(LCD_MODE_RGB565);
147#endif
147} 148}
148 149
149/* 150/*
@@ -180,10 +181,15 @@ int main(void)
180 /* get the remainder of the plugin buffer */ 181 /* get the remainder of the plugin buffer */
181 gbuf = (unsigned char *) rb->plugin_get_buffer(&gbuf_size); 182 gbuf = (unsigned char *) rb->plugin_get_buffer(&gbuf_size);
182 183
183 grey_init(gbuf, gbuf_size, GREY_ON_COP, LCD_WIDTH, LCD_HEIGHT, NULL); 184 if (!grey_init(gbuf, gbuf_size, GREY_ON_COP, LCD_WIDTH, LCD_HEIGHT, NULL))
185 {
186 rb->splash(HZ, "Couldn't init greyscale display");
187 return PLUGIN_ERROR;
188 }
184 /* switch on greyscale overlay */ 189 /* switch on greyscale overlay */
185 grey_show(true); 190 grey_show(true);
186#endif 191#endif
192 atexit(cleanup);
187 sp1 = 4; 193 sp1 = 4;
188 sp2 = 2; 194 sp2 = 2;
189 sp3 = 4; 195 sp3 = 4;
@@ -261,7 +267,6 @@ int main(void)
261 { 267 {
262 case PLA_EXIT: 268 case PLA_EXIT:
263 case PLA_CANCEL: 269 case PLA_CANCEL:
264 cleanup(NULL);
265 return PLUGIN_OK; 270 return PLUGIN_OK;
266 break; 271 break;
267 272
@@ -299,9 +304,7 @@ int main(void)
299#endif 304#endif
300 305
301 default: 306 default:
302 if (rb->default_event_handler_ex(action, cleanup, NULL) 307 exit_on_usb(action);
303 == SYS_USB_CONNECTED)
304 return PLUGIN_USB_CONNECTED;
305 break; 308 break;
306 } 309 }
307 } 310 }
@@ -311,8 +314,6 @@ int main(void)
311 314
312enum plugin_status plugin_start(const void* parameter) 315enum plugin_status plugin_start(const void* parameter)
313{ 316{
314 int ret;
315
316 (void)parameter; 317 (void)parameter;
317#if LCD_DEPTH > 1 318#if LCD_DEPTH > 1
318 rb->lcd_set_backdrop(NULL); 319 rb->lcd_set_backdrop(NULL);
@@ -323,14 +324,7 @@ enum plugin_status plugin_start(const void* parameter)
323#if defined(HAVE_LCD_MODES) && (HAVE_LCD_MODES & LCD_MODE_PAL256) 324#if defined(HAVE_LCD_MODES) && (HAVE_LCD_MODES & LCD_MODE_PAL256)
324 rb->lcd_set_mode(LCD_MODE_PAL256); 325 rb->lcd_set_mode(LCD_MODE_PAL256);
325#endif 326#endif
326 327 return main();
327 ret = main();
328
329#if defined(HAVE_LCD_MODES) && (HAVE_LCD_MODES & LCD_MODE_PAL256)
330 rb->lcd_set_mode(LCD_MODE_RGB565);
331#endif
332
333 return ret;
334} 328}
335 329
336#endif /* HAVE_LCD_BITMAP */ 330#endif /* HAVE_LCD_BITMAP */
diff --git a/apps/plugins/plugin_crt0.c b/apps/plugins/plugin_crt0.c
new file mode 100755
index 0000000000..e9e2bcb8aa
--- /dev/null
+++ b/apps/plugins/plugin_crt0.c
@@ -0,0 +1,116 @@
1/***************************************************************************
2* __________ __ ___.
3* Open \______ \ ____ ____ | | _\_ |__ _______ ___
4* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7* \/ \/ \/ \/ \/
8* $Id$
9*
10* Copyright (C) 2010 by Thomas Martitz
11*
12* This program is free software; you can redistribute it and/or
13* modify it under the terms of the GNU General Public License
14* as published by the Free Software Foundation; either version 2
15* of the License, or (at your option) any later version.
16*
17* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18* KIND, either express or implied.
19*
20****************************************************************************/
21
22
23#include "plugin.h"
24#if (CONFIG_PLATFORM & PLATFORM_NATIVE)
25#include "../codecs/lib/setjmp.h"
26#else
27#include <setjmp.h>
28#endif
29
30PLUGIN_HEADER
31
32/*
33 * EXIT_MAGIC magic, because 0 cannot be used due to setjmp()
34 * must be > 0
35 */
36#define EXIT_MAGIC 0x0CDEBABE
37
38extern enum plugin_status plugin_start(const void*);
39
40static jmp_buf __exit_env;
41/* only 1 atexit handler for now, chain in the exit handler if you need more */
42static void (*atexit_handler)(void);
43
44int atexit(void (*fn)(void))
45{
46 if (atexit_handler)
47 return -1;
48 atexit_handler = fn;
49 return 0;
50}
51
52void exit(int status)
53{ /* jump back in time to before starting the plugin */
54 longjmp(__exit_env, status != 0 ? status : EXIT_MAGIC);
55}
56
57void _exit(int status)
58{ /* don't call exit handler */
59 atexit_handler = NULL;
60 exit(status);
61}
62
63enum plugin_status plugin__start(const void *param)
64{
65 int exit_ret;
66 enum plugin_status ret;
67
68 /* we come back here if exit() was called or the plugin returned normally */
69 exit_ret = setjmp(__exit_env);
70 if (exit_ret == 0)
71 { /* start the plugin */
72 ret = plugin_start(param);
73 }
74 else
75 { /* plugin exit via exit() */
76 if (exit_ret == EXIT_MAGIC)
77 { /* exit(EXIT_SUCCESS) */
78 ret = PLUGIN_OK;
79 }
80 else if (exit_ret < INTERNAL_PLUGIN_RETVAL_START)
81 { /* exit(EXIT_FAILURE) */
82 ret = PLUGIN_ERROR;
83 }
84 else
85 { /* exit(PLUGIN_XXX) */
86 ret = (enum plugin_status)exit_ret;
87 }
88 }
89
90 /* before finishing, call the exit handler if there was one */
91 if (atexit_handler != NULL)
92 atexit_handler();
93
94 return ret;
95}
96
97static void cleanup_wrapper(void *param)
98{
99 (void)param;
100 if (atexit_handler)
101 atexit_handler();
102}
103
104void exit_on_usb(int button)
105{ /* the default handler will call the exit handler before
106 * showing the usb screen; after that we don't want the exit handler
107 * to be called a second time, hence _exit()
108 *
109 * if not usb, then the handler will only be called if powering off
110 * if poweroff, the plugin doesn't want to run any further so exit as well*/
111 long result = rb->default_event_handler_ex(button, cleanup_wrapper, NULL);
112 if (result == SYS_USB_CONNECTED)
113 _exit(PLUGIN_USB_CONNECTED);
114 else if (result == SYS_POWEROFF)
115 _exit(PLUGIN_POWEROFF);
116}
diff --git a/apps/plugins/plugins.make b/apps/plugins/plugins.make
index d3c66c34ca..aa4b2ea713 100644
--- a/apps/plugins/plugins.make
+++ b/apps/plugins/plugins.make
@@ -33,7 +33,7 @@ PLUGIN_LDS := $(APPSDIR)/plugins/plugin.lds
33PLUGINLINK_LDS := $(BUILDDIR)/apps/plugins/plugin.link 33PLUGINLINK_LDS := $(BUILDDIR)/apps/plugins/plugin.link
34OVERLAYREF_LDS := $(BUILDDIR)/apps/plugins/overlay_ref.link 34OVERLAYREF_LDS := $(BUILDDIR)/apps/plugins/overlay_ref.link
35endif 35endif
36 36PLUGIN_CRT0 := $(BUILDDIR)/apps/plugins/plugin_crt0.o
37# multifile plugins (subdirs): 37# multifile plugins (subdirs):
38PLUGINSUBDIRS := $(call preprocess, $(APPSDIR)/plugins/SUBDIRS) 38PLUGINSUBDIRS := $(call preprocess, $(APPSDIR)/plugins/SUBDIRS)
39 39
@@ -49,7 +49,7 @@ PLUGINFLAGS = -I$(APPSDIR)/plugins -DPLUGIN $(CFLAGS)
49$(ROCKS1): $(BUILDDIR)/%.rock: $(BUILDDIR)/%.o 49$(ROCKS1): $(BUILDDIR)/%.rock: $(BUILDDIR)/%.o
50 50
51# dependency for all plugins 51# dependency for all plugins
52$(ROCKS): $(APPSDIR)/plugin.h $(PLUGINLINK_LDS) $(PLUGINLIB) $(PLUGINBITMAPLIB) 52$(ROCKS): $(APPSDIR)/plugin.h $(PLUGINLINK_LDS) $(PLUGINLIB) $(PLUGINBITMAPLIB) $(PLUGIN_CRT0)
53 53
54$(PLUGINLIB): $(PLUGINLIB_OBJ) 54$(PLUGINLIB): $(PLUGINLIB_OBJ)
55 $(SILENT)$(shell rm -f $@) 55 $(SILENT)$(shell rm -f $@)
diff --git a/apps/plugins/pong.c b/apps/plugins/pong.c
index 08899d767a..8a41d9eeb2 100644
--- a/apps/plugins/pong.c
+++ b/apps/plugins/pong.c
@@ -22,7 +22,7 @@
22 22
23#ifdef HAVE_LCD_BITMAP 23#ifdef HAVE_LCD_BITMAP
24 24
25PLUGIN_HEADER 25
26 26
27#define PAD_HEIGHT LCD_HEIGHT / 6 /* Recorder: 10 iRiver: 21 */ 27#define PAD_HEIGHT LCD_HEIGHT / 6 /* Recorder: 10 iRiver: 21 */
28#define PAD_WIDTH LCD_WIDTH / 50 /* Recorder: 2 iRiver: 2 */ 28#define PAD_WIDTH LCD_WIDTH / 50 /* Recorder: 2 iRiver: 2 */
diff --git a/apps/plugins/ppmviewer.c b/apps/plugins/ppmviewer.c
index c947af10bd..035fffe92a 100644
--- a/apps/plugins/ppmviewer.c
+++ b/apps/plugins/ppmviewer.c
@@ -24,7 +24,7 @@
24 24
25#if defined(HAVE_LCD_COLOR) 25#if defined(HAVE_LCD_COLOR)
26 26
27PLUGIN_HEADER 27
28 28
29/* Magic constants. */ 29/* Magic constants. */
30#define PPM_MAGIC1 'P' 30#define PPM_MAGIC1 'P'
diff --git a/apps/plugins/properties.c b/apps/plugins/properties.c
index 9d9020f023..2e34a4e048 100644
--- a/apps/plugins/properties.c
+++ b/apps/plugins/properties.c
@@ -20,7 +20,7 @@
20 ****************************************************************************/ 20 ****************************************************************************/
21#include "plugin.h" 21#include "plugin.h"
22 22
23PLUGIN_HEADER 23
24 24
25bool its_a_dir = false; 25bool its_a_dir = false;
26 26
diff --git a/apps/plugins/random_folder_advance_config.c b/apps/plugins/random_folder_advance_config.c
index 9a589dfff6..55d9bf99ab 100644
--- a/apps/plugins/random_folder_advance_config.c
+++ b/apps/plugins/random_folder_advance_config.c
@@ -21,7 +21,7 @@
21#include "plugin.h" 21#include "plugin.h"
22#include "file.h" 22#include "file.h"
23 23
24PLUGIN_HEADER 24
25 25
26static bool cancel; 26static bool cancel;
27static int fd; 27static int fd;
diff --git a/apps/plugins/remote_control.c b/apps/plugins/remote_control.c
index e00d5de54c..a5ad4423a1 100644
--- a/apps/plugins/remote_control.c
+++ b/apps/plugins/remote_control.c
@@ -23,7 +23,7 @@
23 23
24#include "lib/pluginlib_actions.h" 24#include "lib/pluginlib_actions.h"
25 25
26PLUGIN_HEADER 26
27 27
28#define PLUGIN_CONTINUE 10 28#define PLUGIN_CONTINUE 10
29 29
diff --git a/apps/plugins/reversi/reversi-gui.c b/apps/plugins/reversi/reversi-gui.c
index 67ccf19456..dcdfe5fd35 100644
--- a/apps/plugins/reversi/reversi-gui.c
+++ b/apps/plugins/reversi/reversi-gui.c
@@ -47,7 +47,7 @@ further options:
47 47
48#include "lib/playback_control.h" 48#include "lib/playback_control.h"
49 49
50PLUGIN_HEADER 50
51 51
52/* This is initialized at the start of the plugin and used to determine the 52/* This is initialized at the start of the plugin and used to determine the
53 * Appropriate game board size/legend spacing if the font is larger than a cell 53 * Appropriate game board size/legend spacing if the font is larger than a cell
diff --git a/apps/plugins/robotfindskitten.c b/apps/plugins/robotfindskitten.c
index 0e5c94ea7e..003087b5c3 100644
--- a/apps/plugins/robotfindskitten.c
+++ b/apps/plugins/robotfindskitten.c
@@ -34,7 +34,7 @@
34 34
35/* This macros must always be included. Should be placed at the top by 35/* This macros must always be included. Should be placed at the top by
36 convention, although the actual position doesn't matter */ 36 convention, although the actual position doesn't matter */
37PLUGIN_HEADER 37
38 38
39/*Be sure to change MESSAGES when you change the array, or bad things 39/*Be sure to change MESSAGES when you change the array, or bad things
40 will happen.*/ 40 will happen.*/
diff --git a/apps/plugins/rockblox.c b/apps/plugins/rockblox.c
index 084eaa5830..90df401ef9 100644
--- a/apps/plugins/rockblox.c
+++ b/apps/plugins/rockblox.c
@@ -28,7 +28,7 @@
28#include "lib/playergfx.h" 28#include "lib/playergfx.h"
29#include "lib/mylcd.h" 29#include "lib/mylcd.h"
30 30
31PLUGIN_HEADER 31
32 32
33#if (CONFIG_KEYPAD == IPOD_4G_PAD) || \ 33#if (CONFIG_KEYPAD == IPOD_4G_PAD) || \
34 (CONFIG_KEYPAD == IPOD_3G_PAD) || \ 34 (CONFIG_KEYPAD == IPOD_3G_PAD) || \
diff --git a/apps/plugins/rockblox1d.c b/apps/plugins/rockblox1d.c
index 5006d88a2d..1306cc9932 100644
--- a/apps/plugins/rockblox1d.c
+++ b/apps/plugins/rockblox1d.c
@@ -22,7 +22,7 @@
22 22
23#include "plugin.h" 23#include "plugin.h"
24 24
25PLUGIN_HEADER 25
26 26
27 27
28#ifdef HAVE_LCD_BITMAP 28#ifdef HAVE_LCD_BITMAP
diff --git a/apps/plugins/rockbox_flash.c b/apps/plugins/rockbox_flash.c
index 17c5e51ee2..f1c4f537da 100644
--- a/apps/plugins/rockbox_flash.c
+++ b/apps/plugins/rockbox_flash.c
@@ -25,7 +25,7 @@
25 25
26#if (CONFIG_CPU == SH7034) /* Only for SH targets */ 26#if (CONFIG_CPU == SH7034) /* Only for SH targets */
27 27
28PLUGIN_HEADER 28
29 29
30/* define DUMMY if you only want to "play" with the UI, does no harm */ 30/* define DUMMY if you only want to "play" with the UI, does no harm */
31/* #define DUMMY */ 31/* #define DUMMY */
diff --git a/apps/plugins/rockboy.c b/apps/plugins/rockboy.c
index bd72dea1f8..b4520733ae 100644
--- a/apps/plugins/rockboy.c
+++ b/apps/plugins/rockboy.c
@@ -24,7 +24,7 @@
24 24
25#include "lib/overlay.h" 25#include "lib/overlay.h"
26 26
27PLUGIN_HEADER 27
28 28
29/* this is the plugin entry point */ 29/* this is the plugin entry point */
30enum plugin_status plugin_start(const void* parameter) 30enum plugin_status plugin_start(const void* parameter)
diff --git a/apps/plugins/rockboy/rockboy.c b/apps/plugins/rockboy/rockboy.c
index 797971c734..7fc919912e 100644
--- a/apps/plugins/rockboy/rockboy.c
+++ b/apps/plugins/rockboy/rockboy.c
@@ -26,7 +26,7 @@
26#include "hw.h" 26#include "hw.h"
27#include "pcm.h" 27#include "pcm.h"
28 28
29PLUGIN_HEADER 29
30PLUGIN_IRAM_DECLARE 30PLUGIN_IRAM_DECLARE
31 31
32int shut,cleanshut; 32int shut,cleanshut;
diff --git a/apps/plugins/rocklife.c b/apps/plugins/rocklife.c
index 210cffa78d..afe442f989 100644
--- a/apps/plugins/rocklife.c
+++ b/apps/plugins/rocklife.c
@@ -64,7 +64,7 @@
64#include "lib/pluginlib_actions.h" 64#include "lib/pluginlib_actions.h"
65#include "lib/helper.h" 65#include "lib/helper.h"
66 66
67PLUGIN_HEADER 67
68 68
69#define ROCKLIFE_PLAY_PAUSE PLA_SELECT 69#define ROCKLIFE_PLAY_PAUSE PLA_SELECT
70#define ROCKLIFE_INIT PLA_DOWN 70#define ROCKLIFE_INIT PLA_DOWN
diff --git a/apps/plugins/rockpaint.c b/apps/plugins/rockpaint.c
index 264e4f6b14..7032a8e793 100644
--- a/apps/plugins/rockpaint.c
+++ b/apps/plugins/rockpaint.c
@@ -33,7 +33,7 @@
33#include "lib/rgb_hsv.h" 33#include "lib/rgb_hsv.h"
34#include "lib/playback_control.h" 34#include "lib/playback_control.h"
35 35
36PLUGIN_HEADER 36
37 37
38/*********************************************************************** 38/***********************************************************************
39 * Buttons 39 * Buttons
diff --git a/apps/plugins/search.c b/apps/plugins/search.c
index 7edb7e229a..76d8711feb 100644
--- a/apps/plugins/search.c
+++ b/apps/plugins/search.c
@@ -22,7 +22,7 @@
22#include "plugin.h" 22#include "plugin.h"
23#include <ctype.h> 23#include <ctype.h>
24 24
25PLUGIN_HEADER 25
26 26
27#define BUFFER_SIZE 16384 27#define BUFFER_SIZE 16384
28 28
diff --git a/apps/plugins/searchengine/searchengine.c b/apps/plugins/searchengine/searchengine.c
index f737a27621..4e8bc452f1 100644
--- a/apps/plugins/searchengine/searchengine.c
+++ b/apps/plugins/searchengine/searchengine.c
@@ -23,7 +23,7 @@
23#include "token.h" 23#include "token.h"
24#include "dbinterface.h" 24#include "dbinterface.h"
25 25
26PLUGIN_HEADER 26
27 27
28void *audio_bufferbase; 28void *audio_bufferbase;
29void *audio_bufferpointer; 29void *audio_bufferpointer;
diff --git a/apps/plugins/settings_dumper.c b/apps/plugins/settings_dumper.c
index 93c4f67657..381cdeebaa 100644
--- a/apps/plugins/settings_dumper.c
+++ b/apps/plugins/settings_dumper.c
@@ -20,7 +20,7 @@
20 ****************************************************************************/ 20 ****************************************************************************/
21#include "plugin.h" 21#include "plugin.h"
22 22
23PLUGIN_HEADER 23
24 24
25#define FILENAME "/settings_dumper.txt" 25#define FILENAME "/settings_dumper.txt"
26static int setting_count = 0; 26static int setting_count = 0;
diff --git a/apps/plugins/shopper.c b/apps/plugins/shopper.c
index b05395bec2..61cf2953af 100644
--- a/apps/plugins/shopper.c
+++ b/apps/plugins/shopper.c
@@ -21,7 +21,7 @@
21#include "plugin.h" 21#include "plugin.h"
22#include "lib/playback_control.h" 22#include "lib/playback_control.h"
23 23
24PLUGIN_HEADER 24
25 25
26#define MAX_LIST_SIZE 400 26#define MAX_LIST_SIZE 400
27#define DESC_SIZE 40 27#define DESC_SIZE 40
diff --git a/apps/plugins/shortcuts/shortcuts_append.c b/apps/plugins/shortcuts/shortcuts_append.c
index 69b2a445f3..3eea87e46e 100644
--- a/apps/plugins/shortcuts/shortcuts_append.c
+++ b/apps/plugins/shortcuts/shortcuts_append.c
@@ -22,7 +22,7 @@
22 22
23#include "shortcuts.h" 23#include "shortcuts.h"
24 24
25PLUGIN_HEADER 25
26 26
27 27
28bool append_entry_to_file(sc_file_t *file, char *path, bool is_dir) 28bool append_entry_to_file(sc_file_t *file, char *path, bool is_dir)
diff --git a/apps/plugins/shortcuts/shortcuts_view.c b/apps/plugins/shortcuts/shortcuts_view.c
index a63e26d7c6..469241fd84 100644
--- a/apps/plugins/shortcuts/shortcuts_view.c
+++ b/apps/plugins/shortcuts/shortcuts_view.c
@@ -22,7 +22,7 @@
22 22
23#include "shortcuts.h" 23#include "shortcuts.h"
24 24
25PLUGIN_HEADER 25
26 26
27enum sc_list_action_type 27enum sc_list_action_type
28{ 28{
diff --git a/apps/plugins/sliding_puzzle.c b/apps/plugins/sliding_puzzle.c
index 7bf49c123d..4d7d2c00ca 100644
--- a/apps/plugins/sliding_puzzle.c
+++ b/apps/plugins/sliding_puzzle.c
@@ -21,7 +21,7 @@
21#include "plugin.h" 21#include "plugin.h"
22 22
23#ifdef HAVE_LCD_BITMAP 23#ifdef HAVE_LCD_BITMAP
24PLUGIN_HEADER 24
25 25
26/* variable button definitions */ 26/* variable button definitions */
27#if CONFIG_KEYPAD == RECORDER_PAD 27#if CONFIG_KEYPAD == RECORDER_PAD
diff --git a/apps/plugins/snake.c b/apps/plugins/snake.c
index c3fe84e6d0..00a43e5cc7 100644
--- a/apps/plugins/snake.c
+++ b/apps/plugins/snake.c
@@ -38,7 +38,7 @@ dir is the current direction of the snake - 0=up, 1=right, 2=down, 3=left;
38#include "lib/highscore.h" 38#include "lib/highscore.h"
39#include "lib/playback_control.h" 39#include "lib/playback_control.h"
40 40
41PLUGIN_HEADER 41
42 42
43/* variable button definitions */ 43/* variable button definitions */
44#if CONFIG_KEYPAD == RECORDER_PAD 44#if CONFIG_KEYPAD == RECORDER_PAD
diff --git a/apps/plugins/snake2.c b/apps/plugins/snake2.c
index 414d924c4a..3fbf40b8f9 100644
--- a/apps/plugins/snake2.c
+++ b/apps/plugins/snake2.c
@@ -34,7 +34,7 @@ Head and Tail are stored
34#include "lib/highscore.h" 34#include "lib/highscore.h"
35#include "lib/playback_control.h" 35#include "lib/playback_control.h"
36 36
37PLUGIN_HEADER 37
38 38
39#define WIDTH 28 39#define WIDTH 28
40#define HEIGHT 16 40#define HEIGHT 16
diff --git a/apps/plugins/snow.c b/apps/plugins/snow.c
index c3c9b7458a..c9abae4b97 100644
--- a/apps/plugins/snow.c
+++ b/apps/plugins/snow.c
@@ -22,7 +22,7 @@
22#include "lib/playergfx.h" 22#include "lib/playergfx.h"
23#include "lib/mylcd.h" 23#include "lib/mylcd.h"
24 24
25PLUGIN_HEADER 25
26 26
27#ifdef HAVE_LCD_BITMAP 27#ifdef HAVE_LCD_BITMAP
28#define NUM_PARTICLES (LCD_WIDTH * LCD_HEIGHT / 72) 28#define NUM_PARTICLES (LCD_WIDTH * LCD_HEIGHT / 72)
diff --git a/apps/plugins/sokoban.c b/apps/plugins/sokoban.c
index b2721c84e9..6e94519803 100644
--- a/apps/plugins/sokoban.c
+++ b/apps/plugins/sokoban.c
@@ -24,7 +24,7 @@
24#include "plugin.h" 24#include "plugin.h"
25#include "lib/playback_control.h" 25#include "lib/playback_control.h"
26 26
27PLUGIN_HEADER 27
28 28
29#define SOKOBAN_TITLE "Sokoban" 29#define SOKOBAN_TITLE "Sokoban"
30 30
diff --git a/apps/plugins/solitaire.c b/apps/plugins/solitaire.c
index 1c7aefb1c3..1d2535f657 100644
--- a/apps/plugins/solitaire.c
+++ b/apps/plugins/solitaire.c
@@ -28,7 +28,7 @@
28 28
29#ifdef HAVE_LCD_BITMAP 29#ifdef HAVE_LCD_BITMAP
30 30
31PLUGIN_HEADER 31
32 32
33#define min(a,b) (a<b?a:b) 33#define min(a,b) (a<b?a:b)
34 34
diff --git a/apps/plugins/sort.c b/apps/plugins/sort.c
index 1e787b33dd..f8c3f5c248 100644
--- a/apps/plugins/sort.c
+++ b/apps/plugins/sort.c
@@ -57,7 +57,7 @@
57 * TODO: Implement a merge sort for files larger than the buffer 57 * TODO: Implement a merge sort for files larger than the buffer
58 ****************************************************************************/ 58 ****************************************************************************/
59 59
60PLUGIN_HEADER 60
61 61
62size_t buf_size; 62size_t buf_size;
63static char *filename; 63static char *filename;
diff --git a/apps/plugins/spacerocks.c b/apps/plugins/spacerocks.c
index 0ade406b59..2e7ccc0743 100644
--- a/apps/plugins/spacerocks.c
+++ b/apps/plugins/spacerocks.c
@@ -25,7 +25,7 @@
25#include "lib/highscore.h" 25#include "lib/highscore.h"
26#include "lib/playback_control.h" 26#include "lib/playback_control.h"
27 27
28PLUGIN_HEADER 28
29 29
30/* variable button definitions */ 30/* variable button definitions */
31#if CONFIG_KEYPAD == RECORDER_PAD 31#if CONFIG_KEYPAD == RECORDER_PAD
diff --git a/apps/plugins/splitedit.c b/apps/plugins/splitedit.c
index 3e5161b67f..c19d4b5e06 100644
--- a/apps/plugins/splitedit.c
+++ b/apps/plugins/splitedit.c
@@ -21,7 +21,7 @@
21 21
22#include "plugin.h" 22#include "plugin.h"
23 23
24PLUGIN_HEADER 24
25 25
26/* variable button definitions */ 26/* variable button definitions */
27#if CONFIG_KEYPAD == RECORDER_PAD 27#if CONFIG_KEYPAD == RECORDER_PAD
diff --git a/apps/plugins/star.c b/apps/plugins/star.c
index d11e3187db..c0f099775f 100644
--- a/apps/plugins/star.c
+++ b/apps/plugins/star.c
@@ -23,7 +23,7 @@
23#include "lib/display_text.h" 23#include "lib/display_text.h"
24#include "lib/playback_control.h" 24#include "lib/playback_control.h"
25 25
26PLUGIN_HEADER 26
27 27
28/* size of a level in file */ 28/* size of a level in file */
29#define STAR_LEVEL_SIZE ((STAR_WIDTH + 1) * STAR_HEIGHT + 1) 29#define STAR_LEVEL_SIZE ((STAR_WIDTH + 1) * STAR_HEIGHT + 1)
diff --git a/apps/plugins/starfield.c b/apps/plugins/starfield.c
index 1ae0f289ff..09f58da1f6 100644
--- a/apps/plugins/starfield.c
+++ b/apps/plugins/starfield.c
@@ -19,10 +19,11 @@
19 19
20#include "plugin.h" 20#include "plugin.h"
21#include "lib/helper.h" 21#include "lib/helper.h"
22#include "lib/pluginlib_exit.h"
22 23
23#ifdef HAVE_LCD_BITMAP /* and also not for the Player */ 24#ifdef HAVE_LCD_BITMAP /* and also not for the Player */
24 25
25PLUGIN_HEADER 26
26 27
27/******************************* Globals ***********************************/ 28/******************************* Globals ***********************************/
28 29
@@ -497,9 +498,11 @@ int plugin_main(void)
497 case STARFIELD_RC_QUIT: 498 case STARFIELD_RC_QUIT:
498#endif 499#endif
499 case(STARFIELD_QUIT): 500 case(STARFIELD_QUIT):
500 case(SYS_USB_CONNECTED):
501 return PLUGIN_OK; 501 return PLUGIN_OK;
502 break; 502 break;
503 default:
504 exit_on_usb(button);
505 break;
503 } 506 }
504 } 507 }
505} 508}
diff --git a/apps/plugins/stats.c b/apps/plugins/stats.c
index 3420579881..ecf335d3f0 100644
--- a/apps/plugins/stats.c
+++ b/apps/plugins/stats.c
@@ -20,7 +20,7 @@
20 ****************************************************************************/ 20 ****************************************************************************/
21#include "plugin.h" 21#include "plugin.h"
22 22
23PLUGIN_HEADER 23
24 24
25static int files, dirs, musicfiles, largestdir; 25static int files, dirs, musicfiles, largestdir;
26static int lasttick; 26static int lasttick;
diff --git a/apps/plugins/stopwatch.c b/apps/plugins/stopwatch.c
index b09dcdb030..6bac97ea2a 100644
--- a/apps/plugins/stopwatch.c
+++ b/apps/plugins/stopwatch.c
@@ -21,7 +21,7 @@
21 21
22#include "plugin.h" 22#include "plugin.h"
23 23
24PLUGIN_HEADER 24
25 25
26#ifdef HAVE_LCD_BITMAP 26#ifdef HAVE_LCD_BITMAP
27#define TIMER_Y 1 27#define TIMER_Y 1
diff --git a/apps/plugins/sudoku/sudoku.c b/apps/plugins/sudoku/sudoku.c
index f3d9b1e75f..4f87c5f4c8 100644
--- a/apps/plugins/sudoku/sudoku.c
+++ b/apps/plugins/sudoku/sudoku.c
@@ -81,7 +81,7 @@ Example ".ss" file, and one with a saved state:
81#define BITMAP_WIDTH BMPWIDTH_sudoku_normal 81#define BITMAP_WIDTH BMPWIDTH_sudoku_normal
82#endif 82#endif
83 83
84PLUGIN_HEADER 84
85 85
86/* Default game - used to initialise sudoku.ss if it doesn't exist. */ 86/* Default game - used to initialise sudoku.ss if it doesn't exist. */
87static const char default_game[9][9] = 87static const char default_game[9][9] =
diff --git a/apps/plugins/superdom.c b/apps/plugins/superdom.c
index c2a7d8f896..5ded7f9f12 100644
--- a/apps/plugins/superdom.c
+++ b/apps/plugins/superdom.c
@@ -22,7 +22,7 @@
22#include "lib/playback_control.h" 22#include "lib/playback_control.h"
23#include "lib/display_text.h" 23#include "lib/display_text.h"
24#include "pluginbitmaps/superdom_boarditems.h" 24#include "pluginbitmaps/superdom_boarditems.h"
25PLUGIN_HEADER 25
26 26
27extern const fb_data superdom_boarditems[]; 27extern const fb_data superdom_boarditems[];
28char buf[255]; 28char buf[255];
diff --git a/apps/plugins/test_boost.c b/apps/plugins/test_boost.c
index 2406990269..ec91206d1e 100644
--- a/apps/plugins/test_boost.c
+++ b/apps/plugins/test_boost.c
@@ -21,7 +21,7 @@
21 21
22#include "plugin.h" 22#include "plugin.h"
23 23
24PLUGIN_HEADER 24
25 25
26enum plugin_status plugin_start(const void* parameter) 26enum plugin_status plugin_start(const void* parameter)
27{ 27{
diff --git a/apps/plugins/test_codec.c b/apps/plugins/test_codec.c
index b8aa93d99b..94c510afef 100644
--- a/apps/plugins/test_codec.c
+++ b/apps/plugins/test_codec.c
@@ -20,7 +20,7 @@
20 ****************************************************************************/ 20 ****************************************************************************/
21#include "plugin.h" 21#include "plugin.h"
22 22
23PLUGIN_HEADER 23
24 24
25/* All swcodec targets have BUTTON_SELECT apart from the H10 and M3 */ 25/* All swcodec targets have BUTTON_SELECT apart from the H10 and M3 */
26 26
diff --git a/apps/plugins/test_core_jpeg.c b/apps/plugins/test_core_jpeg.c
index 9e7ecfd3f8..76dbac847e 100644
--- a/apps/plugins/test_core_jpeg.c
+++ b/apps/plugins/test_core_jpeg.c
@@ -22,7 +22,7 @@
22#include "plugin.h" 22#include "plugin.h"
23#include "lib/grey.h" 23#include "lib/grey.h"
24#include "lib/mylcd.h" 24#include "lib/mylcd.h"
25PLUGIN_HEADER 25
26 26
27/* different graphics libraries */ 27/* different graphics libraries */
28#if LCD_DEPTH < 8 28#if LCD_DEPTH < 8
diff --git a/apps/plugins/test_disk.c b/apps/plugins/test_disk.c
index 08e1a39704..2650f4b28b 100644
--- a/apps/plugins/test_disk.c
+++ b/apps/plugins/test_disk.c
@@ -22,7 +22,7 @@
22#include "plugin.h" 22#include "plugin.h"
23#include "lib/helper.h" 23#include "lib/helper.h"
24 24
25PLUGIN_HEADER 25
26 26
27#define TESTBASEDIR "/__TEST__" 27#define TESTBASEDIR "/__TEST__"
28#define TEST_FILE TESTBASEDIR "/test_disk.tmp" 28#define TEST_FILE TESTBASEDIR "/test_disk.tmp"
diff --git a/apps/plugins/test_fps.c b/apps/plugins/test_fps.c
index 62e7f489b0..80a8d88104 100644
--- a/apps/plugins/test_fps.c
+++ b/apps/plugins/test_fps.c
@@ -45,7 +45,7 @@ PLUGIN_IRAM_DECLARE
45 45
46#define DURATION (2*HZ) /* longer duration gives more precise results */ 46#define DURATION (2*HZ) /* longer duration gives more precise results */
47 47
48PLUGIN_HEADER 48
49 49
50/* Screen logging */ 50/* Screen logging */
51static int line; 51static int line;
diff --git a/apps/plugins/test_gfx.c b/apps/plugins/test_gfx.c
index 2c46d16b63..aa898549bb 100644
--- a/apps/plugins/test_gfx.c
+++ b/apps/plugins/test_gfx.c
@@ -35,7 +35,7 @@ static size_t gbuf_size = 0;
35#define DURATION (HZ) /* longer duration gives more precise results */ 35#define DURATION (HZ) /* longer duration gives more precise results */
36#define RND_SEED 0x43A678C3 /* arbirary */ 36#define RND_SEED 0x43A678C3 /* arbirary */
37 37
38PLUGIN_HEADER 38
39 39
40static uint16_t rand_table[0x400]; 40static uint16_t rand_table[0x400];
41static int log_fd; 41static int log_fd;
diff --git a/apps/plugins/test_grey.c b/apps/plugins/test_grey.c
index 31f63100aa..5931d96bd3 100644
--- a/apps/plugins/test_grey.c
+++ b/apps/plugins/test_grey.c
@@ -22,7 +22,7 @@
22#include "lib/grey.h" 22#include "lib/grey.h"
23#include "lib/helper.h" 23#include "lib/helper.h"
24 24
25PLUGIN_HEADER 25
26 26
27#if (CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD) \ 27#if (CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD) \
28 || (CONFIG_KEYPAD == IPOD_1G2G_PAD) 28 || (CONFIG_KEYPAD == IPOD_1G2G_PAD)
diff --git a/apps/plugins/test_greylib_bitmap_scale.c b/apps/plugins/test_greylib_bitmap_scale.c
index 892f3dc622..d096d0240b 100644
--- a/apps/plugins/test_greylib_bitmap_scale.c
+++ b/apps/plugins/test_greylib_bitmap_scale.c
@@ -44,7 +44,7 @@
44#define BMP_LOAD rb->read_bmp_file 44#define BMP_LOAD rb->read_bmp_file
45#endif 45#endif
46 46
47PLUGIN_HEADER 47
48GREY_INFO_STRUCT 48GREY_INFO_STRUCT
49static unsigned char grey_bm_buf[LCD_WIDTH * LCD_HEIGHT + 49static unsigned char grey_bm_buf[LCD_WIDTH * LCD_HEIGHT +
50 BM_SCALED_SIZE(LCD_WIDTH,0,FORMAT_NATIVE,0)]; 50 BM_SCALED_SIZE(LCD_WIDTH,0,FORMAT_NATIVE,0)];
diff --git a/apps/plugins/test_mem.c b/apps/plugins/test_mem.c
index f648c0073a..7758e35b98 100644
--- a/apps/plugins/test_mem.c
+++ b/apps/plugins/test_mem.c
@@ -21,7 +21,7 @@
21 21
22#include "plugin.h" 22#include "plugin.h"
23 23
24PLUGIN_HEADER 24
25 25
26#if PLUGIN_BUFFER_SIZE <= 0x8000 26#if PLUGIN_BUFFER_SIZE <= 0x8000
27#define BUF_SIZE (1<<12) /* 16 KB = (1<<12)*sizeof(int) */ 27#define BUF_SIZE (1<<12) /* 16 KB = (1<<12)*sizeof(int) */
diff --git a/apps/plugins/test_mem_jpeg.c b/apps/plugins/test_mem_jpeg.c
index 6e7d381a2d..72f613135a 100644
--- a/apps/plugins/test_mem_jpeg.c
+++ b/apps/plugins/test_mem_jpeg.c
@@ -25,7 +25,7 @@
25#include "lib/grey.h" 25#include "lib/grey.h"
26#include "lib/jpeg_mem.h" 26#include "lib/jpeg_mem.h"
27#include "lib/mylcd.h" 27#include "lib/mylcd.h"
28PLUGIN_HEADER 28
29 29
30/* different graphics libraries */ 30/* different graphics libraries */
31#if LCD_DEPTH < 8 31#if LCD_DEPTH < 8
diff --git a/apps/plugins/test_resize.c b/apps/plugins/test_resize.c
index 8ee4989bcf..2ab10eb7ee 100644
--- a/apps/plugins/test_resize.c
+++ b/apps/plugins/test_resize.c
@@ -28,7 +28,7 @@
28#include "lib/pluginlib_actions.h" 28#include "lib/pluginlib_actions.h"
29#include "lib/pluginlib_bmp.h" 29#include "lib/pluginlib_bmp.h"
30 30
31PLUGIN_HEADER 31
32 32
33const struct button_mapping *plugin_contexts[] 33const struct button_mapping *plugin_contexts[]
34= {pla_main_ctx}; 34= {pla_main_ctx};
diff --git a/apps/plugins/test_sampr.c b/apps/plugins/test_sampr.c
index 1f6ee351e1..85525c543b 100644
--- a/apps/plugins/test_sampr.c
+++ b/apps/plugins/test_sampr.c
@@ -28,7 +28,7 @@
28 * with sample rate. 28 * with sample rate.
29 */ 29 */
30 30
31PLUGIN_HEADER 31
32PLUGIN_IRAM_DECLARE; 32PLUGIN_IRAM_DECLARE;
33 33
34static int hw_freq IDATA_ATTR = HW_FREQ_DEFAULT; 34static int hw_freq IDATA_ATTR = HW_FREQ_DEFAULT;
diff --git a/apps/plugins/test_scanrate.c b/apps/plugins/test_scanrate.c
index 1aa9febf30..81d8248013 100644
--- a/apps/plugins/test_scanrate.c
+++ b/apps/plugins/test_scanrate.c
@@ -23,7 +23,7 @@
23 23
24#if defined(HAVE_LCD_BITMAP) && (LCD_DEPTH < 4) && !defined(SIMULATOR) 24#if defined(HAVE_LCD_BITMAP) && (LCD_DEPTH < 4) && !defined(SIMULATOR)
25 25
26PLUGIN_HEADER 26
27 27
28#if (CONFIG_KEYPAD == RECORDER_PAD) || (CONFIG_KEYPAD == ONDIO_PAD) \ 28#if (CONFIG_KEYPAD == RECORDER_PAD) || (CONFIG_KEYPAD == ONDIO_PAD) \
29 || (CONFIG_KEYPAD == IRIVER_H100_PAD) 29 || (CONFIG_KEYPAD == IRIVER_H100_PAD)
diff --git a/apps/plugins/test_touchscreen.c b/apps/plugins/test_touchscreen.c
index 902a2bd089..0c9cdc7302 100644
--- a/apps/plugins/test_touchscreen.c
+++ b/apps/plugins/test_touchscreen.c
@@ -20,7 +20,7 @@
20 ****************************************************************************/ 20 ****************************************************************************/
21#include "plugin.h" 21#include "plugin.h"
22 22
23PLUGIN_HEADER 23
24 24
25#if (CONFIG_KEYPAD == COWON_D2_PAD) 25#if (CONFIG_KEYPAD == COWON_D2_PAD)
26#define TOUCHSCREEN_QUIT BUTTON_POWER 26#define TOUCHSCREEN_QUIT BUTTON_POWER
diff --git a/apps/plugins/test_viewports.c b/apps/plugins/test_viewports.c
index 08c23a91c8..be61c7792e 100644
--- a/apps/plugins/test_viewports.c
+++ b/apps/plugins/test_viewports.c
@@ -21,7 +21,7 @@
21 21
22#include "plugin.h" 22#include "plugin.h"
23 23
24PLUGIN_HEADER 24
25 25
26#ifdef HAVE_LCD_BITMAP 26#ifdef HAVE_LCD_BITMAP
27 27
diff --git a/apps/plugins/text_editor.c b/apps/plugins/text_editor.c
index acd82b8794..ceb71e4495 100644
--- a/apps/plugins/text_editor.c
+++ b/apps/plugins/text_editor.c
@@ -22,7 +22,7 @@
22#include "lib/playback_control.h" 22#include "lib/playback_control.h"
23 23
24#define MAX_LINE_LEN 2048 24#define MAX_LINE_LEN 2048
25PLUGIN_HEADER 25
26 26
27static unsigned char *buffer; 27static unsigned char *buffer;
28static size_t buffer_size; 28static size_t buffer_size;
diff --git a/apps/plugins/text_viewer/text_viewer.c b/apps/plugins/text_viewer/text_viewer.c
index eae85213ac..5d06d4b477 100644
--- a/apps/plugins/text_viewer/text_viewer.c
+++ b/apps/plugins/text_viewer/text_viewer.c
@@ -21,11 +21,12 @@
21 * 21 *
22 ****************************************************************************/ 22 ****************************************************************************/
23#include "plugin.h" 23#include "plugin.h"
24#include "lib/pluginlib_exit.h"
24#include "tv_action.h" 25#include "tv_action.h"
25#include "tv_button.h" 26#include "tv_button.h"
26#include "tv_preferences.h" 27#include "tv_preferences.h"
27 28
28PLUGIN_HEADER 29
29 30
30enum plugin_status plugin_start(const void* file) 31enum plugin_status plugin_start(const void* file)
31{ 32{
@@ -56,6 +57,7 @@ enum plugin_status plugin_start(const void* file)
56 return PLUGIN_ERROR; 57 return PLUGIN_ERROR;
57 } 58 }
58 59
60 atexit(tv_exit);
59 while (!done) { 61 while (!done) {
60#ifdef HAVE_LCD_BITMAP 62#ifdef HAVE_LCD_BITMAP
61 if (rb->global_settings->statusbar != STATUSBAR_OFF && preferences->statusbar) 63 if (rb->global_settings->statusbar != STATUSBAR_OFF && preferences->statusbar)
@@ -79,12 +81,12 @@ enum plugin_status plugin_start(const void* file)
79 81
80 if (res != TV_MENU_RESULT_EXIT_MENU) 82 if (res != TV_MENU_RESULT_EXIT_MENU)
81 { 83 {
82 tv_exit(NULL);
83 done = true;
84 if (res == TV_MENU_RESULT_ATTACHED_USB) 84 if (res == TV_MENU_RESULT_ATTACHED_USB)
85 return PLUGIN_USB_CONNECTED; 85 return PLUGIN_USB_CONNECTED;
86 else if (res == TV_MENU_RESULT_ERROR) 86 else if (res == TV_MENU_RESULT_ERROR)
87 return PLUGIN_ERROR; 87 return PLUGIN_ERROR;
88 else
89 done = true;
88 } 90 }
89 } 91 }
90 break; 92 break;
@@ -195,7 +197,6 @@ enum plugin_status plugin_start(const void* file)
195#ifdef TV_QUIT2 197#ifdef TV_QUIT2
196 case TV_QUIT2: 198 case TV_QUIT2:
197#endif 199#endif
198 tv_exit(NULL);
199 done = true; 200 done = true;
200 break; 201 break;
201 202
@@ -204,9 +205,7 @@ enum plugin_status plugin_start(const void* file)
204 break; 205 break;
205 206
206 default: 207 default:
207 if (rb->default_event_handler_ex(button, tv_exit, NULL) 208 exit_on_usb(button);
208 == SYS_USB_CONNECTED)
209 return PLUGIN_USB_CONNECTED;
210 display_update = false; 209 display_update = false;
211 break; 210 break;
212 } 211 }
diff --git a/apps/plugins/text_viewer/tv_action.c b/apps/plugins/text_viewer/tv_action.c
index c95ece0649..1e5473b438 100644
--- a/apps/plugins/text_viewer/tv_action.c
+++ b/apps/plugins/text_viewer/tv_action.c
@@ -47,10 +47,8 @@ static void tv_finalize_action(void)
47 tv_finalize_window(); 47 tv_finalize_window();
48} 48}
49 49
50void tv_exit(void *parameter) 50void tv_exit(void)
51{ 51{
52 (void)parameter;
53
54 /* save preference and bookmarks */ 52 /* save preference and bookmarks */
55 if (!tv_save_settings()) 53 if (!tv_save_settings())
56 rb->splash(HZ, "Can't save preferences and bookmarks"); 54 rb->splash(HZ, "Can't save preferences and bookmarks");
diff --git a/apps/plugins/text_viewer/tv_action.h b/apps/plugins/text_viewer/tv_action.h
index fba008dbe9..5b3571db30 100644
--- a/apps/plugins/text_viewer/tv_action.h
+++ b/apps/plugins/text_viewer/tv_action.h
@@ -58,11 +58,8 @@ bool tv_init_action(unsigned char **buf, size_t *bufsize);
58 58
59/* 59/*
60 * finalize modules 60 * finalize modules
61 *
62 * [In] parameter
63 * this argument does not use
64 */ 61 */
65void tv_exit(void *parameter); 62void tv_exit(void);
66 63
67/* 64/*
68 * load the file 65 * load the file
diff --git a/apps/plugins/theme_remove.c b/apps/plugins/theme_remove.c
index f818ac4afe..d679338ff8 100644
--- a/apps/plugins/theme_remove.c
+++ b/apps/plugins/theme_remove.c
@@ -20,7 +20,7 @@
20#include "plugin.h" 20#include "plugin.h"
21#include "lib/configfile.h" 21#include "lib/configfile.h"
22 22
23PLUGIN_HEADER 23
24 24
25/* taken from apps/gui/wps_parser.c */ 25/* taken from apps/gui/wps_parser.c */
26#define WPS_DEFAULTCFG WPS_DIR "/rockbox_default.wps" 26#define WPS_DEFAULTCFG WPS_DIR "/rockbox_default.wps"
diff --git a/apps/plugins/vbrfix.c b/apps/plugins/vbrfix.c
index ba13dc53f9..71c502bc67 100644
--- a/apps/plugins/vbrfix.c
+++ b/apps/plugins/vbrfix.c
@@ -20,7 +20,7 @@
20 ****************************************************************************/ 20 ****************************************************************************/
21#include "plugin.h" 21#include "plugin.h"
22 22
23PLUGIN_HEADER 23
24 24
25static char *audiobuf; 25static char *audiobuf;
26static size_t audiobuflen; 26static size_t audiobuflen;
diff --git a/apps/plugins/video.c b/apps/plugins/video.c
index 6b0a47c7c6..869a053886 100644
--- a/apps/plugins/video.c
+++ b/apps/plugins/video.c
@@ -33,7 +33,7 @@
33 33
34#ifdef HAVE_LCD_BITMAP /* and definitely not for the Player, haha */ 34#ifdef HAVE_LCD_BITMAP /* and definitely not for the Player, haha */
35 35
36PLUGIN_HEADER 36
37 37
38/* variable button definitions */ 38/* variable button definitions */
39#if CONFIG_KEYPAD == RECORDER_PAD 39#if CONFIG_KEYPAD == RECORDER_PAD
diff --git a/apps/plugins/vu_meter.c b/apps/plugins/vu_meter.c
index fc04bc7842..6dc69d1d4e 100644
--- a/apps/plugins/vu_meter.c
+++ b/apps/plugins/vu_meter.c
@@ -21,7 +21,7 @@
21#include "lib/fixedpoint.h" 21#include "lib/fixedpoint.h"
22#include "lib/playback_control.h" 22#include "lib/playback_control.h"
23 23
24PLUGIN_HEADER 24
25 25
26/* variable button definitions */ 26/* variable button definitions */
27#if CONFIG_KEYPAD == RECORDER_PAD 27#if CONFIG_KEYPAD == RECORDER_PAD
diff --git a/apps/plugins/wav2wv.c b/apps/plugins/wav2wv.c
index 3211203db9..98b4c0fe4f 100644
--- a/apps/plugins/wav2wv.c
+++ b/apps/plugins/wav2wv.c
@@ -25,7 +25,7 @@
25 25
26#include <codecs/libwavpack/wavpack.h> 26#include <codecs/libwavpack/wavpack.h>
27 27
28PLUGIN_HEADER 28
29 29
30#define SAMPLES_PER_BLOCK 22050 30#define SAMPLES_PER_BLOCK 22050
31 31
diff --git a/apps/plugins/wavplay.c b/apps/plugins/wavplay.c
index 94fef9faa0..cbd4dfbeda 100644
--- a/apps/plugins/wavplay.c
+++ b/apps/plugins/wavplay.c
@@ -20,7 +20,7 @@
20 ****************************************************************************/ 20 ****************************************************************************/
21#include "plugin.h" 21#include "plugin.h"
22 22
23PLUGIN_HEADER 23
24 24
25/************ Start of MAS pcm codec, raw i2c blocks ************/ 25/************ Start of MAS pcm codec, raw i2c blocks ************/
26 26
diff --git a/apps/plugins/wavrecord.c b/apps/plugins/wavrecord.c
index 83b63e9805..375642ec4b 100644
--- a/apps/plugins/wavrecord.c
+++ b/apps/plugins/wavrecord.c
@@ -21,7 +21,7 @@
21#include "plugin.h" 21#include "plugin.h"
22#include "lib/configfile.h" 22#include "lib/configfile.h"
23 23
24PLUGIN_HEADER 24
25 25
26/************ Start of MAS pcm codec, raw i2c blocks ************/ 26/************ Start of MAS pcm codec, raw i2c blocks ************/
27 27
diff --git a/apps/plugins/wavview.c b/apps/plugins/wavview.c
index 2b19d3d18a..ddf72e10af 100644
--- a/apps/plugins/wavview.c
+++ b/apps/plugins/wavview.c
@@ -20,7 +20,7 @@
20 ****************************************************************************/ 20 ****************************************************************************/
21#include "plugin.h" 21#include "plugin.h"
22 22
23PLUGIN_HEADER 23
24 24
25/* temp byte buffer */ 25/* temp byte buffer */
26uint8_t samples[10 * 1024]; /* read 10KB at the time */ 26uint8_t samples[10 * 1024]; /* read 10KB at the time */
diff --git a/apps/plugins/wormlet.c b/apps/plugins/wormlet.c
index 037f4005a2..191c995ad6 100644
--- a/apps/plugins/wormlet.c
+++ b/apps/plugins/wormlet.c
@@ -23,7 +23,7 @@
23#include "lib/helper.h" 23#include "lib/helper.h"
24#include "lib/playback_control.h" 24#include "lib/playback_control.h"
25 25
26PLUGIN_HEADER 26
27 27
28/* size of the field the worm lives in */ 28/* size of the field the worm lives in */
29#define FIELD_RECT_X 1 29#define FIELD_RECT_X 1
diff --git a/apps/plugins/xobox.c b/apps/plugins/xobox.c
index 4dd673c370..871cb2bdf5 100644
--- a/apps/plugins/xobox.c
+++ b/apps/plugins/xobox.c
@@ -24,7 +24,7 @@
24#include "lib/helper.h" 24#include "lib/helper.h"
25#include "lib/playback_control.h" 25#include "lib/playback_control.h"
26 26
27PLUGIN_HEADER 27
28 28
29#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) 29#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD)
30 30
diff --git a/apps/plugins/zxbox.c b/apps/plugins/zxbox.c
index 94f7807bad..08e07d582a 100644
--- a/apps/plugins/zxbox.c
+++ b/apps/plugins/zxbox.c
@@ -21,7 +21,7 @@
21 21
22#include "lib/overlay.h" 22#include "lib/overlay.h"
23 23
24PLUGIN_HEADER 24
25 25
26/* this is the plugin entry point */ 26/* this is the plugin entry point */
27enum plugin_status plugin_start(const void* parameter) 27enum plugin_status plugin_start(const void* parameter)
diff --git a/apps/plugins/zxbox/zxbox.c b/apps/plugins/zxbox/zxbox.c
index f33b51b9f6..459e0625b9 100644
--- a/apps/plugins/zxbox/zxbox.c
+++ b/apps/plugins/zxbox/zxbox.c
@@ -21,7 +21,7 @@
21 21
22#include "zxconfig.h" 22#include "zxconfig.h"
23 23
24PLUGIN_HEADER 24
25PLUGIN_IRAM_DECLARE 25PLUGIN_IRAM_DECLARE
26 26
27#include "spkey_p.h" 27#include "spkey_p.h"