summaryrefslogtreecommitdiff
path: root/apps/plugins
diff options
context:
space:
mode:
authorAndrew Mahone <andrew.mahone@gmail.com>2009-01-16 10:34:40 +0000
committerAndrew Mahone <andrew.mahone@gmail.com>2009-01-16 10:34:40 +0000
commit23d9812273d9c74af72ccdc3aa4cfea971f220a4 (patch)
tree8e60c3a2a41879f8b2a52516fa416b3ab906e239 /apps/plugins
parent35677cbc54bbe400ebbff59b489dda7ca7f04916 (diff)
downloadrockbox-23d9812273d9c74af72ccdc3aa4cfea971f220a4.tar.gz
rockbox-23d9812273d9c74af72ccdc3aa4cfea971f220a4.zip
loader-initialized global plugin API:
struct plugin_api *rb is declared in PLUGIN_HEADER, and pointed to by __header.api the loader uses this pointer to initialize rb before calling entry_point entry_point is no longer passed a pointer to the plugin API all plugins, and pluginlib functions, are modified to refer to the global rb pluginlib functions which only served to copy the API pointer are removed git-svn-id: svn://svn.rockbox.org/rockbox/trunk@19776 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/plugins')
-rw-r--r--apps/plugins/alpine_cdc.c8
-rw-r--r--apps/plugins/battery_bench.c6
-rw-r--r--apps/plugins/beatbox/beatbox.c8
-rw-r--r--apps/plugins/blackjack.c8
-rw-r--r--apps/plugins/bounce.c6
-rw-r--r--apps/plugins/brickmania.c10
-rw-r--r--apps/plugins/bubbles.c13
-rw-r--r--apps/plugins/calculator.c6
-rw-r--r--apps/plugins/calendar.c8
-rw-r--r--apps/plugins/chessbox.c4
-rw-r--r--apps/plugins/chessbox/chessbox.c29
-rw-r--r--apps/plugins/chessbox/chessbox_pgn.c29
-rw-r--r--apps/plugins/chessbox/chessbox_pgn.h16
-rw-r--r--apps/plugins/chessbox/gnuchess.c3
-rw-r--r--apps/plugins/chessbox/gnuchess.h3
-rw-r--r--apps/plugins/chessclock.c9
-rw-r--r--apps/plugins/chip8.c6
-rw-r--r--apps/plugins/chopper.c11
-rw-r--r--apps/plugins/clock/clock.c8
-rw-r--r--apps/plugins/clock/clock.h1
-rw-r--r--apps/plugins/credits.c9
-rw-r--r--apps/plugins/cube.c13
-rw-r--r--apps/plugins/demystify.c15
-rw-r--r--apps/plugins/dice.c7
-rw-r--r--apps/plugins/dict.c5
-rw-r--r--apps/plugins/disktidy.c6
-rw-r--r--apps/plugins/doom/i_video.c2
-rw-r--r--apps/plugins/doom/rockdoom.c18
-rw-r--r--apps/plugins/doom/rockmacros.h1
-rw-r--r--apps/plugins/euroconverter.c10
-rw-r--r--apps/plugins/fire.c13
-rw-r--r--apps/plugins/fireworks.c12
-rw-r--r--apps/plugins/firmware_flash.c6
-rw-r--r--apps/plugins/flipit.c4
-rw-r--r--apps/plugins/greyscale.c10
-rw-r--r--apps/plugins/helloworld.c11
-rw-r--r--apps/plugins/invadrox.c11
-rw-r--r--apps/plugins/iriver_flash.c6
-rw-r--r--apps/plugins/iriverify.c6
-rw-r--r--apps/plugins/jackpot.c7
-rw-r--r--apps/plugins/jewels.c8
-rw-r--r--apps/plugins/jpeg/jpeg.c23
-rw-r--r--apps/plugins/jpeg/jpeg_decoder.c2
-rw-r--r--apps/plugins/jpeg/yuv2rgb.c3
-rw-r--r--apps/plugins/keybox.c9
-rw-r--r--apps/plugins/lamp.c13
-rw-r--r--apps/plugins/lib/checkbox.c14
-rw-r--r--apps/plugins/lib/checkbox.h2
-rw-r--r--apps/plugins/lib/configfile.c79
-rw-r--r--apps/plugins/lib/configfile.h2
-rw-r--r--apps/plugins/lib/grey.h3
-rw-r--r--apps/plugins/lib/grey_core.c68
-rw-r--r--apps/plugins/lib/grey_draw.c22
-rw-r--r--apps/plugins/lib/grey_parm.c4
-rw-r--r--apps/plugins/lib/grey_scroll.c40
-rw-r--r--apps/plugins/lib/helper.c17
-rw-r--r--apps/plugins/lib/helper.h17
-rw-r--r--apps/plugins/lib/highscore.c7
-rw-r--r--apps/plugins/lib/highscore.h1
-rw-r--r--apps/plugins/lib/md5.c7
-rw-r--r--apps/plugins/lib/md5.h2
-rw-r--r--apps/plugins/lib/oldmenuapi.c5
-rw-r--r--apps/plugins/lib/oldmenuapi.h2
-rw-r--r--apps/plugins/lib/overlay.c5
-rw-r--r--apps/plugins/lib/overlay.h2
-rw-r--r--apps/plugins/lib/playback_control.c51
-rw-r--r--apps/plugins/lib/playback_control.h6
-rw-r--r--apps/plugins/lib/playergfx.c18
-rw-r--r--apps/plugins/lib/playergfx.h2
-rw-r--r--apps/plugins/lib/pluginlib_actions.c4
-rw-r--r--apps/plugins/lib/pluginlib_actions.h2
-rw-r--r--apps/plugins/lib/pluginlib_bmp.c9
-rw-r--r--apps/plugins/lib/pluginlib_bmp.h12
-rw-r--r--apps/plugins/lib/pluginlib_resize.h29
-rw-r--r--apps/plugins/lib/profile_plugin.c13
-rw-r--r--apps/plugins/lib/profile_plugin.h2
-rw-r--r--apps/plugins/lib/xlcd.h4
-rw-r--r--apps/plugins/lib/xlcd_core.c12
-rw-r--r--apps/plugins/lib/xlcd_draw.c6
-rw-r--r--apps/plugins/lib/xlcd_scroll.c132
-rw-r--r--apps/plugins/logo.c5
-rw-r--r--apps/plugins/mandelbrot.c9
-rw-r--r--apps/plugins/matrix.c6
-rw-r--r--apps/plugins/maze.c12
-rw-r--r--apps/plugins/mazezam.c19
-rw-r--r--apps/plugins/md5sum.c10
-rw-r--r--apps/plugins/metronome.c11
-rw-r--r--apps/plugins/midi/guspat.c2
-rw-r--r--apps/plugins/midi/midifile.c2
-rw-r--r--apps/plugins/midi/midiplay.c6
-rw-r--r--apps/plugins/midi/midiutil.c2
-rw-r--r--apps/plugins/midi/sequencer.c1
-rw-r--r--apps/plugins/midi/synth.c2
-rw-r--r--apps/plugins/minesweeper.c9
-rw-r--r--apps/plugins/mosaique.c5
-rw-r--r--apps/plugins/mp3_encoder.c9
-rw-r--r--apps/plugins/mpegplayer/decode.c2
-rw-r--r--apps/plugins/mpegplayer/header.c2
-rw-r--r--apps/plugins/mpegplayer/mpeg_settings.c14
-rw-r--r--apps/plugins/mpegplayer/mpegplayer.c18
-rw-r--r--apps/plugins/mpegplayer/mpegplayer.h3
-rw-r--r--apps/plugins/mpegplayer/stream_mgr.c2
-rw-r--r--apps/plugins/nim.c8
-rw-r--r--apps/plugins/oscilloscope.c12
-rw-r--r--apps/plugins/pacbox/arcade.c2
-rw-r--r--apps/plugins/pacbox/hardware.c2
-rw-r--r--apps/plugins/pacbox/pacbox.c11
-rw-r--r--apps/plugins/pegbox.c5
-rw-r--r--apps/plugins/pictureflow.c14
-rw-r--r--apps/plugins/plasma.c10
-rw-r--r--apps/plugins/pong.c6
-rw-r--r--apps/plugins/ppmviewer.c6
-rw-r--r--apps/plugins/properties.c7
-rw-r--r--apps/plugins/random_folder_advance_config.c10
-rw-r--r--apps/plugins/reversi/reversi-game.h2
-rw-r--r--apps/plugins/reversi/reversi-gui.c14
-rw-r--r--apps/plugins/reversi/reversi-strategy-naive.c2
-rw-r--r--apps/plugins/reversi/reversi-strategy-simple.c7
-rw-r--r--apps/plugins/robotfindskitten.c12
-rw-r--r--apps/plugins/rockblox.c17
-rw-r--r--apps/plugins/rockblox1d.c5
-rw-r--r--apps/plugins/rockbox_flash.c6
-rw-r--r--apps/plugins/rockboy.c4
-rw-r--r--apps/plugins/rockboy/menu.c6
-rw-r--r--apps/plugins/rockboy/rockboy.c12
-rw-r--r--apps/plugins/rockboy/rockmacros.h1
-rw-r--r--apps/plugins/rocklife.c12
-rw-r--r--apps/plugins/rockpaint.c11
-rw-r--r--apps/plugins/search.c6
-rw-r--r--apps/plugins/searchengine/searchengine.c6
-rw-r--r--apps/plugins/searchengine/searchengine.h2
-rw-r--r--apps/plugins/settings_dumper.c4
-rw-r--r--apps/plugins/shortcuts/shortcuts.h2
-rw-r--r--apps/plugins/shortcuts/shortcuts_append.c3
-rw-r--r--apps/plugins/shortcuts/shortcuts_common.c2
-rw-r--r--apps/plugins/shortcuts/shortcuts_view.c3
-rw-r--r--apps/plugins/sliding_puzzle.c6
-rw-r--r--apps/plugins/snake.c4
-rw-r--r--apps/plugins/snake2.c4
-rw-r--r--apps/plugins/snow.c6
-rw-r--r--apps/plugins/sokoban.c8
-rw-r--r--apps/plugins/solitaire.c9
-rw-r--r--apps/plugins/sort.c6
-rw-r--r--apps/plugins/spacerocks.c8
-rw-r--r--apps/plugins/splitedit.c6
-rw-r--r--apps/plugins/star.c5
-rw-r--r--apps/plugins/starfield.c11
-rw-r--r--apps/plugins/stats.c4
-rw-r--r--apps/plugins/stopwatch.c5
-rw-r--r--apps/plugins/sudoku/generator.c2
-rw-r--r--apps/plugins/sudoku/sudoku.c19
-rw-r--r--apps/plugins/superdom.c5
-rw-r--r--apps/plugins/test_codec.c8
-rw-r--r--apps/plugins/test_disk.c10
-rw-r--r--apps/plugins/test_fps.c13
-rw-r--r--apps/plugins/test_grey.c10
-rw-r--r--apps/plugins/test_greylib_bitmap_scale.c15
-rw-r--r--apps/plugins/test_resize.c7
-rw-r--r--apps/plugins/test_sampr.c12
-rw-r--r--apps/plugins/test_scanrate.c4
-rw-r--r--apps/plugins/test_touchscreen.c5
-rw-r--r--apps/plugins/test_viewports.c10
-rw-r--r--apps/plugins/text_editor.c9
-rw-r--r--apps/plugins/vbrfix.c5
-rw-r--r--apps/plugins/video.c9
-rw-r--r--apps/plugins/viewer.c10
-rw-r--r--apps/plugins/vu_meter.c5
-rw-r--r--apps/plugins/wav2wv.c15
-rw-r--r--apps/plugins/wavplay.c6
-rw-r--r--apps/plugins/wavrecord.c8
-rw-r--r--apps/plugins/wavview.c5
-rw-r--r--apps/plugins/wormlet.c11
-rw-r--r--apps/plugins/xobox.c11
-rw-r--r--apps/plugins/zxbox.c4
-rw-r--r--apps/plugins/zxbox/spmain.c9
-rw-r--r--apps/plugins/zxbox/zxbox.c11
-rw-r--r--apps/plugins/zxbox/zxconfig.h1
177 files changed, 564 insertions, 1163 deletions
diff --git a/apps/plugins/alpine_cdc.c b/apps/plugins/alpine_cdc.c
index d15e26ae36..a7aeec306f 100644
--- a/apps/plugins/alpine_cdc.c
+++ b/apps/plugins/alpine_cdc.c
@@ -136,7 +136,7 @@ void sound_normal(void); /* return to user settings */
136 136
137void thread(void); /* the thread running it all */ 137void thread(void); /* the thread running it all */
138int main(const void* parameter); /* main loop */ 138int main(const void* parameter); /* main loop */
139enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter); /* entry */ 139enum plugin_status plugin_start(const void* parameter); /* entry */
140 140
141 141
142/****************** data types ******************/ 142/****************** data types ******************/
@@ -209,8 +209,6 @@ struct
209 unsigned int thread; /* worker thread id */ 209 unsigned int thread; /* worker thread id */
210} gTread; 210} gTread;
211 211
212static const struct plugin_api* rb; /* here is the global API struct pointer */
213
214 212
215/****************** implementation ******************/ 213/****************** implementation ******************/
216 214
@@ -1191,10 +1189,8 @@ int main(const void* parameter)
1191/***************** Plugin Entry Point *****************/ 1189/***************** Plugin Entry Point *****************/
1192 1190
1193 1191
1194enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 1192enum plugin_status plugin_start(const void* parameter)
1195{ 1193{
1196 rb = api; /* copy to global api pointer */
1197
1198 /* now go ahead and have fun! */ 1194 /* now go ahead and have fun! */
1199 return (main(parameter)==0) ? PLUGIN_OK : PLUGIN_ERROR; 1195 return (main(parameter)==0) ? PLUGIN_OK : PLUGIN_ERROR;
1200} 1196}
diff --git a/apps/plugins/battery_bench.c b/apps/plugins/battery_bench.c
index 7c18dc74dd..7c66c5234a 100644
--- a/apps/plugins/battery_bench.c
+++ b/apps/plugins/battery_bench.c
@@ -189,17 +189,15 @@ PLUGIN_HEADER
189#endif 189#endif
190 190
191/****************************** Plugin Entry Point ****************************/ 191/****************************** Plugin Entry Point ****************************/
192static const struct plugin_api* rb; 192MEM_FUNCTION_WRAPPERS;
193MEM_FUNCTION_WRAPPERS(rb);
194int main(void); 193int main(void);
195bool exit_tsr(bool); 194bool exit_tsr(bool);
196void thread(void); 195void thread(void);
197 196
198 197
199enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 198enum plugin_status plugin_start(const void* parameter)
200{ 199{
201 (void)parameter; 200 (void)parameter;
202 rb = api;
203 201
204 return main(); 202 return main();
205} 203}
diff --git a/apps/plugins/beatbox/beatbox.c b/apps/plugins/beatbox/beatbox.c
index 45f0eb70b5..ef391987fb 100644
--- a/apps/plugins/beatbox/beatbox.c
+++ b/apps/plugins/beatbox/beatbox.c
@@ -180,8 +180,6 @@ const unsigned char * drumNames[]={
180long gmbuf[BUF_SIZE*NBUF]; 180long gmbuf[BUF_SIZE*NBUF];
181 181
182int quit=0; 182int quit=0;
183const struct plugin_api * rb;
184
185 183
186#define STATE_STOPPED 0 184#define STATE_STOPPED 0
187#define STATE_PAUSED 1 185#define STATE_PAUSED 1
@@ -234,13 +232,11 @@ int editState=EDITSTATE_PATTERN;
234int playState=STATE_STOPPED, stepFlag=0; 232int playState=STATE_STOPPED, stepFlag=0;
235 233
236 234
237enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 235enum plugin_status plugin_start(const void* parameter)
238{ 236{
239 int retval = 0; 237 int retval = 0;
240 238
241 PLUGIN_IRAM_INIT(api) 239 PLUGIN_IRAM_INIT(rb)
242
243 rb = api;
244 240
245 rb->lcd_setfont(0); 241 rb->lcd_setfont(0);
246 242
diff --git a/apps/plugins/blackjack.c b/apps/plugins/blackjack.c
index 2aed40fd9e..274e2033fa 100644
--- a/apps/plugins/blackjack.c
+++ b/apps/plugins/blackjack.c
@@ -360,10 +360,7 @@ extern const fb_data card_back[];
360 360
361#define NEXT_CARD bj->player_cards[done][bj->num_player_cards[done]] 361#define NEXT_CARD bj->player_cards[done][bj->num_player_cards[done]]
362 362
363/* global rockbox api */ 363MEM_FUNCTION_WRAPPERS;
364static const struct plugin_api* rb;
365
366MEM_FUNCTION_WRAPPERS(rb);
367 364
368/* dealer and player card positions */ 365/* dealer and player card positions */
369unsigned int dealer_x, dealer_y, player_x, player_y; 366unsigned int dealer_x, dealer_y, player_x, player_y;
@@ -1587,7 +1584,7 @@ static int blackjack(struct game_context* bj) {
1587/***************************************************************************** 1584/*****************************************************************************
1588* plugin entry point. 1585* plugin entry point.
1589******************************************************************************/ 1586******************************************************************************/
1590enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 1587enum plugin_status plugin_start(const void* parameter)
1591{ 1588{
1592 struct game_context bj; 1589 struct game_context bj;
1593 bool exit = false; 1590 bool exit = false;
@@ -1595,7 +1592,6 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
1595 char str[19]; 1592 char str[19];
1596 1593
1597 (void)parameter; 1594 (void)parameter;
1598 rb = api;
1599 1595
1600#if LCD_DEPTH > 1 1596#if LCD_DEPTH > 1
1601 rb->lcd_set_backdrop(NULL); 1597 rb->lcd_set_backdrop(NULL);
diff --git a/apps/plugins/bounce.c b/apps/plugins/bounce.c
index 755f7f7338..e932a0ebb9 100644
--- a/apps/plugins/bounce.c
+++ b/apps/plugins/bounce.c
@@ -180,8 +180,6 @@ PLUGIN_HEADER
180#endif 180#endif
181#endif 181#endif
182 182
183static const struct plugin_api* rb;
184
185#define LETTER_WIDTH 11 183#define LETTER_WIDTH 11
186#define LETTER_HEIGHT 16 184#define LETTER_HEIGHT 16
187 185
@@ -593,14 +591,12 @@ static int loopit(void)
593} 591}
594 592
595 593
596enum plugin_status plugin_start(const struct plugin_api* api, 594enum plugin_status plugin_start(const void* parameter)
597 const void* parameter)
598{ 595{
599 int w, h; 596 int w, h;
600 char *off = "[Off] to stop"; 597 char *off = "[Off] to stop";
601 598
602 (void)(parameter); 599 (void)(parameter);
603 rb = api;
604 600
605 rb->lcd_setfont(FONT_SYSFIXED); 601 rb->lcd_setfont(FONT_SYSFIXED);
606 rb->lcd_clear_display(); 602 rb->lcd_clear_display();
diff --git a/apps/plugins/brickmania.c b/apps/plugins/brickmania.c
index 35823b6b99..d0e4a593a0 100644
--- a/apps/plugins/brickmania.c
+++ b/apps/plugins/brickmania.c
@@ -209,8 +209,6 @@ CONFIG_KEYPAD == SANSA_M200_PAD
209#endif 209#endif
210 210
211 211
212static const struct plugin_api* rb;
213
214enum menu_items { 212enum menu_items {
215 BM_START, 213 BM_START,
216 BM_SEL_START, 214 BM_SEL_START,
@@ -1289,7 +1287,6 @@ int game_loop(void)
1289 1287
1290 rb->srand( *rb->current_tick ); 1288 rb->srand( *rb->current_tick );
1291 1289
1292 configfile_init(rb);
1293 configfile_load(HIGH_SCORE,config,1,0); 1290 configfile_load(HIGH_SCORE,config,1,0);
1294 1291
1295 switch(game_menu(0)) { 1292 switch(game_menu(0)) {
@@ -2090,17 +2087,16 @@ int game_loop(void)
2090} 2087}
2091 2088
2092/* this is the plugin entry point */ 2089/* this is the plugin entry point */
2093enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 2090enum plugin_status plugin_start(const void* parameter)
2094{ 2091{
2095 (void)parameter; 2092 (void)parameter;
2096 rb = api;
2097 2093
2098 rb->lcd_setfont(FONT_SYSFIXED); 2094 rb->lcd_setfont(FONT_SYSFIXED);
2099#if LCD_DEPTH > 1 2095#if LCD_DEPTH > 1
2100 rb->lcd_set_backdrop(NULL); 2096 rb->lcd_set_backdrop(NULL);
2101#endif 2097#endif
2102 /* Turn off backlight timeout */ 2098 /* Turn off backlight timeout */
2103 backlight_force_on(rb); /* backlight control in lib/helper.c */ 2099 backlight_force_on(); /* backlight control in lib/helper.c */
2104 2100
2105 /* now go ahead and have fun! */ 2101 /* now go ahead and have fun! */
2106 while (game_loop()!=1); 2102 while (game_loop()!=1);
@@ -2110,7 +2106,7 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
2110 /* Restore user's original backlight setting */ 2106 /* Restore user's original backlight setting */
2111 rb->lcd_setfont(FONT_UI); 2107 rb->lcd_setfont(FONT_UI);
2112 /* Turn on backlight timeout (revert to settings) */ 2108 /* Turn on backlight timeout (revert to settings) */
2113 backlight_use_settings(rb); /* backlight control in lib/helper.c */ 2109 backlight_use_settings(); /* backlight control in lib/helper.c */
2114 2110
2115 return PLUGIN_OK; 2111 return PLUGIN_OK;
2116} 2112}
diff --git a/apps/plugins/bubbles.c b/apps/plugins/bubbles.c
index 0894c75d4a..5e338588de 100644
--- a/apps/plugins/bubbles.c
+++ b/apps/plugins/bubbles.c
@@ -203,9 +203,6 @@ PLUGIN_HEADER
203/* collision distance squared */ 203/* collision distance squared */
204#define MIN_DISTANCE ((BUBBLE_WIDTH*8)/10)*((BUBBLE_HEIGHT*8)/10) 204#define MIN_DISTANCE ((BUBBLE_WIDTH*8)/10)*((BUBBLE_HEIGHT*8)/10)
205 205
206/* global rockbox api */
207static const struct plugin_api* rb;
208
209/* levels */ 206/* levels */
210char level[NUM_LEVELS][BB_LEVEL_HEIGHT][BB_WIDTH] = { 207char level[NUM_LEVELS][BB_LEVEL_HEIGHT][BB_WIDTH] = {
211 {{ 6, 6, 4, 4, 2, 2, 3, 3}, 208 {{ 6, 6, 4, 4, 2, 2, 3, 3},
@@ -2317,7 +2314,7 @@ static int bubbles_handlebuttons(struct game_context* bb, bool animblock,
2317 2314
2318 if (timeout < 0) 2315 if (timeout < 0)
2319 timeout = 0; 2316 timeout = 0;
2320 button = pluginlib_getaction(rb,timeout,plugin_contexts,2); 2317 button = pluginlib_getaction(timeout,plugin_contexts,2);
2321#if defined(HAS_BUTTON_HOLD) && !defined(HAVE_REMOTE_LCD_AS_MAIN) 2318#if defined(HAS_BUTTON_HOLD) && !defined(HAVE_REMOTE_LCD_AS_MAIN)
2322 /* FIXME: Should probably check remote hold here */ 2319 /* FIXME: Should probably check remote hold here */
2323 if (rb->button_hold()) 2320 if (rb->button_hold())
@@ -2352,7 +2349,7 @@ static int bubbles_handlebuttons(struct game_context* bb, bool animblock,
2352 case BUBBLES_START: /* pause the game */ 2349 case BUBBLES_START: /* pause the game */
2353 start = *rb->current_tick; 2350 start = *rb->current_tick;
2354 rb->splash(0, "Paused"); 2351 rb->splash(0, "Paused");
2355 while(pluginlib_getaction(rb,TIMEOUT_BLOCK,plugin_contexts,2) 2352 while(pluginlib_getaction(TIMEOUT_BLOCK,plugin_contexts,2)
2356 != (BUBBLES_START)); 2353 != (BUBBLES_START));
2357 bb->startedshot += *rb->current_tick-start; 2354 bb->startedshot += *rb->current_tick-start;
2358 bubbles_drawboard(bb); 2355 bubbles_drawboard(bb);
@@ -2480,19 +2477,15 @@ static int bubbles(struct game_context* bb) {
2480/***************************************************************************** 2477/*****************************************************************************
2481* plugin entry point. 2478* plugin entry point.
2482******************************************************************************/ 2479******************************************************************************/
2483enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) { 2480enum plugin_status plugin_start(const void* parameter) {
2484 struct game_context bb; 2481 struct game_context bb;
2485 bool exit = false; 2482 bool exit = false;
2486 int position; 2483 int position;
2487 2484
2488 /* plugin init */ 2485 /* plugin init */
2489 (void)parameter; 2486 (void)parameter;
2490 rb = api;
2491 /* end of plugin init */ 2487 /* end of plugin init */
2492 2488
2493 /* more init */
2494 xlcd_init(rb);
2495
2496 /* load files */ 2489 /* load files */
2497 rb->splash(0, "Loading..."); 2490 rb->splash(0, "Loading...");
2498 bubbles_loadscores(&bb); 2491 bubbles_loadscores(&bb);
diff --git a/apps/plugins/calculator.c b/apps/plugins/calculator.c
index 7e6eb92b0e..7d93a24196 100644
--- a/apps/plugins/calculator.c
+++ b/apps/plugins/calculator.c
@@ -345,8 +345,7 @@ PLUGIN_HEADER
345static struct ts_raster calc_raster = { X_0_POS, Y_1_POS, BUTTON_COLS*REC_WIDTH, BUTTON_ROWS*REC_HEIGHT, REC_WIDTH, REC_HEIGHT }; 345static struct ts_raster calc_raster = { X_0_POS, Y_1_POS, BUTTON_COLS*REC_WIDTH, BUTTON_ROWS*REC_HEIGHT, REC_WIDTH, REC_HEIGHT };
346#endif 346#endif
347 347
348static const struct plugin_api* rb; 348MEM_FUNCTION_WRAPPERS;
349MEM_FUNCTION_WRAPPERS(rb);
350 349
351enum { 350enum {
352 basicButtons, 351 basicButtons,
@@ -1628,10 +1627,9 @@ int handleButton(int button){
1628/* ----------------------------------------------------------------------- 1627/* -----------------------------------------------------------------------
1629Main(); 1628Main();
1630----------------------------------------------------------------------- */ 1629----------------------------------------------------------------------- */
1631enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 1630enum plugin_status plugin_start(const void* parameter)
1632{ 1631{
1633 (void)parameter; 1632 (void)parameter;
1634 rb = api;
1635 1633
1636 /* now go ahead and have fun! */ 1634 /* now go ahead and have fun! */
1637 1635
diff --git a/apps/plugins/calendar.c b/apps/plugins/calendar.c
index 866adceaee..07934b06a6 100644
--- a/apps/plugins/calendar.c
+++ b/apps/plugins/calendar.c
@@ -176,9 +176,7 @@ CONFIG_KEYPAD == SANSA_M200_PAD
176#define CELL_WIDTH (LCD_WIDTH / 7) 176#define CELL_WIDTH (LCD_WIDTH / 7)
177#define CELL_HEIGHT (LCD_HEIGHT / 7) 177#define CELL_HEIGHT (LCD_HEIGHT / 7)
178 178
179static const struct plugin_api* rb; 179MEM_FUNCTION_WRAPPERS
180
181MEM_FUNCTION_WRAPPERS(rb)
182 180
183static bool leap_year; 181static bool leap_year;
184/* days_in_month[][0] is for December */ 182/* days_in_month[][0] is for December */
@@ -788,7 +786,7 @@ static void prev_day(struct shown *shown, int step)
788 draw_calendar(shown); 786 draw_calendar(shown);
789} 787}
790 788
791enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 789enum plugin_status plugin_start(const void* parameter)
792{ 790{
793 struct today today; 791 struct today today;
794 struct shown shown; 792 struct shown shown;
@@ -797,8 +795,6 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
797 795
798 (void)(parameter); 796 (void)(parameter);
799 797
800 rb = api;
801
802 calendar_init(&today, &shown); 798 calendar_init(&today, &shown);
803 load_memo(&shown); 799 load_memo(&shown);
804 any_events(&shown, false); 800 any_events(&shown, false);
diff --git a/apps/plugins/chessbox.c b/apps/plugins/chessbox.c
index 9e86c39b11..3eace4ca22 100644
--- a/apps/plugins/chessbox.c
+++ b/apps/plugins/chessbox.c
@@ -29,8 +29,8 @@
29PLUGIN_HEADER 29PLUGIN_HEADER
30 30
31/* this is the plugin entry point */ 31/* this is the plugin entry point */
32enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 32enum plugin_status plugin_start(const void* parameter)
33{ 33{
34 return run_overlay(api, parameter, PLUGIN_GAMES_DIR "/chessbox.ovl", "ChessBox"); 34 return run_overlay(parameter, PLUGIN_GAMES_DIR "/chessbox.ovl", "ChessBox");
35} 35}
36#endif 36#endif
diff --git a/apps/plugins/chessbox/chessbox.c b/apps/plugins/chessbox/chessbox.c
index f8db7d9b7f..64f8965947 100644
--- a/apps/plugins/chessbox/chessbox.c
+++ b/apps/plugins/chessbox/chessbox.c
@@ -450,19 +450,19 @@ void cb_start_viewer(char* filename){
450 bool exit_viewer = false; 450 bool exit_viewer = false;
451 struct cb_command command; 451 struct cb_command command;
452 452
453 first_game = pgn_list_games(rb, filename); 453 first_game = pgn_list_games(filename);
454 if (first_game == NULL){ 454 if (first_game == NULL){
455 rb->splash ( HZ*2 , "No games found !" ); 455 rb->splash ( HZ*2 , "No games found !" );
456 return; 456 return;
457 } 457 }
458 458
459 do { 459 do {
460 selected_game = pgn_show_game_list(rb, first_game); 460 selected_game = pgn_show_game_list(first_game);
461 if (selected_game == NULL){ 461 if (selected_game == NULL){
462 break; 462 break;
463 } 463 }
464 464
465 pgn_parse_game(rb, filename, selected_game); 465 pgn_parse_game(filename, selected_game);
466 if (selected_game->first_ply != NULL) { 466 if (selected_game->first_ply != NULL) {
467 467
468 /* init board */ 468 /* init board */
@@ -769,7 +769,7 @@ void cb_play_game(void) {
769 GNUChess_Initialize(); 769 GNUChess_Initialize();
770 770
771 /* init PGN history data structures */ 771 /* init PGN history data structures */
772 game = pgn_init_game(rb); 772 game = pgn_init_game();
773 773
774 /* restore saved position, if saved */ 774 /* restore saved position, if saved */
775 cb_restoreposition(); 775 cb_restoreposition();
@@ -783,9 +783,9 @@ void cb_play_game(void) {
783 if ( mate ) { 783 if ( mate ) {
784 rb->splash ( HZ*3 , "Checkmate!" ); 784 rb->splash ( HZ*3 , "Checkmate!" );
785 rb->button_get(true); 785 rb->button_get(true);
786 pgn_store_game(rb, game); 786 pgn_store_game(game);
787 GNUChess_Initialize(); 787 GNUChess_Initialize();
788 game = pgn_init_game(rb); 788 game = pgn_init_game();
789 cb_drawboard(); 789 cb_drawboard();
790 } 790 }
791 command = cb_getcommand (); 791 command = cb_getcommand ();
@@ -798,7 +798,7 @@ void cb_play_game(void) {
798 cb_drawboard(); 798 cb_drawboard();
799 799
800 /* Add the ply to the PGN history (in algebraic notation) */ 800 /* Add the ply to the PGN history (in algebraic notation) */
801 pgn_append_ply(rb, game, opponent, move_buffer, mate); 801 pgn_append_ply(game, opponent, move_buffer, mate);
802 802
803 rb->splash ( 0 , "Thinking..." ); 803 rb->splash ( 0 , "Thinking..." );
804#ifdef HAVE_ADJUSTABLE_CPU_FREQ 804#ifdef HAVE_ADJUSTABLE_CPU_FREQ
@@ -812,9 +812,9 @@ void cb_play_game(void) {
812 * for the result of the game which is only calculated in SelectMove 812 * for the result of the game which is only calculated in SelectMove
813 */ 813 */
814 if (move_buffer[0] != '\0'){ 814 if (move_buffer[0] != '\0'){
815 pgn_append_ply(rb, game, computer, move_buffer, mate); 815 pgn_append_ply(game, computer, move_buffer, mate);
816 } else { 816 } else {
817 pgn_set_result(rb, game, mate); 817 pgn_set_result(game, mate);
818 } 818 }
819 819
820 if ( wt_command == COMMAND_QUIT ) { 820 if ( wt_command == COMMAND_QUIT ) {
@@ -827,7 +827,7 @@ void cb_play_game(void) {
827#ifdef COMMAND_RESTART 827#ifdef COMMAND_RESTART
828 case COMMAND_RESTART: 828 case COMMAND_RESTART:
829 GNUChess_Initialize(); 829 GNUChess_Initialize();
830 game = pgn_init_game(rb); 830 game = pgn_init_game();
831 cb_drawboard(); 831 cb_drawboard();
832 break; 832 break;
833#endif 833#endif
@@ -845,7 +845,7 @@ void cb_play_game(void) {
845 GNUChess_Initialize(); 845 GNUChess_Initialize();
846 846
847 /* init PGN history data structures */ 847 /* init PGN history data structures */
848 game = pgn_init_game(rb); 848 game = pgn_init_game();
849 849
850 /* restore saved position, if saved */ 850 /* restore saved position, if saved */
851 cb_restoreposition(); 851 cb_restoreposition();
@@ -874,9 +874,9 @@ void cb_play_game(void) {
874 * for the result of the game which is only calculated in SelectMove 874 * for the result of the game which is only calculated in SelectMove
875 */ 875 */
876 if (move_buffer[0] != '\0'){ 876 if (move_buffer[0] != '\0'){
877 pgn_append_ply(rb, game, computer, move_buffer, mate); 877 pgn_append_ply(game, computer, move_buffer, mate);
878 } else { 878 } else {
879 pgn_set_result(rb, game, mate); 879 pgn_set_result(game, mate);
880 } 880 }
881 881
882 if ( wt_command == COMMAND_QUIT ) { 882 if ( wt_command == COMMAND_QUIT ) {
@@ -904,11 +904,10 @@ void cb_play_game(void) {
904/***************************************************************************** 904/*****************************************************************************
905* plugin entry point. 905* plugin entry point.
906******************************************************************************/ 906******************************************************************************/
907enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) { 907enum plugin_status plugin_start(const void* parameter) {
908 908
909 /* plugin init */ 909 /* plugin init */
910 910
911 rb = api;
912#if LCD_DEPTH > 1 911#if LCD_DEPTH > 1
913 rb->lcd_set_backdrop(NULL); 912 rb->lcd_set_backdrop(NULL);
914#endif 913#endif
diff --git a/apps/plugins/chessbox/chessbox_pgn.c b/apps/plugins/chessbox/chessbox_pgn.c
index 8c92573b75..a8be179fac 100644
--- a/apps/plugins/chessbox/chessbox_pgn.c
+++ b/apps/plugins/chessbox/chessbox_pgn.c
@@ -26,8 +26,6 @@
26#define LOG_FILE PLUGIN_GAMES_DIR "/chessbox.log" 26#define LOG_FILE PLUGIN_GAMES_DIR "/chessbox.log"
27int loghandler; 27int loghandler;
28 28
29const struct plugin_api* rb;
30
31short kn_offs[8][2] = {{2,1},{2,-1},{-2,1},{-2,-1},{1,2},{1,-2},{-1,2},{-1,-2}}; 29short kn_offs[8][2] = {{2,1},{2,-1},{-2,1},{-2,-1},{1,2},{1,-2},{-1,2},{-1,-2}};
32short rk_offs[4][2] = {{1,0},{-1,0},{0,1},{0,-1}}; 30short rk_offs[4][2] = {{1,0},{-1,0},{0,1},{0,-1}};
33short bp_offs[4][2] = {{1,1},{-1,1},{1,-1},{-1,-1}}; 31short bp_offs[4][2] = {{1,1},{-1,1},{1,-1},{-1,-1}};
@@ -559,7 +557,7 @@ void write_pgn_token(int fhandler, char *buffer, size_t *line_length){
559} 557}
560 558
561/* ---- api functions ---- */ 559/* ---- api functions ---- */
562struct pgn_game_node* pgn_list_games(const struct plugin_api* api,const char* filename){ 560struct pgn_game_node* pgn_list_games(const char* filename){
563 int fhandler; 561 int fhandler;
564 char line_buffer[128]; 562 char line_buffer[128];
565 struct pgn_game_node size_node, *first_game = NULL; 563 struct pgn_game_node size_node, *first_game = NULL;
@@ -567,7 +565,6 @@ struct pgn_game_node* pgn_list_games(const struct plugin_api* api,const char* fi
567 unsigned short game_count = 1; 565 unsigned short game_count = 1;
568 int line_count = 0; 566 int line_count = 0;
569 bool header_start = true, game_start = false; 567 bool header_start = true, game_start = false;
570 rb = api;
571 568
572 if ( (fhandler = rb->open(filename, O_RDONLY)) == 0 ) return NULL; 569 if ( (fhandler = rb->open(filename, O_RDONLY)) == 0 ) return NULL;
573 570
@@ -617,16 +614,13 @@ struct pgn_game_node* pgn_list_games(const struct plugin_api* api,const char* fi
617 return first_game; 614 return first_game;
618} 615}
619 616
620struct pgn_game_node* pgn_show_game_list(const struct plugin_api* api, 617struct pgn_game_node* pgn_show_game_list(struct pgn_game_node* first_game){
621 struct pgn_game_node* first_game){
622 int curr_selection = 0; 618 int curr_selection = 0;
623 int button; 619 int button;
624 struct gui_synclist games_list; 620 struct gui_synclist games_list;
625 int i; 621 int i;
626 struct pgn_game_node *temp_node = first_game; 622 struct pgn_game_node *temp_node = first_game;
627 623
628 rb=api;
629
630 for (i=0;temp_node != NULL;i++){ 624 for (i=0;temp_node != NULL;i++){
631 temp_node = temp_node->next_node; 625 temp_node = temp_node->next_node;
632 } 626 }
@@ -661,7 +655,7 @@ struct pgn_game_node* pgn_show_game_list(const struct plugin_api* api,
661 } 655 }
662} 656}
663 657
664void pgn_parse_game(const struct plugin_api* api, const char* filename, 658void pgn_parse_game(const char* filename,
665 struct pgn_game_node* selected_game){ 659 struct pgn_game_node* selected_game){
666 struct pgn_ply_node size_ply, *first_ply = NULL; 660 struct pgn_ply_node size_ply, *first_ply = NULL;
667 struct pgn_ply_node *temp_ply = NULL, *curr_node = NULL; 661 struct pgn_ply_node *temp_ply = NULL, *curr_node = NULL;
@@ -670,7 +664,6 @@ void pgn_parse_game(const struct plugin_api* api, const char* filename,
670 char token_buffer[10]; 664 char token_buffer[10];
671 unsigned short pos; 665 unsigned short pos;
672 unsigned short curr_player = white; 666 unsigned short curr_player = white;
673 rb = api;
674 667
675 fhandler = rb->open(filename, O_RDONLY); 668 fhandler = rb->open(filename, O_RDONLY);
676 669
@@ -731,13 +724,11 @@ void pgn_parse_game(const struct plugin_api* api, const char* filename,
731 rb->close(fhandler); 724 rb->close(fhandler);
732} 725}
733 726
734struct pgn_game_node* pgn_init_game(const struct plugin_api* api){ 727struct pgn_game_node* pgn_init_game(void){
735 struct pgn_game_node game_size, *game; 728 struct pgn_game_node game_size, *game;
736 struct pgn_ply_node ply_size, *ply; 729 struct pgn_ply_node ply_size, *ply;
737 struct tm *current_time; 730 struct tm *current_time;
738 731
739 rb = api;
740
741 if (bufptr == NULL){ 732 if (bufptr == NULL){
742 pl_malloc_init(); 733 pl_malloc_init();
743 } 734 }
@@ -769,12 +760,10 @@ struct pgn_game_node* pgn_init_game(const struct plugin_api* api){
769 return game; 760 return game;
770} 761}
771 762
772void pgn_append_ply(const struct plugin_api* api, struct pgn_game_node* game, 763void pgn_append_ply(struct pgn_game_node* game,
773 unsigned short ply_player, char *move_buffer, bool is_mate){ 764 unsigned short ply_player, char *move_buffer, bool is_mate){
774 struct pgn_ply_node ply_size, *ply, *temp; 765 struct pgn_ply_node ply_size, *ply, *temp;
775 766
776 rb = api;
777
778 ply = (struct pgn_ply_node *)pl_malloc(sizeof ply_size); 767 ply = (struct pgn_ply_node *)pl_malloc(sizeof ply_size);
779 ply->player = ply_player; 768 ply->player = ply_player;
780 ply->column_from = move_buffer[0] - 'a'; 769 ply->column_from = move_buffer[0] - 'a';
@@ -803,11 +792,9 @@ void pgn_append_ply(const struct plugin_api* api, struct pgn_game_node* game,
803 temp->prev_node = ply; 792 temp->prev_node = ply;
804} 793}
805 794
806void pgn_set_result(const struct plugin_api* api, struct pgn_game_node* game, 795void pgn_set_result(struct pgn_game_node* game,
807 bool is_mate){ 796 bool is_mate){
808 797
809 rb = api;
810
811 struct pgn_ply_node *ply; 798 struct pgn_ply_node *ply;
812 for(ply=game->first_ply;ply->next_node != NULL;ply=ply->next_node); 799 for(ply=game->first_ply;ply->next_node != NULL;ply=ply->next_node);
813 if (is_mate){ 800 if (is_mate){
@@ -817,15 +804,13 @@ void pgn_set_result(const struct plugin_api* api, struct pgn_game_node* game,
817 } 804 }
818} 805}
819 806
820void pgn_store_game(const struct plugin_api* api, struct pgn_game_node* game){ 807void pgn_store_game(struct pgn_game_node* game){
821 int fhandler; 808 int fhandler;
822 struct pgn_ply_node *ply; 809 struct pgn_ply_node *ply;
823 unsigned ply_count; 810 unsigned ply_count;
824 size_t line_length=0; 811 size_t line_length=0;
825 char buffer[10]; 812 char buffer[10];
826 813
827 rb = api;
828
829 GNUChess_Initialize(); 814 GNUChess_Initialize();
830 815
831 ply_count=0; 816 ply_count=0;
diff --git a/apps/plugins/chessbox/chessbox_pgn.h b/apps/plugins/chessbox/chessbox_pgn.h
index 351a32ac57..24830a5f48 100644
--- a/apps/plugins/chessbox/chessbox_pgn.h
+++ b/apps/plugins/chessbox/chessbox_pgn.h
@@ -408,35 +408,33 @@ struct pgn_game_node {
408 * the user selects a game, that obviously saves processing 408 * the user selects a game, that obviously saves processing
409 * and speeds up response when the user selects the file 409 * and speeds up response when the user selects the file
410 */ 410 */
411struct pgn_game_node* pgn_list_games(const struct plugin_api* api, 411struct pgn_game_node* pgn_list_games(const char* filename);
412 const char* filename);
413 412
414/* Show the list of games found in a file and allow the user 413/* Show the list of games found in a file and allow the user
415 * to select a game to be parsed and showed 414 * to select a game to be parsed and showed
416 */ 415 */
417struct pgn_game_node* pgn_show_game_list(const struct plugin_api* api, 416struct pgn_game_node* pgn_show_game_list(struct pgn_game_node* first_game);
418 struct pgn_game_node* first_game);
419 417
420/* Parse the pgn string of a game and assign it to the move 418/* Parse the pgn string of a game and assign it to the move
421 * list in the structure 419 * list in the structure
422 */ 420 */
423void pgn_parse_game(const struct plugin_api* api, const char* filename, 421void pgn_parse_game(const char* filename,
424 struct pgn_game_node* selected_game); 422 struct pgn_game_node* selected_game);
425 423
426/* Initialize a new game structure with default values and make 424/* Initialize a new game structure with default values and make
427 * it ready to store the history of a newly played match 425 * it ready to store the history of a newly played match
428 */ 426 */
429struct pgn_game_node* pgn_init_game(const struct plugin_api* api); 427struct pgn_game_node* pgn_init_game(void);
430 428
431/* Add a new ply to the game structure based on the positions */ 429/* Add a new ply to the game structure based on the positions */
432void pgn_append_ply(const struct plugin_api* api, struct pgn_game_node* game, 430void pgn_append_ply(struct pgn_game_node* game,
433 unsigned short ply_player, char *move_buffer, bool is_mate); 431 unsigned short ply_player, char *move_buffer, bool is_mate);
434 432
435/* Set the result of the game if it was reached during the opponent's ply 433/* Set the result of the game if it was reached during the opponent's ply
436 */ 434 */
437void pgn_set_result(const struct plugin_api* api, struct pgn_game_node* game, 435void pgn_set_result(struct pgn_game_node* game,
438 bool is_mate); 436 bool is_mate);
439 437
440/* Store a complete game in the PGN history file 438/* Store a complete game in the PGN history file
441 */ 439 */
442void pgn_store_game(const struct plugin_api* api, struct pgn_game_node* game); 440void pgn_store_game(struct pgn_game_node* game);
diff --git a/apps/plugins/chessbox/gnuchess.c b/apps/plugins/chessbox/gnuchess.c
index 51e200d0f2..b8fef724fc 100644
--- a/apps/plugins/chessbox/gnuchess.c
+++ b/apps/plugins/chessbox/gnuchess.c
@@ -63,9 +63,6 @@
63#define absv(x) ((x) < 0 ? -(x) : (x)) 63#define absv(x) ((x) < 0 ? -(x) : (x))
64#define taxicab(a,b) (abs(column[a]-column[b]) + abs(row[a]-row[b])) 64#define taxicab(a,b) (abs(column[a]-column[b]) + abs(row[a]-row[b]))
65 65
66/* ---- RockBox datatypes and variables */
67const struct plugin_api* rb;
68
69/* ---- Chess datatypes and variables ---- */ 66/* ---- Chess datatypes and variables ---- */
70struct leaf 67struct leaf
71 { 68 {
diff --git a/apps/plugins/chessbox/gnuchess.h b/apps/plugins/chessbox/gnuchess.h
index b80647a287..511b8808c0 100644
--- a/apps/plugins/chessbox/gnuchess.h
+++ b/apps/plugins/chessbox/gnuchess.h
@@ -43,9 +43,6 @@ extern short GameCnt,Game50,castld[2],kingmoved[2],OperatorTime;
43extern struct TimeControlRec TimeControl; 43extern struct TimeControlRec TimeControl;
44extern struct GameRec GameList[240]; 44extern struct GameRec GameList[240];
45 45
46/* ---- RockBox integration ---- */
47extern const struct plugin_api* rb;
48
49/* ---- The beginning of a GNUChess v2 APIfication ---- */ 46/* ---- The beginning of a GNUChess v2 APIfication ---- */
50void SetTimeControl(void); 47void SetTimeControl(void);
51void GNUChess_Initialize(void); 48void GNUChess_Initialize(void);
diff --git a/apps/plugins/chessclock.c b/apps/plugins/chessclock.c
index 86bcce01db..f8c7a2c64e 100644
--- a/apps/plugins/chessclock.c
+++ b/apps/plugins/chessclock.c
@@ -247,11 +247,7 @@ PLUGIN_HEADER
247#define FIRST_LINE 0 247#define FIRST_LINE 0
248#endif 248#endif
249 249
250/* here is a global api struct pointer. while not strictly necessary, 250MEM_FUNCTION_WRAPPERS;
251 it's nice not to have to pass the api pointer in all function calls
252 in the plugin */
253static const struct plugin_api* rb;
254MEM_FUNCTION_WRAPPERS(rb);
255#define MAX_PLAYERS 10 251#define MAX_PLAYERS 10
256 252
257static struct { 253static struct {
@@ -283,14 +279,13 @@ static bool pause;
283#define MAX_TIME 7200 279#define MAX_TIME 7200
284 280
285/* this is the plugin entry point */ 281/* this is the plugin entry point */
286enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 282enum plugin_status plugin_start(const void* parameter)
287{ 283{
288 int i; 284 int i;
289 bool done; 285 bool done;
290 int nr; 286 int nr;
291 287
292 (void)parameter; 288 (void)parameter;
293 rb=api;
294 rb->memset(&settings, 0, sizeof(settings)); 289 rb->memset(&settings, 0, sizeof(settings));
295 290
296 /* now go ahead and have fun! */ 291 /* now go ahead and have fun! */
diff --git a/apps/plugins/chip8.c b/apps/plugins/chip8.c
index ceab1431dd..9452b72fb4 100644
--- a/apps/plugins/chip8.c
+++ b/apps/plugins/chip8.c
@@ -26,8 +26,6 @@
26 26
27PLUGIN_HEADER 27PLUGIN_HEADER
28 28
29static const struct plugin_api* rb; /* here is a global api struct pointer */
30
31#define EXTERN static 29#define EXTERN static
32#define STATIC static 30#define STATIC static
33#define memset rb->memset 31#define memset rb->memset
@@ -1423,12 +1421,10 @@ bool chip8_run(const char* file)
1423 1421
1424/***************** Plugin Entry Point *****************/ 1422/***************** Plugin Entry Point *****************/
1425 1423
1426enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 1424enum plugin_status plugin_start(const void* parameter)
1427{ 1425{
1428 const char* filename; 1426 const char* filename;
1429 1427
1430 rb = api; /* copy to global api pointer */
1431
1432 if (parameter == NULL) 1428 if (parameter == NULL)
1433 { 1429 {
1434 rb->splash(HZ, "Play a .ch8 file!"); 1430 rb->splash(HZ, "Play a .ch8 file!");
diff --git a/apps/plugins/chopper.c b/apps/plugins/chopper.c
index 5c82b1eeea..971aeb8512 100644
--- a/apps/plugins/chopper.c
+++ b/apps/plugins/chopper.c
@@ -142,8 +142,6 @@ Still To do:
142#endif 142#endif
143#endif 143#endif
144 144
145static const struct plugin_api* rb;
146
147#define NUMBER_OF_BLOCKS 8 145#define NUMBER_OF_BLOCKS 8
148#define NUMBER_OF_PARTICLES 3 146#define NUMBER_OF_PARTICLES 3
149#define MAX_TERRAIN_NODES 15 147#define MAX_TERRAIN_NODES 15
@@ -996,10 +994,9 @@ void chopper_load(bool newgame)
996} 994}
997 995
998/* this is the plugin entry point */ 996/* this is the plugin entry point */
999enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 997enum plugin_status plugin_start(const void* parameter)
1000{ 998{
1001 (void)parameter; 999 (void)parameter;
1002 rb = api;
1003 int ret; 1000 int ret;
1004 1001
1005 rb->lcd_setfont(FONT_SYSFIXED); 1002 rb->lcd_setfont(FONT_SYSFIXED);
@@ -1012,12 +1009,10 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
1012#endif 1009#endif
1013 1010
1014 /* Turn off backlight timeout */ 1011 /* Turn off backlight timeout */
1015 backlight_force_on(rb); /* backlight control in lib/helper.c */ 1012 backlight_force_on(); /* backlight control in lib/helper.c */
1016 1013
1017 rb->srand( *rb->current_tick ); 1014 rb->srand( *rb->current_tick );
1018 1015
1019 xlcd_init(rb);
1020 configfile_init(rb);
1021 configfile_load(CFG_FILE, config, 1, 0); 1016 configfile_load(CFG_FILE, config, 1, 0);
1022 1017
1023 chopper_load(true); 1018 chopper_load(true);
@@ -1027,7 +1022,7 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
1027 1022
1028 rb->lcd_setfont(FONT_UI); 1023 rb->lcd_setfont(FONT_UI);
1029 /* Turn on backlight timeout (revert to settings) */ 1024 /* Turn on backlight timeout (revert to settings) */
1030 backlight_use_settings(rb); /* backlight control in lib/helper.c */ 1025 backlight_use_settings(); /* backlight control in lib/helper.c */
1031 1026
1032 return ret; 1027 return ret;
1033} 1028}
diff --git a/apps/plugins/clock/clock.c b/apps/plugins/clock/clock.c
index 9279a182ee..f0001780bf 100644
--- a/apps/plugins/clock/clock.c
+++ b/apps/plugins/clock/clock.c
@@ -56,8 +56,6 @@ const struct button_mapping* plugin_contexts[]={
56#define ACTION_SKIN_PREV PLA_DEC 56#define ACTION_SKIN_PREV PLA_DEC
57#define ACTION_SKIN_PREV_REPEAT PLA_DEC_REPEAT 57#define ACTION_SKIN_PREV_REPEAT PLA_DEC_REPEAT
58 58
59extern const struct plugin_api* rb;
60
61/************************** 59/**************************
62 * Cleanup on plugin return 60 * Cleanup on plugin return
63 *************************/ 61 *************************/
@@ -111,7 +109,7 @@ void format_date(char* buffer, struct time* time, enum date_format format){
111/********************************************************************** 109/**********************************************************************
112 * Plugin starts here 110 * Plugin starts here
113 **********************************************************************/ 111 **********************************************************************/
114enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter){ 112enum plugin_status plugin_start(const void* parameter){
115 int button; 113 int button;
116 int last_second = -1; 114 int last_second = -1;
117 bool redraw=true; 115 bool redraw=true;
@@ -120,7 +118,6 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
120 struct counter counter; 118 struct counter counter;
121 bool exit_clock = false; 119 bool exit_clock = false;
122 (void)parameter; 120 (void)parameter;
123 rb = api;
124 121
125#if LCD_DEPTH > 1 122#if LCD_DEPTH > 1
126 rb->lcd_set_backdrop(NULL); 123 rb->lcd_set_backdrop(NULL);
@@ -129,7 +126,6 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
129 load_settings(); 126 load_settings();
130 127
131 /* init xlcd functions */ 128 /* init xlcd functions */
132 xlcd_init(rb);
133 counter_init(&counter); 129 counter_init(&counter);
134 clock_draw_set_colors(); 130 clock_draw_set_colors();
135 131
@@ -142,7 +138,7 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
142 /************************* 138 /*************************
143 * Scan for button presses 139 * Scan for button presses
144 ************************/ 140 ************************/
145 button = pluginlib_getaction(rb, HZ/10, plugin_contexts, PLA_ARRAY_COUNT); 141 button = pluginlib_getaction(HZ/10, plugin_contexts, PLA_ARRAY_COUNT);
146 redraw=true;/* we'll set it to false afterwards if there was no action */ 142 redraw=true;/* we'll set it to false afterwards if there was no action */
147 switch (button){ 143 switch (button){
148 case ACTION_COUNTER_TOGGLE: /* start/stop counter */ 144 case ACTION_COUNTER_TOGGLE: /* start/stop counter */
diff --git a/apps/plugins/clock/clock.h b/apps/plugins/clock/clock.h
index 2bcbe7207e..e447ccce5d 100644
--- a/apps/plugins/clock/clock.h
+++ b/apps/plugins/clock/clock.h
@@ -22,7 +22,6 @@
22#ifndef _CLOCK_ 22#ifndef _CLOCK_
23#define _CLOCK_ 23#define _CLOCK_
24#include "clock_settings.h" 24#include "clock_settings.h"
25extern const struct plugin_api* rb;
26 25
27struct time{ 26struct time{
28 int year, day, month; 27 int year, day, month;
diff --git a/apps/plugins/credits.c b/apps/plugins/credits.c
index 62471c5bc7..0251849c11 100644
--- a/apps/plugins/credits.c
+++ b/apps/plugins/credits.c
@@ -23,8 +23,6 @@
23 23
24PLUGIN_HEADER 24PLUGIN_HEADER
25 25
26static const struct plugin_api* rb;
27
28static const char* const credits[] = { 26static const char* const credits[] = {
29#include "credits.raw" /* generated list of names from docs/CREDITS */ 27#include "credits.raw" /* generated list of names from docs/CREDITS */
30}; 28};
@@ -371,13 +369,12 @@ static void roll_credits(void)
371 369
372#endif 370#endif
373 371
374enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 372enum plugin_status plugin_start(const void* parameter)
375{ 373{
376 (void)parameter; 374 (void)parameter;
377 rb = api;
378 375
379 /* Turn off backlight timeout */ 376 /* Turn off backlight timeout */
380 backlight_force_on(rb); /* backlight control in lib/helper.c */ 377 backlight_force_on(); /* backlight control in lib/helper.c */
381 378
382 rb->show_logo(); 379 rb->show_logo();
383#ifdef HAVE_LCD_CHARCELLS 380#ifdef HAVE_LCD_CHARCELLS
@@ -389,7 +386,7 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
389 roll_credits(); 386 roll_credits();
390 387
391 /* Turn on backlight timeout (revert to settings) */ 388 /* Turn on backlight timeout (revert to settings) */
392 backlight_use_settings(rb); /* backlight control in lib/helper.c */ 389 backlight_use_settings(); /* backlight control in lib/helper.c */
393 390
394 return PLUGIN_OK; 391 return PLUGIN_OK;
395} 392}
diff --git a/apps/plugins/cube.c b/apps/plugins/cube.c
index d43f06f4b8..9ba7a70385 100644
--- a/apps/plugins/cube.c
+++ b/apps/plugins/cube.c
@@ -413,8 +413,6 @@ static long matrice[3][3];
413static const int nb_points = 8; 413static const int nb_points = 8;
414static long z_off = 600; 414static long z_off = 600;
415 415
416static const struct plugin_api* rb;
417
418static void cube_rotate(int xa, int ya, int za) 416static void cube_rotate(int xa, int ya, int za)
419{ 417{
420 int i; 418 int i;
@@ -568,7 +566,7 @@ void cleanup(void *parameter)
568#endif 566#endif
569} 567}
570 568
571enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 569enum plugin_status plugin_start(const void* parameter)
572{ 570{
573 char buffer[30]; 571 char buffer[30];
574 int t_disp = 0; 572 int t_disp = 0;
@@ -587,14 +585,11 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
587 bool exit = false; 585 bool exit = false;
588 586
589 (void)(parameter); 587 (void)(parameter);
590 rb = api;
591 588
592#ifdef HAVE_LCD_BITMAP 589#ifdef HAVE_LCD_BITMAP
593#if LCD_DEPTH > 1 590#if defined(USE_GSLIB)
594 xlcd_init(rb);
595#elif defined(USE_GSLIB)
596 gbuf = (unsigned char *)rb->plugin_get_buffer(&gbuf_size); 591 gbuf = (unsigned char *)rb->plugin_get_buffer(&gbuf_size);
597 if (!grey_init(rb, gbuf, gbuf_size, GREY_BUFFERED, 592 if (!grey_init(gbuf, gbuf_size, GREY_BUFFERED,
598 LCD_WIDTH, LCD_HEIGHT, NULL)) 593 LCD_WIDTH, LCD_HEIGHT, NULL))
599 { 594 {
600 rb->splash(HZ, "Couldn't init greyscale display"); 595 rb->splash(HZ, "Couldn't init greyscale display");
@@ -614,7 +609,7 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
614#endif 609#endif
615 rb->lcd_setfont(FONT_SYSFIXED); 610 rb->lcd_setfont(FONT_SYSFIXED);
616#else /* LCD_CHARCELLS */ 611#else /* LCD_CHARCELLS */
617 if (!pgfx_init(rb, 4, 2)) 612 if (!pgfx_init(4, 2))
618 { 613 {
619 rb->splash(HZ*2, "Old LCD :("); 614 rb->splash(HZ*2, "Old LCD :(");
620 return PLUGIN_OK; 615 return PLUGIN_OK;
diff --git a/apps/plugins/demystify.c b/apps/plugins/demystify.c
index 145c3ce0be..5f44e11f3d 100644
--- a/apps/plugins/demystify.c
+++ b/apps/plugins/demystify.c
@@ -67,8 +67,6 @@ struct line_color
67 67
68/******************************* Globals ***********************************/ 68/******************************* Globals ***********************************/
69 69
70static const struct plugin_api* rb; /* global api struct pointer */
71
72/* 70/*
73 * Compute a new random step to make the point bounce the borders of the screen 71 * Compute a new random step to make the point bounce the borders of the screen
74 */ 72 */
@@ -258,9 +256,9 @@ void cleanup(void *parameter)
258{ 256{
259 (void)parameter; 257 (void)parameter;
260 258
261 backlight_use_settings(rb); 259 backlight_use_settings();
262#ifdef HAVE_REMOTE_LCD 260#ifdef HAVE_REMOTE_LCD
263 remote_backlight_use_settings(rb); 261 remote_backlight_use_settings();
264#endif 262#endif
265} 263}
266 264
@@ -384,7 +382,7 @@ int plugin_main(void)
384 rb->yield(); 382 rb->yield();
385 else 383 else
386 rb->sleep(sleep_time); 384 rb->sleep(sleep_time);
387 action = pluginlib_getaction(rb, TIMEOUT_NOBLOCK, 385 action = pluginlib_getaction(TIMEOUT_NOBLOCK,
388 plugin_contexts, NB_ACTION_CONTEXTS); 386 plugin_contexts, NB_ACTION_CONTEXTS);
389 switch(action) 387 switch(action)
390 { 388 {
@@ -426,18 +424,17 @@ int plugin_main(void)
426 424
427/*************************** Plugin entry point ****************************/ 425/*************************** Plugin entry point ****************************/
428 426
429enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 427enum plugin_status plugin_start(const void* parameter)
430{ 428{
431 int ret; 429 int ret;
432 430
433 rb = api; /* copy to global api pointer */
434 (void)parameter; 431 (void)parameter;
435#if LCD_DEPTH > 1 432#if LCD_DEPTH > 1
436 rb->lcd_set_backdrop(NULL); 433 rb->lcd_set_backdrop(NULL);
437#endif 434#endif
438 backlight_force_on(rb); /* backlight control in lib/helper.c */ 435 backlight_force_on(); /* backlight control in lib/helper.c */
439#ifdef HAVE_REMOTE_LCD 436#ifdef HAVE_REMOTE_LCD
440 remote_backlight_force_on(rb); /* remote backlight control in lib/helper.c */ 437 remote_backlight_force_on(); /* remote backlight control in lib/helper.c */
441#endif 438#endif
442 ret = plugin_main(); 439 ret = plugin_main();
443 440
diff --git a/apps/plugins/dice.c b/apps/plugins/dice.c
index 77bbda3cae..46b39a67ae 100644
--- a/apps/plugins/dice.c
+++ b/apps/plugins/dice.c
@@ -46,7 +46,6 @@ struct dices
46#define PRINT_BUFFER_LENGTH MAX_DICES*4 46#define PRINT_BUFFER_LENGTH MAX_DICES*4
47PLUGIN_HEADER 47PLUGIN_HEADER
48 48
49static const struct plugin_api* rb;
50static struct dices dice; 49static struct dices dice;
51static int sides_index; 50static int sides_index;
52 51
@@ -74,15 +73,13 @@ void dice_print(struct dices* dice, struct screen* display);
74bool dice_menu(struct dices* dice); 73bool dice_menu(struct dices* dice);
75 74
76/* plugin entry point */ 75/* plugin entry point */
77enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) { 76enum plugin_status plugin_start(const void* parameter) {
78 (void)parameter; 77 (void)parameter;
79 rb = api;
80 int i, action; 78 int i, action;
81 79
82 dice_init(&dice); 80 dice_init(&dice);
83 rb->srand(*rb->current_tick); 81 rb->srand(*rb->current_tick);
84 82
85 configfile_init(rb);
86 configfile_load(CFG_FILE, config, 2, 0); 83 configfile_load(CFG_FILE, config, 2, 0);
87 dice.nb_sides = nb_sides_values[sides_index]; 84 dice.nb_sides = nb_sides_values[sides_index];
88 if(!dice_menu(&dice)) 85 if(!dice_menu(&dice))
@@ -95,7 +92,7 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
95 FOR_NB_SCREENS(i) 92 FOR_NB_SCREENS(i)
96 dice_print( &dice, rb->screens[i] ); 93 dice_print( &dice, rb->screens[i] );
97 while(true) { 94 while(true) {
98 action = pluginlib_getaction(rb, TIMEOUT_BLOCK, 95 action = pluginlib_getaction(TIMEOUT_BLOCK,
99 plugin_contexts, 1); 96 plugin_contexts, 1);
100 switch(action) { 97 switch(action) {
101 case DICE_ROLL: 98 case DICE_ROLL:
diff --git a/apps/plugins/dict.c b/apps/plugins/dict.c
index 7e176e67a5..9c7e8594fa 100644
--- a/apps/plugins/dict.c
+++ b/apps/plugins/dict.c
@@ -23,8 +23,6 @@
23 23
24PLUGIN_HEADER 24PLUGIN_HEADER
25 25
26/* save the plugin api pointer. */
27static const struct plugin_api* rb;
28/* screen info */ 26/* screen info */
29static int display_columns, display_lines; 27static int display_columns, display_lines;
30 28
@@ -152,7 +150,7 @@ long reverse (long N) {
152#define DICT_DESC ROCKBOX_DIR "/rocks/apps/dict.desc" 150#define DICT_DESC ROCKBOX_DIR "/rocks/apps/dict.desc"
153 151
154/* the main plugin function */ 152/* the main plugin function */
155enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 153enum plugin_status plugin_start(const void* parameter)
156{ 154{
157 char searchword[WORDLEN]; /* word to search for */ 155 char searchword[WORDLEN]; /* word to search for */
158 char *description; /* pointer to description buffer */ 156 char *description; /* pointer to description buffer */
@@ -165,7 +163,6 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
165 163
166 /* plugin stuff */ 164 /* plugin stuff */
167 (void)parameter; 165 (void)parameter;
168 rb = api;
169 166
170 /* get screen info */ 167 /* get screen info */
171 init_screen(); 168 init_screen();
diff --git a/apps/plugins/disktidy.c b/apps/plugins/disktidy.c
index 2191764ca2..3eb61ead29 100644
--- a/apps/plugins/disktidy.c
+++ b/apps/plugins/disktidy.c
@@ -21,8 +21,7 @@
21#include "plugin.h" 21#include "plugin.h"
22 22
23PLUGIN_HEADER 23PLUGIN_HEADER
24static const struct plugin_api* rb; 24MEM_FUNCTION_WRAPPERS
25MEM_FUNCTION_WRAPPERS(rb)
26 25
27/* function return values */ 26/* function return values */
28enum tidy_return 27enum tidy_return
@@ -479,13 +478,12 @@ int tidy_lcd_menu(void)
479} 478}
480 479
481/* this is the plugin entry point */ 480/* this is the plugin entry point */
482enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 481enum plugin_status plugin_start(const void* parameter)
483{ 482{
484 enum tidy_return status; 483 enum tidy_return status;
485 int ret; 484 int ret;
486 (void)parameter; 485 (void)parameter;
487 486
488 rb = api;
489 tidy_type_count = 0; 487 tidy_type_count = 0;
490 tidy_load_file(DEFAULT_FILES); 488 tidy_load_file(DEFAULT_FILES);
491 tidy_load_file(CUSTOM_FILES); 489 tidy_load_file(CUSTOM_FILES);
diff --git a/apps/plugins/doom/i_video.c b/apps/plugins/doom/i_video.c
index 1d533d40ec..23872c221c 100644
--- a/apps/plugins/doom/i_video.c
+++ b/apps/plugins/doom/i_video.c
@@ -772,7 +772,7 @@ void I_InitGraphics(void)
772 772
773#ifndef HAVE_LCD_COLOR 773#ifndef HAVE_LCD_COLOR
774 gbuf=malloc(GREYBUFSIZE); 774 gbuf=malloc(GREYBUFSIZE);
775 grey_init(rb, gbuf, GREYBUFSIZE, GREY_ON_COP, LCD_WIDTH, LCD_HEIGHT, NULL); 775 grey_init(gbuf, GREYBUFSIZE, GREY_ON_COP, LCD_WIDTH, LCD_HEIGHT, NULL);
776 /* switch on greyscale overlay */ 776 /* switch on greyscale overlay */
777 grey_show(true); 777 grey_show(true);
778#endif 778#endif
diff --git a/apps/plugins/doom/rockdoom.c b/apps/plugins/doom/rockdoom.c
index 763e9d5681..1e7c9fa13a 100644
--- a/apps/plugins/doom/rockdoom.c
+++ b/apps/plugins/doom/rockdoom.c
@@ -101,7 +101,6 @@ int my_close(int id)
101 return 0; 101 return 0;
102} 102}
103#endif 103#endif
104const struct plugin_api* rb;
105#define MAXARGVS 100 104#define MAXARGVS 100
106 105
107bool noprintf=0; // Variable disables printf lcd updates to protect grayscale lib/direct lcd updates 106bool noprintf=0; // Variable disables printf lcd updates to protect grayscale lib/direct lcd updates
@@ -496,7 +495,7 @@ int Oset_keys()
496 { "Game Automap", NULL }, 495 { "Game Automap", NULL },
497 }; 496 };
498 497
499 m = menu_init(rb, items, sizeof(items) / sizeof(*items), 498 m = menu_init(items, sizeof(items) / sizeof(*items),
500 NULL, NULL, NULL, NULL); 499 NULL, NULL, NULL, NULL);
501 500
502 while(!menuquit) 501 while(!menuquit)
@@ -560,7 +559,7 @@ static bool Doptions()
560#endif 559#endif
561 }; 560 };
562 561
563 m = menu_init(rb, items, sizeof(items) / sizeof(*items), 562 m = menu_init(items, sizeof(items) / sizeof(*items),
564 NULL, NULL, NULL, NULL); 563 NULL, NULL, NULL, NULL);
565 564
566 while(!menuquit) 565 while(!menuquit)
@@ -583,7 +582,7 @@ int menuchoice(struct menu_item *menu, int items)
583{ 582{
584 int m, result; 583 int m, result;
585 584
586 m = menu_init(rb, menu, items,NULL, NULL, NULL, NULL); 585 m = menu_init(menu, items,NULL, NULL, NULL, NULL);
587 586
588 result= menu_show(m); 587 result= menu_show(m);
589 menu_exit(m); 588 menu_exit(m);
@@ -633,7 +632,7 @@ int doom_menu()
633 while (rb->button_get(false) != BUTTON_NONE) 632 while (rb->button_get(false) != BUTTON_NONE)
634 rb->yield(); 633 rb->yield();
635 634
636 m = menu_init(rb, items, sizeof(items) / sizeof(*items), 635 m = menu_init(items, sizeof(items) / sizeof(*items),
637 NULL, NULL, NULL, NULL); 636 NULL, NULL, NULL, NULL);
638 637
639 while(!menuquit) 638 while(!menuquit)
@@ -677,11 +676,10 @@ int doom_menu()
677 676
678extern int systemvol; 677extern int systemvol;
679/* this is the plugin entry point */ 678/* this is the plugin entry point */
680enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 679enum plugin_status plugin_start(const void* parameter)
681{ 680{
682 PLUGIN_IRAM_INIT(api) 681 PLUGIN_IRAM_INIT(rb)
683 682
684 rb = api;
685 (void)parameter; 683 (void)parameter;
686 684
687 doomexit=0; 685 doomexit=0;
@@ -741,7 +739,7 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
741 systemvol= rb->global_settings->volume-rb->global_settings->volume%((rb->sound_max(SOUND_VOLUME)-rb->sound_min(SOUND_VOLUME))/15); 739 systemvol= rb->global_settings->volume-rb->global_settings->volume%((rb->sound_max(SOUND_VOLUME)-rb->sound_min(SOUND_VOLUME))/15);
742 general_translucency = default_translucency; // phares 740 general_translucency = default_translucency; // phares
743 741
744 backlight_force_on(rb); 742 backlight_force_on();
745#ifdef RB_PROFILE 743#ifdef RB_PROFILE
746 rb->profile_thread(); 744 rb->profile_thread();
747#endif 745#endif
@@ -755,7 +753,7 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
755#ifdef RB_PROFILE 753#ifdef RB_PROFILE
756 rb->profstop(); 754 rb->profstop();
757#endif 755#endif
758 backlight_use_settings(rb); 756 backlight_use_settings();
759 757
760 M_SaveDefaults (); 758 M_SaveDefaults ();
761 759
diff --git a/apps/plugins/doom/rockmacros.h b/apps/plugins/doom/rockmacros.h
index 6abf025aac..73cd902277 100644
--- a/apps/plugins/doom/rockmacros.h
+++ b/apps/plugins/doom/rockmacros.h
@@ -26,7 +26,6 @@
26#include "autoconf.h" 26#include "autoconf.h"
27#include "z_zone.h" 27#include "z_zone.h"
28 28
29extern const struct plugin_api* rb;
30extern bool noprintf; 29extern bool noprintf;
31extern bool doomexit; 30extern bool doomexit;
32 31
diff --git a/apps/plugins/euroconverter.c b/apps/plugins/euroconverter.c
index 827c7db586..a9ec72d2b3 100644
--- a/apps/plugins/euroconverter.c
+++ b/apps/plugins/euroconverter.c
@@ -143,8 +143,6 @@ static unsigned char *abbrev_str[12] = {
143 143
144static unsigned long heuro,hhome; /*Handles for the new patterns*/ 144static unsigned long heuro,hhome; /*Handles for the new patterns*/
145 145
146static const struct plugin_api* rb;
147
148static char *currency_str[12] = { 146static char *currency_str[12] = {
149 "France", 147 "France",
150 "Germany", 148 "Germany",
@@ -405,7 +403,7 @@ static void euro_exit(void *parameter)
405 403
406 404
407/* this is the plugin entry point */ 405/* this is the plugin entry point */
408enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 406enum plugin_status plugin_start(const void* parameter)
409{ 407{
410 bool end, pos; 408 bool end, pos;
411 longlong_t e,h,old_e,old_h; 409 longlong_t e,h,old_e,old_h;
@@ -415,10 +413,6 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
415 this to avoid the compiler warning about it */ 413 this to avoid the compiler warning about it */
416 (void)parameter; 414 (void)parameter;
417 415
418 /* if you are using a global api pointer, don't forget to copy it!
419 otherwise you will get lovely "I04: IllInstr" errors... :-) */
420 rb = api;
421
422 /*Get the pattern handle*/ 416 /*Get the pattern handle*/
423 heuro=rb->lcd_get_locked_pattern(); 417 heuro=rb->lcd_get_locked_pattern();
424 hhome=rb->lcd_get_locked_pattern(); 418 hhome=rb->lcd_get_locked_pattern();
@@ -433,8 +427,6 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
433 cur_pos=3; 427 cur_pos=3;
434 inc=100000; 428 inc=100000;
435 429
436 configfile_init(rb);
437
438 load_config(); 430 load_config();
439 431
440 /*Empty the event queue*/ 432 /*Empty the event queue*/
diff --git a/apps/plugins/fire.c b/apps/plugins/fire.c
index f1b62f5b26..d8b31075ad 100644
--- a/apps/plugins/fire.c
+++ b/apps/plugins/fire.c
@@ -43,8 +43,6 @@
43 43
44PLUGIN_HEADER 44PLUGIN_HEADER
45 45
46static const struct plugin_api* rb; /* global api struct pointer */
47
48#ifndef HAVE_LCD_COLOR 46#ifndef HAVE_LCD_COLOR
49GREY_INFO_STRUCT 47GREY_INFO_STRUCT
50 static unsigned char draw_buffer[FIRE_WIDTH]; 48 static unsigned char draw_buffer[FIRE_WIDTH];
@@ -267,7 +265,7 @@ void cleanup(void *parameter)
267 grey_release(); 265 grey_release();
268#endif 266#endif
269 /* Turn on backlight timeout (revert to settings) */ 267 /* Turn on backlight timeout (revert to settings) */
270 backlight_use_settings(rb); /* backlight control in lib/helper.c */ 268 backlight_use_settings(); /* backlight control in lib/helper.c */
271} 269}
272 270
273 271
@@ -280,7 +278,7 @@ int init_grey(void)
280 /* get the remainder of the plugin buffer */ 278 /* get the remainder of the plugin buffer */
281 gbuf = (unsigned char *) rb->plugin_get_buffer(&gbuf_size); 279 gbuf = (unsigned char *) rb->plugin_get_buffer(&gbuf_size);
282 280
283 if (!grey_init(rb, gbuf, gbuf_size, GREY_ON_COP, 281 if (!grey_init(gbuf, gbuf_size, GREY_ON_COP,
284 FIRE_WIDTH, LCD_HEIGHT, NULL)){ 282 FIRE_WIDTH, LCD_HEIGHT, NULL)){
285 rb->splash(HZ, "not enough memory"); 283 rb->splash(HZ, "not enough memory");
286 return PLUGIN_ERROR; 284 return PLUGIN_ERROR;
@@ -312,7 +310,7 @@ int main(void)
312 fire_draw(&fire); 310 fire_draw(&fire);
313 rb->yield(); 311 rb->yield();
314 312
315 action = pluginlib_getaction(rb, 0, plugin_contexts, PLA_ARRAY_COUNT); 313 action = pluginlib_getaction(0, plugin_contexts, PLA_ARRAY_COUNT);
316 314
317 switch(action){ 315 switch(action){
318 case FIRE_QUIT: 316 case FIRE_QUIT:
@@ -346,17 +344,16 @@ int main(void)
346 344
347/*************************** Plugin entry point ****************************/ 345/*************************** Plugin entry point ****************************/
348 346
349enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 347enum plugin_status plugin_start(const void* parameter)
350{ 348{
351 int ret; 349 int ret;
352 350
353 rb = api; //copy to global api pointer
354 (void)parameter; 351 (void)parameter;
355#if LCD_DEPTH > 1 352#if LCD_DEPTH > 1
356 rb->lcd_set_backdrop(NULL); 353 rb->lcd_set_backdrop(NULL);
357#endif 354#endif
358 /* Turn off backlight timeout */ 355 /* Turn off backlight timeout */
359 backlight_force_on(rb); /* backlight control in lib/helper.c */ 356 backlight_force_on(); /* backlight control in lib/helper.c */
360 357
361 ret = main(); 358 ret = main();
362 359
diff --git a/apps/plugins/fireworks.c b/apps/plugins/fireworks.c
index 64b30dc36e..80e31a0e20 100644
--- a/apps/plugins/fireworks.c
+++ b/apps/plugins/fireworks.c
@@ -24,8 +24,6 @@
24 24
25PLUGIN_HEADER 25PLUGIN_HEADER
26 26
27static const struct plugin_api* rb;
28
29/*** 27/***
30 * FIREWORKS.C by ZAKK ROBERTS 28 * FIREWORKS.C by ZAKK ROBERTS
31 * Rockbox plugin simulating a fireworks display. 29 * Rockbox plugin simulating a fireworks display.
@@ -335,7 +333,7 @@ void fireworks_menu(void)
335 rb->lcd_clear_display(); 333 rb->lcd_clear_display();
336 rb->lcd_update(); 334 rb->lcd_update();
337 335
338 m = menu_init(rb, items, sizeof(items) / sizeof(*items), 336 m = menu_init(items, sizeof(items) / sizeof(*items),
339 NULL, NULL, NULL, NULL); 337 NULL, NULL, NULL, NULL);
340 338
341 rb->button_clear_queue(); 339 rb->button_clear_queue();
@@ -396,12 +394,10 @@ void fireworks_menu(void)
396} 394}
397 395
398/* this is the plugin entry point */ 396/* this is the plugin entry point */
399enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 397enum plugin_status plugin_start(const void* parameter)
400{ 398{
401 (void)parameter; 399 (void)parameter;
402 400
403 rb = api;
404
405 int j, i, autofire=0; 401 int j, i, autofire=0;
406 int thisrocket=0; 402 int thisrocket=0;
407 int start_tick, elapsed_tick; 403 int start_tick, elapsed_tick;
@@ -409,7 +405,7 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
409 405
410 /* set everything up.. no BL timeout, no backdrop, 406 /* set everything up.. no BL timeout, no backdrop,
411 white-text-on-black-background. */ 407 white-text-on-black-background. */
412 backlight_force_on(rb); /* backlight control in lib/helper.c */ 408 backlight_force_on(); /* backlight control in lib/helper.c */
413#if LCD_DEPTH > 1 409#if LCD_DEPTH > 1
414 rb->lcd_set_backdrop(NULL); 410 rb->lcd_set_backdrop(NULL);
415 rb->lcd_set_background(LCD_BLACK); 411 rb->lcd_set_background(LCD_BLACK);
@@ -566,7 +562,7 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
566 } 562 }
567 } 563 }
568 /* Turn on backlight timeout (revert to settings) */ 564 /* Turn on backlight timeout (revert to settings) */
569 backlight_use_settings(rb); /* backlight control in lib/helper.c */ 565 backlight_use_settings(); /* backlight control in lib/helper.c */
570 566
571#ifdef HAVE_ADJUSTABLE_CPU_FREQ 567#ifdef HAVE_ADJUSTABLE_CPU_FREQ
572 rb->cpu_boost(false); 568 rb->cpu_boost(false);
diff --git a/apps/plugins/firmware_flash.c b/apps/plugins/firmware_flash.c
index 6380f6dbdb..c855fb669f 100644
--- a/apps/plugins/firmware_flash.c
+++ b/apps/plugins/firmware_flash.c
@@ -128,8 +128,6 @@ typedef struct
128 char name[32]; 128 char name[32];
129} tFlashInfo; 129} tFlashInfo;
130 130
131static const struct plugin_api* rb; /* here is a global api struct pointer */
132
133#define MASK_ADR 0xFC /* position of hardware mask value in Flash */ 131#define MASK_ADR 0xFC /* position of hardware mask value in Flash */
134#define VERSION_ADR 0xFE /* position of firmware version value in Flash */ 132#define VERSION_ADR 0xFE /* position of firmware version value in Flash */
135#define PLATFORM_ADR 0xFB /* position of my platform ID value in Flash */ 133#define PLATFORM_ADR 0xFB /* position of my platform ID value in Flash */
@@ -1074,12 +1072,10 @@ void DoUserDialog(char* filename)
1074 1072
1075/***************** Plugin Entry Point *****************/ 1073/***************** Plugin Entry Point *****************/
1076 1074
1077enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 1075enum plugin_status plugin_start(const void* parameter)
1078{ 1076{
1079 int oldmode; 1077 int oldmode;
1080 1078
1081 rb = api; /* copy to global api pointer */
1082
1083 /* now go ahead and have fun! */ 1079 /* now go ahead and have fun! */
1084 oldmode = rb->system_memory_guard(MEMGUARD_NONE); /*disable memory guard */ 1080 oldmode = rb->system_memory_guard(MEMGUARD_NONE); /*disable memory guard */
1085 DoUserDialog((char*) parameter); 1081 DoUserDialog((char*) parameter);
diff --git a/apps/plugins/flipit.c b/apps/plugins/flipit.c
index f4725e4fa0..fe97a6a068 100644
--- a/apps/plugins/flipit.c
+++ b/apps/plugins/flipit.c
@@ -298,7 +298,6 @@ PLUGIN_HEADER
298#endif 298#endif
299#endif 299#endif
300 300
301static const struct plugin_api* rb;
302static int spots[20]; 301static int spots[20];
303static int toggle[20]; 302static int toggle[20];
304static int cursor_pos, moves; 303static int cursor_pos, moves;
@@ -645,12 +644,11 @@ static bool flipit_loop(void)
645} 644}
646 645
647/* called function from outside */ 646/* called function from outside */
648enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 647enum plugin_status plugin_start(const void* parameter)
649{ 648{
650 int i, rc; 649 int i, rc;
651 650
652 (void)parameter; 651 (void)parameter;
653 rb = api;
654 652
655#ifdef HAVE_LCD_COLOR 653#ifdef HAVE_LCD_COLOR
656 rb->lcd_set_background(LCD_WHITE); 654 rb->lcd_set_background(LCD_WHITE);
diff --git a/apps/plugins/greyscale.c b/apps/plugins/greyscale.c
index cd8db5bf8b..2cd373ea9b 100644
--- a/apps/plugins/greyscale.c
+++ b/apps/plugins/greyscale.c
@@ -104,7 +104,6 @@ PLUGIN_HEADER
104/******************************* Globals ***********************************/ 104/******************************* Globals ***********************************/
105 105
106GREY_INFO_STRUCT 106GREY_INFO_STRUCT
107static const struct plugin_api* rb; /* global api struct pointer */
108static char pbuf[32]; /* global printf buffer */ 107static char pbuf[32]; /* global printf buffer */
109static unsigned char *gbuf; 108static unsigned char *gbuf;
110static size_t gbuf_size = 0; 109static size_t gbuf_size = 0;
@@ -117,7 +116,7 @@ void cleanup(void *parameter)
117 116
118 grey_release(); /* switch off overlay and deinitialize */ 117 grey_release(); /* switch off overlay and deinitialize */
119 /* Turn on backlight timeout (revert to settings) */ 118 /* Turn on backlight timeout (revert to settings) */
120 backlight_use_settings(rb); /* backlight control in lib/helper.c */ 119 backlight_use_settings(); /* backlight control in lib/helper.c */
121} 120}
122 121
123/* this is only a demo of what the framework can do */ 122/* this is only a demo of what the framework can do */
@@ -202,7 +201,7 @@ int main(void)
202 }; 201 };
203 202
204 /* Turn off backlight timeout */ 203 /* Turn off backlight timeout */
205 backlight_force_on(rb); /* backlight control in lib/helper.c */ 204 backlight_force_on(); /* backlight control in lib/helper.c */
206 205
207 rb->lcd_setfont(FONT_SYSFIXED); /* select default font */ 206 rb->lcd_setfont(FONT_SYSFIXED); /* select default font */
208 207
@@ -212,7 +211,7 @@ int main(void)
212 /* initialize the greyscale buffer: 211 /* initialize the greyscale buffer:
213 Archos: 112 pixels wide, 7 rows (56 pixels) high. 212 Archos: 112 pixels wide, 7 rows (56 pixels) high.
214 H1x0: 160 pixels wide, 30 rows (120 pixels) high. */ 213 H1x0: 160 pixels wide, 30 rows (120 pixels) high. */
215 if (!grey_init(rb, gbuf, gbuf_size, GREY_BUFFERED|GREY_ON_COP, 214 if (!grey_init(gbuf, gbuf_size, GREY_BUFFERED|GREY_ON_COP,
216 LCD_WIDTH, GFX_HEIGHT, NULL)) 215 LCD_WIDTH, GFX_HEIGHT, NULL))
217 { 216 {
218 rb->splash(HZ, "Not enough memory."); 217 rb->splash(HZ, "Not enough memory.");
@@ -363,9 +362,8 @@ int main(void)
363 362
364/*************************** Plugin entry point ****************************/ 363/*************************** Plugin entry point ****************************/
365 364
366enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 365enum plugin_status plugin_start(const void* parameter)
367{ 366{
368 rb = api; /* copy to global api pointer */
369 (void)parameter; 367 (void)parameter;
370 368
371 return main(); 369 return main();
diff --git a/apps/plugins/helloworld.c b/apps/plugins/helloworld.c
index c4bd043244..e582eb77b3 100644
--- a/apps/plugins/helloworld.c
+++ b/apps/plugins/helloworld.c
@@ -26,22 +26,13 @@
26 convention, although the actual position doesn't matter */ 26 convention, although the actual position doesn't matter */
27PLUGIN_HEADER 27PLUGIN_HEADER
28 28
29/* here is a global api struct pointer. while not strictly necessary,
30 it's nice not to have to pass the api pointer in all function calls
31 in the plugin */
32static const struct plugin_api* rb;
33
34/* this is the plugin entry point */ 29/* this is the plugin entry point */
35enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 30enum plugin_status plugin_start(const void* parameter)
36{ 31{
37 /* if you don't use the parameter, you can do like 32 /* if you don't use the parameter, you can do like
38 this to avoid the compiler warning about it */ 33 this to avoid the compiler warning about it */
39 (void)parameter; 34 (void)parameter;
40 35
41 /* if you are using a global api pointer, don't forget to copy it!
42 otherwise you will get lovely "I04: IllInstr" errors... :-) */
43 rb = api;
44
45 /* now go ahead and have fun! */ 36 /* now go ahead and have fun! */
46 rb->splash(HZ*2, "Hello world!"); 37 rb->splash(HZ*2, "Hello world!");
47 38
diff --git a/apps/plugins/invadrox.c b/apps/plugins/invadrox.c
index 0d50c67e73..718cb032cc 100644
--- a/apps/plugins/invadrox.c
+++ b/apps/plugins/invadrox.c
@@ -611,8 +611,6 @@ unsigned char fire_sprite[FIRE_HEIGHT] = {
611#define CYCLETIME 40 611#define CYCLETIME 40
612 612
613 613
614static const struct plugin_api* rb;
615
616/* Physical x is at PLAYFIELD_X + LIVES_X + x * ALIEN_SPEED 614/* Physical x is at PLAYFIELD_X + LIVES_X + x * ALIEN_SPEED
617 * Physical y is at y * ALIEN_HEIGHT 615 * Physical y is at y * ALIEN_HEIGHT
618 */ 616 */
@@ -1600,7 +1598,6 @@ void init_invadrox(void)
1600 rb->lcd_set_background(LCD_BLACK); 1598 rb->lcd_set_background(LCD_BLACK);
1601 rb->lcd_set_foreground(LCD_BLACK); 1599 rb->lcd_set_foreground(LCD_BLACK);
1602 1600
1603 highscore_init(rb);
1604 if (highscore_load(HISCOREFILE, &hiscore, 1) < 0) { 1601 if (highscore_load(HISCOREFILE, &hiscore, 1) < 0) {
1605 /* Init hiscore to 0 */ 1602 /* Init hiscore to 0 */
1606 rb->strncpy(hiscore.name, "Invader", sizeof(hiscore.name)); 1603 rb->strncpy(hiscore.name, "Invader", sizeof(hiscore.name));
@@ -1801,13 +1798,11 @@ void game_loop(void)
1801 1798
1802 1799
1803/* this is the plugin entry point */ 1800/* this is the plugin entry point */
1804enum plugin_status plugin_start(const struct plugin_api* api, UNUSED const void* parameter) 1801enum plugin_status plugin_start(UNUSED const void* parameter)
1805{ 1802{
1806 rb = api;
1807
1808 rb->lcd_setfont(FONT_SYSFIXED); 1803 rb->lcd_setfont(FONT_SYSFIXED);
1809 /* Turn off backlight timeout */ 1804 /* Turn off backlight timeout */
1810 backlight_force_on(rb); /* backlight control in lib/helper.c */ 1805 backlight_force_on(); /* backlight control in lib/helper.c */
1811 1806
1812 /* now go ahead and have fun! */ 1807 /* now go ahead and have fun! */
1813 game_loop(); 1808 game_loop();
@@ -1825,7 +1820,7 @@ enum plugin_status plugin_start(const struct plugin_api* api, UNUSED const void*
1825 /* Restore user's original backlight setting */ 1820 /* Restore user's original backlight setting */
1826 rb->lcd_setfont(FONT_UI); 1821 rb->lcd_setfont(FONT_UI);
1827 /* Turn on backlight timeout (revert to settings) */ 1822 /* Turn on backlight timeout (revert to settings) */
1828 backlight_use_settings(rb); /* backlight control in lib/helper.c */ 1823 backlight_use_settings(); /* backlight control in lib/helper.c */
1829 1824
1830 return PLUGIN_OK; 1825 return PLUGIN_OK;
1831} 1826}
diff --git a/apps/plugins/iriver_flash.c b/apps/plugins/iriver_flash.c
index e7ae056d38..b2273f1b86 100644
--- a/apps/plugins/iriver_flash.c
+++ b/apps/plugins/iriver_flash.c
@@ -56,8 +56,6 @@ struct flash_info
56 char name[32]; 56 char name[32];
57}; 57};
58 58
59static const struct plugin_api* rb; /* here is a global api struct pointer */
60
61#ifdef IRIVER_H100_SERIES 59#ifdef IRIVER_H100_SERIES
62#define SEC_SIZE 4096 60#define SEC_SIZE 4096
63#define BOOTLOADER_ERASEGUARD (BOOTLOADER_ENTRYPOINT / SEC_SIZE) 61#define BOOTLOADER_ERASEGUARD (BOOTLOADER_ENTRYPOINT / SEC_SIZE)
@@ -804,12 +802,10 @@ void DoUserDialog(char* filename)
804 802
805/***************** Plugin Entry Point *****************/ 803/***************** Plugin Entry Point *****************/
806 804
807enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 805enum plugin_status plugin_start(const void* parameter)
808{ 806{
809 int oldmode; 807 int oldmode;
810 808
811 rb = api; /* copy to global api pointer */
812
813 /* now go ahead and have fun! */ 809 /* now go ahead and have fun! */
814 oldmode = rb->system_memory_guard(MEMGUARD_NONE); /*disable memory guard */ 810 oldmode = rb->system_memory_guard(MEMGUARD_NONE); /*disable memory guard */
815 DoUserDialog((char*) parameter); 811 DoUserDialog((char*) parameter);
diff --git a/apps/plugins/iriverify.c b/apps/plugins/iriverify.c
index 7e77ae3e69..35a96a05c4 100644
--- a/apps/plugins/iriverify.c
+++ b/apps/plugins/iriverify.c
@@ -27,8 +27,6 @@
27 27
28PLUGIN_HEADER 28PLUGIN_HEADER
29 29
30static const struct plugin_api* rb;
31
32ssize_t buf_size; 30ssize_t buf_size;
33static char *filename; 31static char *filename;
34static int readsize; 32static int readsize;
@@ -132,15 +130,13 @@ static int write_file(void)
132 return 0; 130 return 0;
133} 131}
134 132
135enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 133enum plugin_status plugin_start(const void* parameter)
136{ 134{
137 char *buf; 135 char *buf;
138 int rc; 136 int rc;
139 int i; 137 int i;
140 filename = (char *)parameter; 138 filename = (char *)parameter;
141 139
142 rb = api;
143
144 buf = rb->plugin_get_audio_buffer((size_t *)&buf_size); /* start munching memory */ 140 buf = rb->plugin_get_audio_buffer((size_t *)&buf_size); /* start munching memory */
145 141
146 stringbuffer = buf; 142 stringbuffer = buf;
diff --git a/apps/plugins/jackpot.c b/apps/plugins/jackpot.c
index 2380dad2b9..e13dcf8994 100644
--- a/apps/plugins/jackpot.c
+++ b/apps/plugins/jackpot.c
@@ -71,8 +71,6 @@ const struct picture jackpot_pictures[]={
71#define SLEEP_TIME (HZ/200) 71#define SLEEP_TIME (HZ/200)
72#endif /* HAVE_LCD_CHARCELLS */ 72#endif /* HAVE_LCD_CHARCELLS */
73 73
74static const struct plugin_api* rb;
75
76struct jackpot 74struct jackpot
77{ 75{
78 /* A slot can display "NB_PICTURES" pictures 76 /* A slot can display "NB_PICTURES" pictures
@@ -293,9 +291,8 @@ void jackpot_play_turn(struct jackpot* game)
293 jackpot_print_turn_result(game, gain, rb->screens[d]); 291 jackpot_print_turn_result(game, gain, rb->screens[d]);
294} 292}
295 293
296enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 294enum plugin_status plugin_start(const void* parameter)
297{ 295{
298 rb = api;
299 int action, i; 296 int action, i;
300 struct jackpot game; 297 struct jackpot game;
301 (void)parameter; 298 (void)parameter;
@@ -313,7 +310,7 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
313 rb->button_clear_queue(); 310 rb->button_clear_queue();
314 while (true) 311 while (true)
315 { 312 {
316 action = pluginlib_getaction(rb, TIMEOUT_BLOCK, 313 action = pluginlib_getaction(TIMEOUT_BLOCK,
317 plugin_contexts, 1); 314 plugin_contexts, 1);
318 switch ( action ) 315 switch ( action )
319 { 316 {
diff --git a/apps/plugins/jewels.c b/apps/plugins/jewels.c
index 645135a918..7b45e554e2 100644
--- a/apps/plugins/jewels.c
+++ b/apps/plugins/jewels.c
@@ -359,9 +359,6 @@ struct jewels_menu {
359 {"Exit Jewels", MRES_EXIT}}} 359 {"Exit Jewels", MRES_EXIT}}}
360}; 360};
361 361
362/* global rockbox api */
363static const struct plugin_api* rb;
364
365/* external bitmaps */ 362/* external bitmaps */
366extern const fb_data jewels[]; 363extern const fb_data jewels[];
367 364
@@ -1767,7 +1764,7 @@ static int jewels_main(struct game_context* bj) {
1767 continue; 1764 continue;
1768 1765
1769 case MRES_PLAYBACK: 1766 case MRES_PLAYBACK:
1770 playback_control(rb, NULL); 1767 playback_control(NULL);
1771 rb->lcd_setfont(FONT_SYSFIXED); 1768 rb->lcd_setfont(FONT_SYSFIXED);
1772 inmenu = false; 1769 inmenu = false;
1773 selected = false; 1770 selected = false;
@@ -1940,7 +1937,7 @@ static int jewels_main(struct game_context* bj) {
1940/***************************************************************************** 1937/*****************************************************************************
1941* plugin entry point. 1938* plugin entry point.
1942******************************************************************************/ 1939******************************************************************************/
1943enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) { 1940enum plugin_status plugin_start(const void* parameter) {
1944 struct game_context bj; 1941 struct game_context bj;
1945 bool exit = false; 1942 bool exit = false;
1946 int position; 1943 int position;
@@ -1948,7 +1945,6 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
1948 1945
1949 /* plugin init */ 1946 /* plugin init */
1950 (void)parameter; 1947 (void)parameter;
1951 rb = api;
1952 /* end of plugin init */ 1948 /* end of plugin init */
1953 1949
1954 /* load high scores */ 1950 /* load high scores */
diff --git a/apps/plugins/jpeg/jpeg.c b/apps/plugins/jpeg/jpeg.c
index d8775dd176..82d9186298 100644
--- a/apps/plugins/jpeg/jpeg.c
+++ b/apps/plugins/jpeg/jpeg.c
@@ -76,9 +76,7 @@ GREY_INFO_STRUCT
76 76
77/******************************* Globals ***********************************/ 77/******************************* Globals ***********************************/
78 78
79const struct plugin_api* rb; /* Exported to other .c files in this plugin */ 79MEM_FUNCTION_WRAPPERS;
80
81MEM_FUNCTION_WRAPPERS(rb);
82 80
83static int slideshow_enabled = false; /* run slideshow */ 81static int slideshow_enabled = false; /* run slideshow */
84static int running_slideshow = false; /* loading image because of slideshw */ 82static int running_slideshow = false; /* loading image because of slideshw */
@@ -334,7 +332,7 @@ static void display_options(void)
334 { "Dithering", set_option_dithering }, 332 { "Dithering", set_option_dithering },
335 }; 333 };
336 334
337 int m = menu_init(rb, items, ARRAYLEN(items), 335 int m = menu_init(items, ARRAYLEN(items),
338 NULL, NULL, NULL, NULL); 336 NULL, NULL, NULL, NULL);
339 menu_run(m); 337 menu_run(m);
340 menu_exit(m); 338 menu_exit(m);
@@ -394,7 +392,7 @@ int show_menu(void) /* return 1 to quit */
394 { "Enable", -1 }, 392 { "Enable", -1 },
395 }; 393 };
396 394
397 m = menu_init(rb, items, sizeof(items) / sizeof(*items), 395 m = menu_init(items, sizeof(items) / sizeof(*items),
398 NULL, NULL, NULL, NULL); 396 NULL, NULL, NULL, NULL);
399 result=menu_show(m); 397 result=menu_show(m);
400 398
@@ -418,7 +416,7 @@ int show_menu(void) /* return 1 to quit */
418 case MIID_SHOW_PLAYBACK_MENU: 416 case MIID_SHOW_PLAYBACK_MENU:
419 if (plug_buf) 417 if (plug_buf)
420 { 418 {
421 playback_control(rb, NULL); 419 playback_control(NULL);
422 } 420 }
423 else 421 else
424 { 422 {
@@ -1183,10 +1181,8 @@ int load_and_show(char* filename)
1183 1181
1184/******************** Plugin entry point *********************/ 1182/******************** Plugin entry point *********************/
1185 1183
1186enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 1184enum plugin_status plugin_start(const void* parameter)
1187{ 1185{
1188 rb = api;
1189
1190 int condition; 1186 int condition;
1191#ifdef USEGSLIB 1187#ifdef USEGSLIB
1192 long greysize; /* helper */ 1188 long greysize; /* helper */
@@ -1219,7 +1215,7 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
1219#endif 1215#endif
1220 1216
1221#ifdef USEGSLIB 1217#ifdef USEGSLIB
1222 if (!grey_init(rb, buf, buf_size, GREY_ON_COP, 1218 if (!grey_init(buf, buf_size, GREY_ON_COP,
1223 LCD_WIDTH, LCD_HEIGHT, &greysize)) 1219 LCD_WIDTH, LCD_HEIGHT, &greysize))
1224 { 1220 {
1225 rb->splash(HZ, "grey buf error"); 1221 rb->splash(HZ, "grey buf error");
@@ -1227,13 +1223,10 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
1227 } 1223 }
1228 buf += greysize; 1224 buf += greysize;
1229 buf_size -= greysize; 1225 buf_size -= greysize;
1230#else
1231 xlcd_init(rb);
1232#endif 1226#endif
1233 1227
1234 /* should be ok to just load settings since the plugin itself has 1228 /* should be ok to just load settings since the plugin itself has
1235 just been loaded from disk and the drive should be spinning */ 1229 just been loaded from disk and the drive should be spinning */
1236 configfile_init(rb);
1237 configfile_load(JPEG_CONFIGFILE, jpeg_config, 1230 configfile_load(JPEG_CONFIGFILE, jpeg_config,
1238 ARRAYLEN(jpeg_config), JPEG_SETTINGS_MINVERSION); 1231 ARRAYLEN(jpeg_config), JPEG_SETTINGS_MINVERSION);
1239 old_settings = jpeg_settings; 1232 old_settings = jpeg_settings;
@@ -1241,7 +1234,7 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
1241 buf_images = buf; buf_images_size = buf_size; 1234 buf_images = buf; buf_images_size = buf_size;
1242 1235
1243 /* Turn off backlight timeout */ 1236 /* Turn off backlight timeout */
1244 backlight_force_on(rb); /* backlight control in lib/helper.c */ 1237 backlight_force_on(); /* backlight control in lib/helper.c */
1245 1238
1246 do 1239 do
1247 { 1240 {
@@ -1263,7 +1256,7 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
1263#endif 1256#endif
1264 1257
1265 /* Turn on backlight timeout (revert to settings) */ 1258 /* Turn on backlight timeout (revert to settings) */
1266 backlight_use_settings(rb); /* backlight control in lib/helper.c */ 1259 backlight_use_settings(); /* backlight control in lib/helper.c */
1267 1260
1268#ifdef USEGSLIB 1261#ifdef USEGSLIB
1269 grey_release(); /* deinitialize */ 1262 grey_release(); /* deinitialize */
diff --git a/apps/plugins/jpeg/jpeg_decoder.c b/apps/plugins/jpeg/jpeg_decoder.c
index ffd71a1320..71d50888c3 100644
--- a/apps/plugins/jpeg/jpeg_decoder.c
+++ b/apps/plugins/jpeg/jpeg_decoder.c
@@ -29,8 +29,6 @@
29 29
30#include "jpeg_decoder.h" 30#include "jpeg_decoder.h"
31 31
32extern const struct plugin_api* rb;
33
34/* for portability of below JPEG code */ 32/* for portability of below JPEG code */
35#define MEMSET(p,v,c) rb->memset(p,v,c) 33#define MEMSET(p,v,c) rb->memset(p,v,c)
36#define MEMCPY(d,s,c) rb->memcpy(d,s,c) 34#define MEMCPY(d,s,c) rb->memcpy(d,s,c)
diff --git a/apps/plugins/jpeg/yuv2rgb.c b/apps/plugins/jpeg/yuv2rgb.c
index 1130f038af..c2464924fe 100644
--- a/apps/plugins/jpeg/yuv2rgb.c
+++ b/apps/plugins/jpeg/yuv2rgb.c
@@ -28,9 +28,6 @@
28#include "plugin.h" 28#include "plugin.h"
29#include "yuv2rgb.h" 29#include "yuv2rgb.h"
30 30
31/* Needed for memset and rb->lcd_framebuffer */
32extern const struct plugin_api* rb;
33
34/* 31/*
35 * Conversion of full 0-255 range YCrCb to RGB: 32 * Conversion of full 0-255 range YCrCb to RGB:
36 * |R| |1.000000 -0.000001 1.402000| |Y'| 33 * |R| |1.000000 -0.000001 1.402000| |Y'|
diff --git a/apps/plugins/keybox.c b/apps/plugins/keybox.c
index 0e657f3bcc..3c874a6549 100644
--- a/apps/plugins/keybox.c
+++ b/apps/plugins/keybox.c
@@ -64,8 +64,7 @@ union hash
64 uint32_t words[4]; 64 uint32_t words[4];
65}; 65};
66 66
67static const struct plugin_api* rb; 67MEM_FUNCTION_WRAPPERS;
68MEM_FUNCTION_WRAPPERS(rb);
69static char buffer[sizeof(struct pw_entry)*MAX_ENTRIES]; 68static char buffer[sizeof(struct pw_entry)*MAX_ENTRIES];
70static int bytes_read = 0; /* bytes read into the buffer */ 69static int bytes_read = 0; /* bytes read into the buffer */
71static struct gui_synclist kb_list; 70static struct gui_synclist kb_list;
@@ -637,11 +636,9 @@ static int main_menu(void)
637 return 0; 636 return 0;
638} 637}
639 638
640enum plugin_status plugin_start(const struct plugin_api *api, 639enum plugin_status plugin_start(const void *parameter)
641 const void *parameter)
642{ 640{
643 (void)parameter; 641 (void)parameter;
644 rb = api;
645 int ret; 642 int ret;
646 643
647 rb->gui_synclist_init(&kb_list, &kb_list_cb, NULL, false, 1, NULL); 644 rb->gui_synclist_init(&kb_list, &kb_list_cb, NULL, false, 1, NULL);
@@ -652,8 +649,6 @@ enum plugin_status plugin_start(const struct plugin_api *api,
652 rb->gui_synclist_limit_scroll(&kb_list, false); 649 rb->gui_synclist_limit_scroll(&kb_list, false);
653 rb->gui_synclist_select_item(&kb_list, 0); 650 rb->gui_synclist_select_item(&kb_list, 0);
654 651
655 md5_init(api);
656
657 init_ll(); 652 init_ll();
658 ret = main_menu(); 653 ret = main_menu();
659 654
diff --git a/apps/plugins/lamp.c b/apps/plugins/lamp.c
index 337ea85f43..1d99ef64d3 100644
--- a/apps/plugins/lamp.c
+++ b/apps/plugins/lamp.c
@@ -99,8 +99,6 @@ PLUGIN_HEADER
99# endif 99# endif
100#endif 100#endif
101 101
102static const struct plugin_api* rb; /* global api struct pointer */
103
104#ifdef HAVE_LCD_COLOR 102#ifdef HAVE_LCD_COLOR
105/* RGB color sets */ 103/* RGB color sets */
106#define NUM_COLORSETS 2 104#define NUM_COLORSETS 2
@@ -109,11 +107,10 @@ static int colorset[NUM_COLORSETS][3] = { { 255, 255, 255 } , /* white */
109#endif /* HAVE_LCD_COLOR */ 107#endif /* HAVE_LCD_COLOR */
110 108
111/* this is the plugin entry point */ 109/* this is the plugin entry point */
112enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 110enum plugin_status plugin_start(const void* parameter)
113{ 111{
114 long button; 112 long button;
115 (void)parameter; 113 (void)parameter;
116 rb = api;
117 114
118#ifdef HAVE_LCD_COLOR 115#ifdef HAVE_LCD_COLOR
119 int cs = 0; 116 int cs = 0;
@@ -151,9 +148,9 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
151#endif /* MROBE_100 */ 148#endif /* MROBE_100 */
152#endif /* HAVE_LCD_INVERT */ 149#endif /* HAVE_LCD_INVERT */
153 150
154 backlight_force_on(rb); 151 backlight_force_on();
155#ifdef HAVE_BUTTON_LIGHT 152#ifdef HAVE_BUTTON_LIGHT
156 buttonlight_force_on(rb); 153 buttonlight_force_on();
157#endif /* HAVE_BUTTON_LIGHT */ 154#endif /* HAVE_BUTTON_LIGHT */
158 155
159#ifdef HAVE_LCD_COLOR 156#ifdef HAVE_LCD_COLOR
@@ -220,9 +217,9 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
220#endif /*HAVE_LCD_COLOR */ 217#endif /*HAVE_LCD_COLOR */
221 218
222 /* restore */ 219 /* restore */
223 backlight_use_settings(rb); 220 backlight_use_settings();
224#ifdef HAVE_BUTTON_LIGHT 221#ifdef HAVE_BUTTON_LIGHT
225 buttonlight_use_settings(rb); 222 buttonlight_use_settings();
226#endif /* HAVE_BUTTON_LIGHT */ 223#endif /* HAVE_BUTTON_LIGHT */
227 224
228#ifdef HAVE_LCD_INVERT 225#ifdef HAVE_LCD_INVERT
diff --git a/apps/plugins/lib/checkbox.c b/apps/plugins/lib/checkbox.c
index fc3a5e1e7d..221137b328 100644
--- a/apps/plugins/lib/checkbox.c
+++ b/apps/plugins/lib/checkbox.c
@@ -27,19 +27,19 @@
27/* 27/*
28 * Print a checkbox 28 * Print a checkbox
29 */ 29 */
30void checkbox(const struct plugin_api *api, int x, int y, int width, int height, bool checked) 30void checkbox(int x, int y, int width, int height, bool checked)
31{ 31{
32 /* draw box */ 32 /* draw box */
33 api->lcd_drawrect(x, y, width, height); 33 rb->lcd_drawrect(x, y, width, height);
34 34
35 /* clear inner area */ 35 /* clear inner area */
36 api->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID); 36 rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID);
37 api->lcd_fillrect(x + 1, y + 1, width - 2, height - 2); 37 rb->lcd_fillrect(x + 1, y + 1, width - 2, height - 2);
38 api->lcd_set_drawmode(DRMODE_SOLID); 38 rb->lcd_set_drawmode(DRMODE_SOLID);
39 39
40 if (checked){ 40 if (checked){
41 api->lcd_drawline(x + 2, y + 2, x + width - 2 - 1 , y + height - 2 - 1); 41 rb->lcd_drawline(x + 2, y + 2, x + width - 2 - 1 , y + height - 2 - 1);
42 api->lcd_drawline(x + 2, y + height - 2 - 1, x + width - 2 - 1, y + 2); 42 rb->lcd_drawline(x + 2, y + height - 2 - 1, x + width - 2 - 1, y + 2);
43 } 43 }
44} 44}
45 45
diff --git a/apps/plugins/lib/checkbox.h b/apps/plugins/lib/checkbox.h
index 1456bd4bb9..81a26e15ba 100644
--- a/apps/plugins/lib/checkbox.h
+++ b/apps/plugins/lib/checkbox.h
@@ -26,6 +26,6 @@
26/* 26/*
27 * Print a checkbox 27 * Print a checkbox
28 */ 28 */
29void checkbox(const struct plugin_api *api, int x, int y, int width, int height, bool checked); 29void checkbox(int x, int y, int width, int height, bool checked);
30 30
31#endif 31#endif
diff --git a/apps/plugins/lib/configfile.c b/apps/plugins/lib/configfile.c
index 4fb037cb8e..419109f904 100644
--- a/apps/plugins/lib/configfile.c
+++ b/apps/plugins/lib/configfile.c
@@ -21,27 +21,20 @@
21#include "plugin.h" 21#include "plugin.h"
22#include "configfile.h" 22#include "configfile.h"
23 23
24static const struct plugin_api *cfg_rb;
25
26void configfile_init(const struct plugin_api* newrb)
27{
28 cfg_rb = newrb;
29}
30
31static void get_cfg_filename(char* buf, int buf_len, const char* filename) 24static void get_cfg_filename(char* buf, int buf_len, const char* filename)
32{ 25{
33 char *s; 26 char *s;
34 cfg_rb->strcpy(buf, cfg_rb->plugin_get_current_filename()); 27 rb->strcpy(buf, rb->plugin_get_current_filename());
35 s = cfg_rb->strrchr(buf, '/'); 28 s = rb->strrchr(buf, '/');
36 if (!s) /* should never happen */ 29 if (!s) /* should never happen */
37 { 30 {
38 cfg_rb->snprintf(buf, buf_len, PLUGIN_DIR "/%s", filename); 31 rb->snprintf(buf, buf_len, PLUGIN_DIR "/%s", filename);
39 } 32 }
40 else 33 else
41 { 34 {
42 s++; 35 s++;
43 *s = '\0'; 36 *s = '\0';
44 cfg_rb->strcat(s, filename); 37 rb->strcat(s, filename);
45 } 38 }
46} 39}
47 40
@@ -53,30 +46,30 @@ int configfile_save(const char *filename, struct configdata *cfg,
53 char buf[MAX_PATH]; 46 char buf[MAX_PATH];
54 47
55 get_cfg_filename(buf, MAX_PATH, filename); 48 get_cfg_filename(buf, MAX_PATH, filename);
56 fd = cfg_rb->creat(buf); 49 fd = rb->creat(buf);
57 if(fd < 0) 50 if(fd < 0)
58 return fd*10 - 1; 51 return fd*10 - 1;
59 52
60 /* pre-allocate 10 bytes for INT */ 53 /* pre-allocate 10 bytes for INT */
61 cfg_rb->fdprintf(fd, "file version: %10d\n", version); 54 rb->fdprintf(fd, "file version: %10d\n", version);
62 55
63 for(i = 0;i < num_items;i++) { 56 for(i = 0;i < num_items;i++) {
64 switch(cfg[i].type) { 57 switch(cfg[i].type) {
65 case TYPE_INT: 58 case TYPE_INT:
66 /* pre-allocate 10 bytes for INT */ 59 /* pre-allocate 10 bytes for INT */
67 cfg_rb->fdprintf(fd, "%s: %10d\n", 60 rb->fdprintf(fd, "%s: %10d\n",
68 cfg[i].name, 61 cfg[i].name,
69 *cfg[i].val); 62 *cfg[i].val);
70 break; 63 break;
71 64
72 case TYPE_ENUM: 65 case TYPE_ENUM:
73 cfg_rb->fdprintf(fd, "%s: %s\n", 66 rb->fdprintf(fd, "%s: %s\n",
74 cfg[i].name, 67 cfg[i].name,
75 cfg[i].values[*cfg[i].val]); 68 cfg[i].values[*cfg[i].val]);
76 break; 69 break;
77 70
78 case TYPE_STRING: 71 case TYPE_STRING:
79 cfg_rb->fdprintf(fd, "%s: %s\n", 72 rb->fdprintf(fd, "%s: %s\n",
80 cfg[i].name, 73 cfg[i].name,
81 cfg[i].string); 74 cfg[i].string);
82 break; 75 break;
@@ -84,7 +77,7 @@ int configfile_save(const char *filename, struct configdata *cfg,
84 } 77 }
85 } 78 }
86 79
87 cfg_rb->close(fd); 80 rb->close(fd);
88 return 0; 81 return 0;
89} 82}
90 83
@@ -100,27 +93,27 @@ int configfile_load(const char *filename, struct configdata *cfg,
100 int tmp; 93 int tmp;
101 94
102 get_cfg_filename(buf, MAX_PATH, filename); 95 get_cfg_filename(buf, MAX_PATH, filename);
103 fd = cfg_rb->open(buf, O_RDONLY); 96 fd = rb->open(buf, O_RDONLY);
104 if(fd < 0) 97 if(fd < 0)
105 return fd*10 - 1; 98 return fd*10 - 1;
106 99
107 while(cfg_rb->read_line(fd, buf, MAX_PATH) > 0) { 100 while(rb->read_line(fd, buf, MAX_PATH) > 0) {
108 cfg_rb->settings_parseline(buf, &name, &val); 101 rb->settings_parseline(buf, &name, &val);
109 102
110 /* Bail out if the file version is too old */ 103 /* Bail out if the file version is too old */
111 if(!cfg_rb->strcmp("file version", name)) { 104 if(!rb->strcmp("file version", name)) {
112 file_version = cfg_rb->atoi(val); 105 file_version = rb->atoi(val);
113 if(file_version < min_version) { 106 if(file_version < min_version) {
114 cfg_rb->close(fd); 107 rb->close(fd);
115 return -1; 108 return -1;
116 } 109 }
117 } 110 }
118 111
119 for(i = 0;i < num_items;i++) { 112 for(i = 0;i < num_items;i++) {
120 if(!cfg_rb->strcmp(cfg[i].name, name)) { 113 if(!rb->strcmp(cfg[i].name, name)) {
121 switch(cfg[i].type) { 114 switch(cfg[i].type) {
122 case TYPE_INT: 115 case TYPE_INT:
123 tmp = cfg_rb->atoi(val); 116 tmp = rb->atoi(val);
124 /* Only set it if it's within range */ 117 /* Only set it if it's within range */
125 if(tmp >= cfg[i].min && tmp <= cfg[i].max) 118 if(tmp >= cfg[i].min && tmp <= cfg[i].max)
126 *cfg[i].val = tmp; 119 *cfg[i].val = tmp;
@@ -128,21 +121,21 @@ int configfile_load(const char *filename, struct configdata *cfg,
128 121
129 case TYPE_ENUM: 122 case TYPE_ENUM:
130 for(j = 0;j < cfg[i].max;j++) { 123 for(j = 0;j < cfg[i].max;j++) {
131 if(!cfg_rb->strcmp(cfg[i].values[j], val)) { 124 if(!rb->strcmp(cfg[i].values[j], val)) {
132 *cfg[i].val = j; 125 *cfg[i].val = j;
133 } 126 }
134 } 127 }
135 break; 128 break;
136 129
137 case TYPE_STRING: 130 case TYPE_STRING:
138 cfg_rb->strncpy(cfg[i].string, val, cfg[i].max); 131 rb->strncpy(cfg[i].string, val, cfg[i].max);
139 break; 132 break;
140 } 133 }
141 } 134 }
142 } 135 }
143 } 136 }
144 137
145 cfg_rb->close(fd); 138 rb->close(fd);
146 return 0; 139 return 0;
147} 140}
148 141
@@ -154,21 +147,21 @@ int configfile_get_value(const char* filename, const char* name)
154 char buf[MAX_PATH]; 147 char buf[MAX_PATH];
155 148
156 get_cfg_filename(buf, MAX_PATH, filename); 149 get_cfg_filename(buf, MAX_PATH, filename);
157 fd = cfg_rb->open(buf, O_RDONLY); 150 fd = rb->open(buf, O_RDONLY);
158 if(fd < 0) 151 if(fd < 0)
159 return -1; 152 return -1;
160 153
161 while(cfg_rb->read_line(fd, buf, MAX_PATH) > 0) 154 while(rb->read_line(fd, buf, MAX_PATH) > 0)
162 { 155 {
163 cfg_rb->settings_parseline(buf, &pname, &pval); 156 rb->settings_parseline(buf, &pname, &pval);
164 if(!cfg_rb->strcmp(name, pname)) 157 if(!rb->strcmp(name, pname))
165 { 158 {
166 cfg_rb->close(fd); 159 rb->close(fd);
167 return cfg_rb->atoi(pval); 160 return rb->atoi(pval);
168 } 161 }
169 } 162 }
170 163
171 cfg_rb->close(fd); 164 rb->close(fd);
172 return -1; 165 return -1;
173} 166}
174 167
@@ -185,20 +178,20 @@ int configfile_update_entry(const char* filename, const char* name, int val)
185 178
186 /* open the current config file */ 179 /* open the current config file */
187 get_cfg_filename(path, MAX_PATH, filename); 180 get_cfg_filename(path, MAX_PATH, filename);
188 fd = cfg_rb->open(path, O_RDWR); 181 fd = rb->open(path, O_RDWR);
189 if(fd < 0) 182 if(fd < 0)
190 return -1; 183 return -1;
191 184
192 /* read in the current stored settings */ 185 /* read in the current stored settings */
193 while((line_len = cfg_rb->read_line(fd, buf, 256)) > 0) 186 while((line_len = rb->read_line(fd, buf, 256)) > 0)
194 { 187 {
195 cfg_rb->settings_parseline(buf, &pname, &pval); 188 rb->settings_parseline(buf, &pname, &pval);
196 if(!cfg_rb->strcmp(name, pname)) 189 if(!rb->strcmp(name, pname))
197 { 190 {
198 found = 1; 191 found = 1;
199 cfg_rb->lseek(fd, pos, SEEK_SET); 192 rb->lseek(fd, pos, SEEK_SET);
200 /* pre-allocate 10 bytes for INT */ 193 /* pre-allocate 10 bytes for INT */
201 cfg_rb->fdprintf(fd, "%s: %10d\n", pname, val); 194 rb->fdprintf(fd, "%s: %10d\n", pname, val);
202 break; 195 break;
203 } 196 }
204 pos += line_len; 197 pos += line_len;
@@ -207,9 +200,9 @@ int configfile_update_entry(const char* filename, const char* name, int val)
207 /* if (name/val) is a new entry just append to file */ 200 /* if (name/val) is a new entry just append to file */
208 if (found == 0) 201 if (found == 0)
209 /* pre-allocate 10 bytes for INT */ 202 /* pre-allocate 10 bytes for INT */
210 cfg_rb->fdprintf(fd, "%s: %10d\n", name, val); 203 rb->fdprintf(fd, "%s: %10d\n", name, val);
211 204
212 cfg_rb->close(fd); 205 rb->close(fd);
213 206
214 return found; 207 return found;
215} 208}
diff --git a/apps/plugins/lib/configfile.h b/apps/plugins/lib/configfile.h
index 9c926bd02c..0804a5930d 100644
--- a/apps/plugins/lib/configfile.h
+++ b/apps/plugins/lib/configfile.h
@@ -39,8 +39,6 @@ struct configdata
39 NULL otherwise */ 39 NULL otherwise */
40}; 40};
41 41
42void configfile_init(const struct plugin_api* newrb);
43
44/* configfile_save - Given configdata entries this function will 42/* configfile_save - Given configdata entries this function will
45 create a config file with these entries, destroying any 43 create a config file with these entries, destroying any
46 previous config file of the same name */ 44 previous config file of the same name */
diff --git a/apps/plugins/lib/grey.h b/apps/plugins/lib/grey.h
index 8c9d40ab8d..7c990ad792 100644
--- a/apps/plugins/lib/grey.h
+++ b/apps/plugins/lib/grey.h
@@ -52,7 +52,7 @@
52#define GREY_ON_COP 0x0004 /* Run ISR on COP (PP targets) */ 52#define GREY_ON_COP 0x0004 /* Run ISR on COP (PP targets) */
53 53
54/* Library initialisation and release */ 54/* Library initialisation and release */
55bool grey_init(const struct plugin_api* newrb, unsigned char *gbuf, long gbuf_size, 55bool grey_init(unsigned char *gbuf, long gbuf_size,
56 unsigned features, int width, int height, long *buf_taken); 56 unsigned features, int width, int height, long *buf_taken);
57void grey_release(void); 57void grey_release(void);
58 58
@@ -172,7 +172,6 @@ struct _grey_info
172 int bheight; /* 4-pixel or 8-pixel units */ 172 int bheight; /* 4-pixel or 8-pixel units */
173#endif 173#endif
174 unsigned long flags; /* various flags, see #defines */ 174 unsigned long flags; /* various flags, see #defines */
175 const struct plugin_api *rb; /* plugin API pointer */
176 unsigned char *values; /* start of greyscale pixel values */ 175 unsigned char *values; /* start of greyscale pixel values */
177 unsigned char *phases; /* start of greyscale pixel phases */ 176 unsigned char *phases; /* start of greyscale pixel phases */
178 unsigned char *buffer; /* start of chunky pixel buffer (for buffered mode) */ 177 unsigned char *buffer; /* start of chunky pixel buffer (for buffered mode) */
diff --git a/apps/plugins/lib/grey_core.c b/apps/plugins/lib/grey_core.c
index c4eb0fc080..c73f0cdf52 100644
--- a/apps/plugins/lib/grey_core.c
+++ b/apps/plugins/lib/grey_core.c
@@ -336,16 +336,16 @@ static inline void _deferred_update(void)
336 int y2 = MIN(_grey_info.y + _grey_info.height, LCD_HEIGHT); 336 int y2 = MIN(_grey_info.y + _grey_info.height, LCD_HEIGHT);
337 337
338 if (y1 > 0) /* refresh part above overlay, full width */ 338 if (y1 > 0) /* refresh part above overlay, full width */
339 _grey_info.rb->lcd_update_rect(0, 0, LCD_WIDTH, y1); 339 rb->lcd_update_rect(0, 0, LCD_WIDTH, y1);
340 340
341 if (y2 < LCD_HEIGHT) /* refresh part below overlay, full width */ 341 if (y2 < LCD_HEIGHT) /* refresh part below overlay, full width */
342 _grey_info.rb->lcd_update_rect(0, y2, LCD_WIDTH, LCD_HEIGHT - y2); 342 rb->lcd_update_rect(0, y2, LCD_WIDTH, LCD_HEIGHT - y2);
343 343
344 if (x1 > 0) /* refresh part to the left of overlay */ 344 if (x1 > 0) /* refresh part to the left of overlay */
345 _grey_info.rb->lcd_update_rect(0, y1, x1, y2 - y1); 345 rb->lcd_update_rect(0, y1, x1, y2 - y1);
346 346
347 if (x2 < LCD_WIDTH) /* refresh part to the right of overlay */ 347 if (x2 < LCD_WIDTH) /* refresh part to the right of overlay */
348 _grey_info.rb->lcd_update_rect(x2, y1, LCD_WIDTH - x2, y2 - y1); 348 rb->lcd_update_rect(x2, y1, LCD_WIDTH - x2, y2 - y1);
349} 349}
350 350
351#ifdef SIMULATOR 351#ifdef SIMULATOR
@@ -373,7 +373,7 @@ static unsigned long _grey_get_pixel(int x, int y)
373static void _timer_isr(void) 373static void _timer_isr(void)
374{ 374{
375#if defined(HAVE_BACKLIGHT_INVERSION) && !defined(SIMULATOR) 375#if defined(HAVE_BACKLIGHT_INVERSION) && !defined(SIMULATOR)
376 unsigned long check = _grey_info.rb->is_backlight_on(true) 376 unsigned long check = rb->is_backlight_on(true)
377 ? 0 : _GREY_BACKLIGHT_ON; 377 ? 0 : _GREY_BACKLIGHT_ON;
378 378
379 if ((_grey_info.flags & (_GREY_BACKLIGHT_ON|GREY_RAWMAPPED)) == check) 379 if ((_grey_info.flags & (_GREY_BACKLIGHT_ON|GREY_RAWMAPPED)) == check)
@@ -384,12 +384,12 @@ static void _timer_isr(void)
384 } 384 }
385#endif 385#endif
386#if LCD_PIXELFORMAT == HORIZONTAL_PACKING 386#if LCD_PIXELFORMAT == HORIZONTAL_PACKING
387 _grey_info.rb->lcd_blit_grey_phase(_grey_info.values, _grey_info.phases, 387 rb->lcd_blit_grey_phase(_grey_info.values, _grey_info.phases,
388 _grey_info.bx, _grey_info.y, 388 _grey_info.bx, _grey_info.y,
389 _grey_info.bwidth, _grey_info.height, 389 _grey_info.bwidth, _grey_info.height,
390 _grey_info.width); 390 _grey_info.width);
391#else /* vertical packing or vertical interleaved */ 391#else /* vertical packing or vertical interleaved */
392 _grey_info.rb->lcd_blit_grey_phase(_grey_info.values, _grey_info.phases, 392 rb->lcd_blit_grey_phase(_grey_info.values, _grey_info.phases,
393 _grey_info.x, _grey_info.by, 393 _grey_info.x, _grey_info.by,
394 _grey_info.width, _grey_info.bheight, 394 _grey_info.width, _grey_info.bheight,
395 _grey_info.width); 395 _grey_info.width);
@@ -501,7 +501,7 @@ static void fill_gvalues(void)
501 501
502 The function is authentic regarding memory usage on the simulator, even 502 The function is authentic regarding memory usage on the simulator, even
503 if it doesn't use all of the allocated memory. */ 503 if it doesn't use all of the allocated memory. */
504bool grey_init(const struct plugin_api* newrb, unsigned char *gbuf, long gbuf_size, 504bool grey_init(unsigned char *gbuf, long gbuf_size,
505 unsigned features, int width, int height, long *buf_taken) 505 unsigned features, int width, int height, long *buf_taken)
506{ 506{
507 int bdim, i; 507 int bdim, i;
@@ -511,8 +511,6 @@ bool grey_init(const struct plugin_api* newrb, unsigned char *gbuf, long gbuf_si
511 unsigned *dst, *end; 511 unsigned *dst, *end;
512#endif 512#endif
513 513
514 _grey_info.rb = newrb;
515
516 if ((unsigned) width > LCD_WIDTH 514 if ((unsigned) width > LCD_WIDTH
517 || (unsigned) height > LCD_HEIGHT) 515 || (unsigned) height > LCD_HEIGHT)
518 return false; 516 return false;
@@ -559,7 +557,7 @@ bool grey_init(const struct plugin_api* newrb, unsigned char *gbuf, long gbuf_si
559 return false; 557 return false;
560 558
561 /* Init to white */ 559 /* Init to white */
562 _grey_info.rb->memset(_grey_info.values, 0x80, plane_size); 560 rb->memset(_grey_info.values, 0x80, plane_size);
563 561
564#ifndef SIMULATOR 562#ifndef SIMULATOR
565 /* Init phases with random bits */ 563 /* Init phases with random bits */
@@ -567,7 +565,7 @@ bool grey_init(const struct plugin_api* newrb, unsigned char *gbuf, long gbuf_si
567 end = (unsigned*)(_grey_info.phases + plane_size); 565 end = (unsigned*)(_grey_info.phases + plane_size);
568 566
569 do 567 do
570 *dst++ = _grey_info.rb->rand(); 568 *dst++ = rb->rand();
571 while (dst < end); 569 while (dst < end);
572#endif 570#endif
573 571
@@ -601,7 +599,7 @@ bool grey_init(const struct plugin_api* newrb, unsigned char *gbuf, long gbuf_si
601 else 599 else
602 { 600 {
603#if defined(HAVE_BACKLIGHT_INVERSION) && !defined(SIMULATOR) 601#if defined(HAVE_BACKLIGHT_INVERSION) && !defined(SIMULATOR)
604 if (_grey_info.rb->is_backlight_on(true)) 602 if (rb->is_backlight_on(true))
605 _grey_info.flags |= _GREY_BACKLIGHT_ON; 603 _grey_info.flags |= _GREY_BACKLIGHT_ON;
606#endif 604#endif
607 fill_gvalues(); 605 fill_gvalues();
@@ -636,40 +634,40 @@ void grey_show(bool enable)
636 { 634 {
637 _grey_info.flags |= _GREY_RUNNING; 635 _grey_info.flags |= _GREY_RUNNING;
638#ifdef SIMULATOR 636#ifdef SIMULATOR
639 _grey_info.rb->sim_lcd_ex_init(129, _grey_get_pixel); 637 rb->sim_lcd_ex_init(129, _grey_get_pixel);
640 _grey_info.rb->sim_lcd_ex_update_rect(_grey_info.x, _grey_info.y, 638 rb->sim_lcd_ex_update_rect(_grey_info.x, _grey_info.y,
641 _grey_info.width, _grey_info.height); 639 _grey_info.width, _grey_info.height);
642#else /* !SIMULATOR */ 640#else /* !SIMULATOR */
643#ifdef NEED_BOOST 641#ifdef NEED_BOOST
644 _grey_info.rb->cpu_boost(true); 642 rb->cpu_boost(true);
645#endif 643#endif
646#if NUM_CORES > 1 644#if NUM_CORES > 1
647 _grey_info.rb->timer_register(1, NULL, TIMER_FREQ / LCD_SCANRATE, 645 rb->timer_register(1, NULL, TIMER_FREQ / LCD_SCANRATE,
648 1, _timer_isr, 646 1, _timer_isr,
649 (_grey_info.flags & GREY_ON_COP) ? COP : CPU); 647 (_grey_info.flags & GREY_ON_COP) ? COP : CPU);
650#else 648#else
651 _grey_info.rb->timer_register(1, NULL, TIMER_FREQ / LCD_SCANRATE, 1, 649 rb->timer_register(1, NULL, TIMER_FREQ / LCD_SCANRATE, 1,
652 _timer_isr); 650 _timer_isr);
653#endif 651#endif
654#endif /* !SIMULATOR */ 652#endif /* !SIMULATOR */
655 _grey_info.rb->screen_dump_set_hook(grey_screendump_hook); 653 rb->screen_dump_set_hook(grey_screendump_hook);
656 } 654 }
657 else if (!enable && (_grey_info.flags & _GREY_RUNNING)) 655 else if (!enable && (_grey_info.flags & _GREY_RUNNING))
658 { 656 {
659#ifdef SIMULATOR 657#ifdef SIMULATOR
660 _grey_info.rb->sim_lcd_ex_init(0, NULL); 658 rb->sim_lcd_ex_init(0, NULL);
661#else /* !SIMULATOR */ 659#else /* !SIMULATOR */
662 _grey_info.rb->timer_unregister(); 660 rb->timer_unregister();
663#if NUM_CORES > 1 /* Make sure the ISR has finished before calling lcd_update() */ 661#if NUM_CORES > 1 /* Make sure the ISR has finished before calling lcd_update() */
664 _grey_info.rb->sleep(HZ/100); 662 rb->sleep(HZ/100);
665#endif 663#endif
666#ifdef NEED_BOOST 664#ifdef NEED_BOOST
667 _grey_info.rb->cpu_boost(false); 665 rb->cpu_boost(false);
668#endif 666#endif
669#endif /* !SIMULATOR */ 667#endif /* !SIMULATOR */
670 _grey_info.flags &= ~_GREY_RUNNING; 668 _grey_info.flags &= ~_GREY_RUNNING;
671 _grey_info.rb->screen_dump_set_hook(NULL); 669 rb->screen_dump_set_hook(NULL);
672 _grey_info.rb->lcd_update(); /* restore whatever there was before */ 670 rb->lcd_update(); /* restore whatever there was before */
673 } 671 }
674} 672}
675 673
@@ -699,7 +697,7 @@ void grey_deferred_lcd_update(void)
699#endif 697#endif
700 } 698 }
701 else 699 else
702 _grey_info.rb->lcd_update(); 700 rb->lcd_update();
703} 701}
704 702
705/*** Screenshot ***/ 703/*** Screenshot ***/
@@ -786,10 +784,10 @@ static void grey_screendump_hook(int fd)
786 unsigned char *clut_entry; 784 unsigned char *clut_entry;
787 unsigned char linebuf[MAX(4*BMP_VARCOLORS,BMP_LINESIZE)]; 785 unsigned char linebuf[MAX(4*BMP_VARCOLORS,BMP_LINESIZE)];
788 786
789 _grey_info.rb->write(fd, bmpheader, sizeof(bmpheader)); /* write header */ 787 rb->write(fd, bmpheader, sizeof(bmpheader)); /* write header */
790 788
791 /* build clut */ 789 /* build clut */
792 _grey_info.rb->memset(linebuf, 0, 4*BMP_VARCOLORS); 790 rb->memset(linebuf, 0, 4*BMP_VARCOLORS);
793 clut_entry = linebuf; 791 clut_entry = linebuf;
794 792
795 for (i = 0; i <= 128; i++) 793 for (i = 0; i <= 128; i++)
@@ -808,17 +806,17 @@ static void grey_screendump_hook(int fd)
808#endif 806#endif
809 clut_entry++; 807 clut_entry++;
810 } 808 }
811 _grey_info.rb->write(fd, linebuf, 4*BMP_VARCOLORS); 809 rb->write(fd, linebuf, 4*BMP_VARCOLORS);
812 810
813 /* BMP image goes bottom -> top */ 811 /* BMP image goes bottom -> top */
814 for (y = LCD_HEIGHT - 1; y >= 0; y--) 812 for (y = LCD_HEIGHT - 1; y >= 0; y--)
815 { 813 {
816 _grey_info.rb->memset(linebuf, 0, BMP_LINESIZE); 814 rb->memset(linebuf, 0, BMP_LINESIZE);
817 815
818 gy = y - _grey_info.y; 816 gy = y - _grey_info.y;
819#if LCD_PIXELFORMAT == HORIZONTAL_PACKING 817#if LCD_PIXELFORMAT == HORIZONTAL_PACKING
820#if LCD_DEPTH == 2 818#if LCD_DEPTH == 2
821 lcdptr = _grey_info.rb->lcd_framebuffer + _GREY_MULUQ(LCD_FBWIDTH, y); 819 lcdptr = rb->lcd_framebuffer + _GREY_MULUQ(LCD_FBWIDTH, y);
822 820
823 for (x = 0; x < LCD_WIDTH; x += 4) 821 for (x = 0; x < LCD_WIDTH; x += 4)
824 { 822 {
@@ -846,7 +844,7 @@ static void grey_screendump_hook(int fd)
846#elif LCD_PIXELFORMAT == VERTICAL_PACKING 844#elif LCD_PIXELFORMAT == VERTICAL_PACKING
847#if LCD_DEPTH == 1 845#if LCD_DEPTH == 1
848 mask = 1 << (y & 7); 846 mask = 1 << (y & 7);
849 lcdptr = _grey_info.rb->lcd_framebuffer + _GREY_MULUQ(LCD_WIDTH, y >> 3); 847 lcdptr = rb->lcd_framebuffer + _GREY_MULUQ(LCD_WIDTH, y >> 3);
850 848
851 for (x = 0; x < LCD_WIDTH; x++) 849 for (x = 0; x < LCD_WIDTH; x++)
852 { 850 {
@@ -869,7 +867,7 @@ static void grey_screendump_hook(int fd)
869 } 867 }
870#elif LCD_DEPTH == 2 868#elif LCD_DEPTH == 2
871 shift = 2 * (y & 3); 869 shift = 2 * (y & 3);
872 lcdptr = _grey_info.rb->lcd_framebuffer + _GREY_MULUQ(LCD_WIDTH, y >> 2); 870 lcdptr = rb->lcd_framebuffer + _GREY_MULUQ(LCD_WIDTH, y >> 2);
873 871
874 for (x = 0; x < LCD_WIDTH; x++) 872 for (x = 0; x < LCD_WIDTH; x++)
875 { 873 {
@@ -894,7 +892,7 @@ static void grey_screendump_hook(int fd)
894#elif LCD_PIXELFORMAT == VERTICAL_INTERLEAVED 892#elif LCD_PIXELFORMAT == VERTICAL_INTERLEAVED
895#if LCD_DEPTH == 2 893#if LCD_DEPTH == 2
896 shift = y & 7; 894 shift = y & 7;
897 lcdptr = _grey_info.rb->lcd_framebuffer + _GREY_MULUQ(LCD_WIDTH, y >> 3); 895 lcdptr = rb->lcd_framebuffer + _GREY_MULUQ(LCD_WIDTH, y >> 3);
898 896
899 for (x = 0; x < LCD_WIDTH; x++) 897 for (x = 0; x < LCD_WIDTH; x++)
900 { 898 {
@@ -919,6 +917,6 @@ static void grey_screendump_hook(int fd)
919#endif /* LCD_DEPTH */ 917#endif /* LCD_DEPTH */
920#endif /* LCD_PIXELFORMAT */ 918#endif /* LCD_PIXELFORMAT */
921 919
922 _grey_info.rb->write(fd, linebuf, BMP_LINESIZE); 920 rb->write(fd, linebuf, BMP_LINESIZE);
923 } 921 }
924} 922}
diff --git a/apps/plugins/lib/grey_draw.c b/apps/plugins/lib/grey_draw.c
index 5879b8e35a..2ae96603df 100644
--- a/apps/plugins/lib/grey_draw.c
+++ b/apps/plugins/lib/grey_draw.c
@@ -63,7 +63,7 @@ void grey_clear_display(void)
63 int value = (_grey_info.drawmode & DRMODE_INVERSEVID) ? 63 int value = (_grey_info.drawmode & DRMODE_INVERSEVID) ?
64 _grey_info.fg_brightness : _grey_info.bg_brightness; 64 _grey_info.fg_brightness : _grey_info.bg_brightness;
65 65
66 _grey_info.rb->memset(_grey_info.buffer, value, 66 rb->memset(_grey_info.buffer, value,
67 _GREY_MULUQ(_grey_info.width, _grey_info.height)); 67 _GREY_MULUQ(_grey_info.width, _grey_info.height));
68} 68}
69 69
@@ -196,7 +196,7 @@ void grey_hline(int x1, int x2, int y)
196 dst = &_grey_info.buffer[_GREY_MULUQ(_grey_info.width, y) + x1]; 196 dst = &_grey_info.buffer[_GREY_MULUQ(_grey_info.width, y) + x1];
197 197
198 if (fillopt) 198 if (fillopt)
199 _grey_info.rb->memset(dst, value, x2 - x1 + 1); 199 rb->memset(dst, value, x2 - x1 + 1);
200 else 200 else
201 { 201 {
202 unsigned char *dst_end = dst + x2 - x1; 202 unsigned char *dst_end = dst + x2 - x1;
@@ -381,7 +381,7 @@ void grey_fillrect(int x, int y, int width, int height)
381 do 381 do
382 { 382 {
383 if (fillopt) 383 if (fillopt)
384 _grey_info.rb->memset(dst, value, width); 384 rb->memset(dst, value, width);
385 else 385 else
386 { 386 {
387 unsigned char *dst_row = dst; 387 unsigned char *dst_row = dst;
@@ -516,7 +516,7 @@ void grey_gray_bitmap_part(const unsigned char *src, int src_x, int src_y,
516 516
517 do 517 do
518 { 518 {
519 _grey_info.rb->memcpy(dst, src, width); 519 rb->memcpy(dst, src, width);
520 dst += _grey_info.width; 520 dst += _grey_info.width;
521 src += stride; 521 src += stride;
522 } 522 }
@@ -535,9 +535,9 @@ void grey_putsxyofs(int x, int y, int ofs, const unsigned char *str)
535{ 535{
536 int ch; 536 int ch;
537 unsigned short *ucs; 537 unsigned short *ucs;
538 struct font* pf = _grey_info.rb->font_get(_grey_info.curfont); 538 struct font* pf = rb->font_get(_grey_info.curfont);
539 539
540 ucs = _grey_info.rb->bidi_l2v(str, 1); 540 ucs = rb->bidi_l2v(str, 1);
541 541
542 while ((ch = *ucs++) != 0 && x < _grey_info.width) 542 while ((ch = *ucs++) != 0 && x < _grey_info.width)
543 { 543 {
@@ -545,7 +545,7 @@ void grey_putsxyofs(int x, int y, int ofs, const unsigned char *str)
545 const unsigned char *bits; 545 const unsigned char *bits;
546 546
547 /* get proportional width and glyph bits */ 547 /* get proportional width and glyph bits */
548 width = _grey_info.rb->font_get_width(pf, ch); 548 width = rb->font_get_width(pf, ch);
549 549
550 if (ofs > width) 550 if (ofs > width)
551 { 551 {
@@ -553,7 +553,7 @@ void grey_putsxyofs(int x, int y, int ofs, const unsigned char *str)
553 continue; 553 continue;
554 } 554 }
555 555
556 bits = _grey_info.rb->font_get_bits(pf, ch); 556 bits = rb->font_get_bits(pf, ch);
557 557
558 grey_mono_bitmap_part(bits, ofs, 0, width, x, y, width - ofs, pf->height); 558 grey_mono_bitmap_part(bits, ofs, 0, width, x, y, width - ofs, pf->height);
559 559
@@ -577,10 +577,10 @@ void grey_ub_clear_display(void)
577 _grey_info.fg_brightness : 577 _grey_info.fg_brightness :
578 _grey_info.bg_brightness]; 578 _grey_info.bg_brightness];
579 579
580 _grey_info.rb->memset(_grey_info.values, value, 580 rb->memset(_grey_info.values, value,
581 _GREY_MULUQ(_grey_info.width, _grey_info.height)); 581 _GREY_MULUQ(_grey_info.width, _grey_info.height));
582#ifdef SIMULATOR 582#ifdef SIMULATOR
583 _grey_info.rb->sim_lcd_ex_update_rect(_grey_info.x, _grey_info.y, 583 rb->sim_lcd_ex_update_rect(_grey_info.x, _grey_info.y,
584 _grey_info.width, _grey_info.height); 584 _grey_info.width, _grey_info.height);
585#endif 585#endif
586} 586}
@@ -655,7 +655,7 @@ void grey_ub_gray_bitmap_part(const unsigned char *src, int src_x, int src_y,
655 } 655 }
656 while (++yc < ye); 656 while (++yc < ye);
657#ifdef SIMULATOR 657#ifdef SIMULATOR
658 _grey_info.rb->sim_lcd_ex_update_rect(_grey_info.x + x, _grey_info.y + y, 658 rb->sim_lcd_ex_update_rect(_grey_info.x + x, _grey_info.y + y,
659 width, height); 659 width, height);
660#endif 660#endif
661} 661}
diff --git a/apps/plugins/lib/grey_parm.c b/apps/plugins/lib/grey_parm.c
index 90391d779b..00193e12f2 100644
--- a/apps/plugins/lib/grey_parm.c
+++ b/apps/plugins/lib/grey_parm.c
@@ -51,7 +51,7 @@ void grey_set_position(int x, int y)
51 if (_grey_info.flags & _GREY_RUNNING) 51 if (_grey_info.flags & _GREY_RUNNING)
52 { 52 {
53#ifdef SIMULATOR 53#ifdef SIMULATOR
54 _grey_info.rb->sim_lcd_ex_update_rect(_grey_info.x, _grey_info.y, 54 rb->sim_lcd_ex_update_rect(_grey_info.x, _grey_info.y,
55 _grey_info.width, 55 _grey_info.width,
56 _grey_info.height); 56 _grey_info.height);
57 grey_deferred_lcd_update(); 57 grey_deferred_lcd_update();
@@ -114,5 +114,5 @@ void grey_setfont(int newfont)
114/* Get width and height of a text when printed with the current font */ 114/* Get width and height of a text when printed with the current font */
115int grey_getstringsize(const unsigned char *str, int *w, int *h) 115int grey_getstringsize(const unsigned char *str, int *w, int *h)
116{ 116{
117 return _grey_info.rb->font_getstringsize(str, w, h, _grey_info.curfont); 117 return rb->font_getstringsize(str, w, h, _grey_info.curfont);
118} 118}
diff --git a/apps/plugins/lib/grey_scroll.c b/apps/plugins/lib/grey_scroll.c
index 082b256d72..adecd3bc43 100644
--- a/apps/plugins/lib/grey_scroll.c
+++ b/apps/plugins/lib/grey_scroll.c
@@ -47,9 +47,9 @@ void grey_scroll_left(int count)
47 47
48 do 48 do
49 { 49 {
50 _grey_info.rb->memmove(data, data + count, length); 50 rb->memmove(data, data + count, length);
51 data += length; 51 data += length;
52 _grey_info.rb->memset(data, blank, count); 52 rb->memset(data, blank, count);
53 data += count; 53 data += count;
54 } 54 }
55 while (data < data_end); 55 while (data < data_end);
@@ -72,8 +72,8 @@ void grey_scroll_right(int count)
72 72
73 do 73 do
74 { 74 {
75 _grey_info.rb->memmove(data + count, data, length); 75 rb->memmove(data + count, data, length);
76 _grey_info.rb->memset(data, blank, count); 76 rb->memset(data, blank, count);
77 data += _grey_info.width; 77 data += _grey_info.width;
78 } 78 }
79 while (data < data_end); 79 while (data < data_end);
@@ -93,9 +93,9 @@ void grey_scroll_up(int count)
93 blank = (_grey_info.drawmode & DRMODE_INVERSEVID) ? 93 blank = (_grey_info.drawmode & DRMODE_INVERSEVID) ?
94 _grey_info.fg_brightness : _grey_info.bg_brightness; 94 _grey_info.fg_brightness : _grey_info.bg_brightness;
95 95
96 _grey_info.rb->memmove(_grey_info.buffer, _grey_info.buffer + shift, 96 rb->memmove(_grey_info.buffer, _grey_info.buffer + shift,
97 length); 97 length);
98 _grey_info.rb->memset(_grey_info.buffer + length, blank, shift); 98 rb->memset(_grey_info.buffer + length, blank, shift);
99} 99}
100 100
101/* Scroll down */ 101/* Scroll down */
@@ -112,9 +112,9 @@ void grey_scroll_down(int count)
112 blank = (_grey_info.drawmode & DRMODE_INVERSEVID) ? 112 blank = (_grey_info.drawmode & DRMODE_INVERSEVID) ?
113 _grey_info.fg_brightness : _grey_info.bg_brightness; 113 _grey_info.fg_brightness : _grey_info.bg_brightness;
114 114
115 _grey_info.rb->memmove(_grey_info.buffer + shift, _grey_info.buffer, 115 rb->memmove(_grey_info.buffer + shift, _grey_info.buffer,
116 length); 116 length);
117 _grey_info.rb->memset(_grey_info.buffer, blank, shift); 117 rb->memset(_grey_info.buffer, blank, shift);
118} 118}
119 119
120/*** Unbuffered scrolling functions ***/ 120/*** Unbuffered scrolling functions ***/
@@ -137,14 +137,14 @@ void grey_ub_scroll_left(int count)
137 _grey_info.bg_brightness]; 137 _grey_info.bg_brightness];
138 do 138 do
139 { 139 {
140 _grey_info.rb->memmove(data, data + count, length); 140 rb->memmove(data, data + count, length);
141 data += length; 141 data += length;
142 _grey_info.rb->memset(data, blank, count); 142 rb->memset(data, blank, count);
143 data += count; 143 data += count;
144 } 144 }
145 while (data < data_end); 145 while (data < data_end);
146#ifdef SIMULATOR 146#ifdef SIMULATOR
147 _grey_info.rb->sim_lcd_ex_update_rect(_grey_info.x, _grey_info.y, 147 rb->sim_lcd_ex_update_rect(_grey_info.x, _grey_info.y,
148 _grey_info.width, _grey_info.height); 148 _grey_info.width, _grey_info.height);
149#endif 149#endif
150} 150}
@@ -167,13 +167,13 @@ void grey_ub_scroll_right(int count)
167 _grey_info.bg_brightness]; 167 _grey_info.bg_brightness];
168 do 168 do
169 { 169 {
170 _grey_info.rb->memmove(data + count, data, length); 170 rb->memmove(data + count, data, length);
171 _grey_info.rb->memset(data, blank, count); 171 rb->memset(data, blank, count);
172 data += _grey_info.width << _GREY_BSHIFT; 172 data += _grey_info.width << _GREY_BSHIFT;
173 } 173 }
174 while (data < data_end); 174 while (data < data_end);
175#ifdef SIMULATOR 175#ifdef SIMULATOR
176 _grey_info.rb->sim_lcd_ex_update_rect(_grey_info.x, _grey_info.y, 176 rb->sim_lcd_ex_update_rect(_grey_info.x, _grey_info.y,
177 _grey_info.width, _grey_info.height); 177 _grey_info.width, _grey_info.height);
178#endif 178#endif
179} 179}
@@ -240,12 +240,12 @@ void grey_ub_scroll_up(int count)
240 int blen = _GREY_MULUQ(_grey_info.height - count, _grey_info.width); 240 int blen = _GREY_MULUQ(_grey_info.height - count, _grey_info.width);
241 241
242 src = dst + _GREY_MULUQ(count, _grey_info.width); 242 src = dst + _GREY_MULUQ(count, _grey_info.width);
243 _grey_info.rb->memmove(dst, src, blen); 243 rb->memmove(dst, src, blen);
244 dst += blen; 244 dst += blen;
245 } 245 }
246 _grey_info.rb->memset(dst, blank, end - dst); /* Fill remainder at once. */ 246 rb->memset(dst, blank, end - dst); /* Fill remainder at once. */
247#ifdef SIMULATOR 247#ifdef SIMULATOR
248 _grey_info.rb->sim_lcd_ex_update_rect(_grey_info.x, _grey_info.y, 248 rb->sim_lcd_ex_update_rect(_grey_info.x, _grey_info.y,
249 _grey_info.width, _grey_info.height); 249 _grey_info.width, _grey_info.height);
250#endif 250#endif
251} 251}
@@ -316,12 +316,12 @@ void grey_ub_scroll_down(int count)
316 int blen = _GREY_MULUQ(_grey_info.height - count, _grey_info.width); 316 int blen = _GREY_MULUQ(_grey_info.height - count, _grey_info.width);
317 317
318 dst -= blen; 318 dst -= blen;
319 _grey_info.rb->memmove(dst, start, blen); 319 rb->memmove(dst, start, blen);
320 } 320 }
321 _grey_info.rb->memset(start, blank, dst - start); 321 rb->memset(start, blank, dst - start);
322 /* Fill remainder at once. */ 322 /* Fill remainder at once. */
323#ifdef SIMULATOR 323#ifdef SIMULATOR
324 _grey_info.rb->sim_lcd_ex_update_rect(_grey_info.x, _grey_info.y, 324 rb->sim_lcd_ex_update_rect(_grey_info.x, _grey_info.y,
325 _grey_info.width, _grey_info.height); 325 _grey_info.width, _grey_info.height);
326#endif 326#endif
327} 327}
diff --git a/apps/plugins/lib/helper.c b/apps/plugins/lib/helper.c
index 02ec7a5470..c70d8264a5 100644
--- a/apps/plugins/lib/helper.c
+++ b/apps/plugins/lib/helper.c
@@ -23,7 +23,7 @@
23#include "helper.h" 23#include "helper.h"
24 24
25/* Force the backlight on */ 25/* Force the backlight on */
26void backlight_force_on(const struct plugin_api* rb) 26void backlight_force_on(void)
27{ 27{
28 if(!rb) 28 if(!rb)
29 return; 29 return;
@@ -36,7 +36,7 @@ void backlight_force_on(const struct plugin_api* rb)
36} 36}
37 37
38/* Reset backlight operation to its settings */ 38/* Reset backlight operation to its settings */
39void backlight_use_settings(const struct plugin_api* rb) 39void backlight_use_settings(void)
40{ 40{
41 if (!rb) 41 if (!rb)
42 return; 42 return;
@@ -49,7 +49,7 @@ void backlight_use_settings(const struct plugin_api* rb)
49 49
50#ifdef HAVE_REMOTE_LCD 50#ifdef HAVE_REMOTE_LCD
51/* Force the backlight on */ 51/* Force the backlight on */
52void remote_backlight_force_on(const struct plugin_api* rb) 52void remote_backlight_force_on(void)
53{ 53{
54 if (!rb) 54 if (!rb)
55 return; 55 return;
@@ -62,7 +62,7 @@ void remote_backlight_force_on(const struct plugin_api* rb)
62} 62}
63 63
64/* Reset backlight operation to its settings */ 64/* Reset backlight operation to its settings */
65void remote_backlight_use_settings(const struct plugin_api* rb) 65void remote_backlight_use_settings(void)
66{ 66{
67 if (!rb) 67 if (!rb)
68 return; 68 return;
@@ -77,7 +77,7 @@ void remote_backlight_use_settings(const struct plugin_api* rb)
77 77
78#ifdef HAVE_BUTTON_LIGHT 78#ifdef HAVE_BUTTON_LIGHT
79/* Force the buttonlight on */ 79/* Force the buttonlight on */
80void buttonlight_force_on(const struct plugin_api* rb) 80void buttonlight_force_on(void)
81{ 81{
82 if (!rb) 82 if (!rb)
83 return; 83 return;
@@ -86,7 +86,7 @@ void buttonlight_force_on(const struct plugin_api* rb)
86} 86}
87 87
88/* Reset buttonlight operation to its settings */ 88/* Reset buttonlight operation to its settings */
89void buttonlight_use_settings(const struct plugin_api* rb) 89void buttonlight_use_settings(void)
90{ 90{
91 if (!rb) 91 if (!rb)
92 return; 92 return;
@@ -95,15 +95,14 @@ void buttonlight_use_settings(const struct plugin_api* rb)
95#endif /* HAVE_BUTTON_LIGHT */ 95#endif /* HAVE_BUTTON_LIGHT */
96 96
97#ifdef HAVE_BACKLIGHT_BRIGHTNESS 97#ifdef HAVE_BACKLIGHT_BRIGHTNESS
98void backlight_brightness_set(const struct plugin_api *rb, 98void backlight_brightness_set(int brightness)
99 int brightness)
100{ 99{
101 if (!rb) 100 if (!rb)
102 return; 101 return;
103 rb->backlight_set_brightness(brightness); 102 rb->backlight_set_brightness(brightness);
104} 103}
105 104
106void backlight_brightness_use_setting(const struct plugin_api *rb) 105void backlight_brightness_use_setting(void)
107{ 106{
108 if (!rb) 107 if (!rb)
109 return; 108 return;
diff --git a/apps/plugins/lib/helper.h b/apps/plugins/lib/helper.h
index aa309bbb69..92c1c2f934 100644
--- a/apps/plugins/lib/helper.h
+++ b/apps/plugins/lib/helper.h
@@ -26,24 +26,23 @@
26/** 26/**
27 * Backlight on/off operations 27 * Backlight on/off operations
28 */ 28 */
29void backlight_force_on(const struct plugin_api* rb); 29void backlight_force_on(void);
30void backlight_use_settings(const struct plugin_api* rb); 30void backlight_use_settings(void);
31#ifdef HAVE_REMOTE_LCD 31#ifdef HAVE_REMOTE_LCD
32void remote_backlight_force_on(const struct plugin_api* rb); 32void remote_backlight_force_on(void);
33void remote_backlight_use_settings(const struct plugin_api* rb); 33void remote_backlight_use_settings(void);
34#endif 34#endif
35#ifdef HAVE_BUTTON_LIGHT 35#ifdef HAVE_BUTTON_LIGHT
36void buttonlight_force_on(const struct plugin_api* rb); 36void buttonlight_force_on(void);
37void buttonlight_use_settings(const struct plugin_api* rb); 37void buttonlight_use_settings(void);
38#endif 38#endif
39 39
40/** 40/**
41 * Backlight brightness adjustment settings 41 * Backlight brightness adjustment settings
42 */ 42 */
43#ifdef HAVE_BACKLIGHT_BRIGHTNESS 43#ifdef HAVE_BACKLIGHT_BRIGHTNESS
44void backlight_brightness_set(const struct plugin_api *rb, 44void backlight_brightness_set(int brightness);
45 int brightness); 45void backlight_brightness_use_setting(void);
46void backlight_brightness_use_setting(const struct plugin_api *rb);
47#endif 46#endif
48 47
49 48
diff --git a/apps/plugins/lib/highscore.c b/apps/plugins/lib/highscore.c
index f475651eab..9d3b19ea48 100644
--- a/apps/plugins/lib/highscore.c
+++ b/apps/plugins/lib/highscore.c
@@ -21,13 +21,6 @@
21#include "plugin.h" 21#include "plugin.h"
22#include "highscore.h" 22#include "highscore.h"
23 23
24static const struct plugin_api *rb;
25
26void highscore_init(const struct plugin_api* newrb)
27{
28 rb = newrb;
29}
30
31int highscore_save(char *filename, struct highscore *scores, int num_scores) 24int highscore_save(char *filename, struct highscore *scores, int num_scores)
32{ 25{
33 int i; 26 int i;
diff --git a/apps/plugins/lib/highscore.h b/apps/plugins/lib/highscore.h
index c3d806e746..db09172c7d 100644
--- a/apps/plugins/lib/highscore.h
+++ b/apps/plugins/lib/highscore.h
@@ -28,7 +28,6 @@ struct highscore
28 int level; 28 int level;
29}; 29};
30 30
31void highscore_init(const struct plugin_api* newrb);
32int highscore_save(char *filename, struct highscore *scores, int num_scores); 31int highscore_save(char *filename, struct highscore *scores, int num_scores);
33int highscore_load(char *filename, struct highscore *scores, int num_scores); 32int highscore_load(char *filename, struct highscore *scores, int num_scores);
34int highscore_update(int score, int level, struct highscore *scores, int num_scores); 33int highscore_update(int score, int level, struct highscore *scores, int num_scores);
diff --git a/apps/plugins/lib/md5.c b/apps/plugins/lib/md5.c
index 05535de12c..145a62da53 100644
--- a/apps/plugins/lib/md5.c
+++ b/apps/plugins/lib/md5.c
@@ -27,13 +27,6 @@
27#include "plugin.h" 27#include "plugin.h"
28#include "md5.h" 28#include "md5.h"
29 29
30static const struct plugin_api *rb;
31
32void md5_init( const struct plugin_api *api )
33{
34 rb = api;
35}
36
37#ifdef ROCKBOX_BIG_ENDIAN 30#ifdef ROCKBOX_BIG_ENDIAN
38static inline uint32_t GetDWLE( const void * _p ) 31static inline uint32_t GetDWLE( const void * _p )
39{ 32{
diff --git a/apps/plugins/lib/md5.h b/apps/plugins/lib/md5.h
index e19c749664..f70d47a788 100644
--- a/apps/plugins/lib/md5.h
+++ b/apps/plugins/lib/md5.h
@@ -27,8 +27,6 @@
27#ifndef _VLC_MD5_H 27#ifndef _VLC_MD5_H
28# define _VLC_MD5_H 28# define _VLC_MD5_H
29 29
30void md5_init( const struct plugin_api * );
31
32/***************************************************************************** 30/*****************************************************************************
33 * md5_s: MD5 message structure 31 * md5_s: MD5 message structure
34 ***************************************************************************** 32 *****************************************************************************
diff --git a/apps/plugins/lib/oldmenuapi.c b/apps/plugins/lib/oldmenuapi.c
index a48a61bca6..9c371d531e 100644
--- a/apps/plugins/lib/oldmenuapi.c
+++ b/apps/plugins/lib/oldmenuapi.c
@@ -29,8 +29,6 @@
29#include "plugin.h" 29#include "plugin.h"
30#include "oldmenuapi.h" 30#include "oldmenuapi.h"
31 31
32const struct plugin_api *rb = NULL;
33
34struct menu { 32struct menu {
35 struct menu_item* items; 33 struct menu_item* items;
36 int (*callback)(int, int); 34 int (*callback)(int, int);
@@ -67,12 +65,11 @@ static int menu_find_free(void)
67 return(i); 65 return(i);
68} 66}
69 67
70int menu_init(const struct plugin_api *api, const struct menu_item* mitems, 68int menu_init(const struct menu_item* mitems,
71 int count, int (*callback)(int, int), 69 int count, int (*callback)(int, int),
72 const char *button1, const char *button2, const char *button3) 70 const char *button1, const char *button2, const char *button3)
73{ 71{
74 int menu=menu_find_free(); 72 int menu=menu_find_free();
75 rb = api;
76 if(menu==-1)/* Out of menus */ 73 if(menu==-1)/* Out of menus */
77 return -1; 74 return -1;
78 menus[menu].items = (struct menu_item*)mitems; /* de-const */ 75 menus[menu].items = (struct menu_item*)mitems; /* de-const */
diff --git a/apps/plugins/lib/oldmenuapi.h b/apps/plugins/lib/oldmenuapi.h
index 858580ce21..7f877997cf 100644
--- a/apps/plugins/lib/oldmenuapi.h
+++ b/apps/plugins/lib/oldmenuapi.h
@@ -33,7 +33,7 @@ struct menu_item {
33 bool (*function) (void); /* return true if USB was connected */ 33 bool (*function) (void); /* return true if USB was connected */
34}; 34};
35 35
36int menu_init(const struct plugin_api *api, const struct menu_item* mitems, 36int menu_init(const struct menu_item* mitems,
37 int count, int (*callback)(int, int), 37 int count, int (*callback)(int, int),
38 const char *button1, const char *button2, const char *button3); 38 const char *button1, const char *button2, const char *button3);
39void menu_exit(int menu); 39void menu_exit(int menu);
diff --git a/apps/plugins/lib/overlay.c b/apps/plugins/lib/overlay.c
index 706d6c14a7..44bca1d989 100644
--- a/apps/plugins/lib/overlay.c
+++ b/apps/plugins/lib/overlay.c
@@ -46,7 +46,7 @@
46 The linker script for the overlay should use a base address towards the 46 The linker script for the overlay should use a base address towards the
47 end of the audiobuffer, just low enough to make the overlay fit. */ 47 end of the audiobuffer, just low enough to make the overlay fit. */
48 48
49enum plugin_status run_overlay(const struct plugin_api* rb, const void* parameter, 49enum plugin_status run_overlay(const void* parameter,
50 unsigned char *filename, unsigned char *name) 50 unsigned char *filename, unsigned char *name)
51{ 51{
52 int fd, readsize; 52 int fd, readsize;
@@ -107,6 +107,7 @@ enum plugin_status run_overlay(const struct plugin_api* rb, const void* paramete
107 rb->memset(header.load_addr + readsize, 0, 107 rb->memset(header.load_addr + readsize, 0,
108 header.end_addr - (header.load_addr + readsize)); 108 header.end_addr - (header.load_addr + readsize));
109 109
110 return header.entry_point(rb, parameter); 110 *(header.api) = rb;
111 return header.entry_point(parameter);
111} 112}
112#endif 113#endif
diff --git a/apps/plugins/lib/overlay.h b/apps/plugins/lib/overlay.h
index 97c6ccf28b..357dc93e39 100644
--- a/apps/plugins/lib/overlay.h
+++ b/apps/plugins/lib/overlay.h
@@ -28,7 +28,7 @@
28#include "plugin.h" 28#include "plugin.h"
29 29
30/* load and run a plugin linked as an overlay. */ 30/* load and run a plugin linked as an overlay. */
31enum plugin_status run_overlay(const struct plugin_api* api, const void* parameter, 31enum plugin_status run_overlay(const void* parameter,
32 unsigned char *filename, unsigned char *name); 32 unsigned char *filename, unsigned char *name);
33 33
34#endif /* !SIMULATOR */ 34#endif /* !SIMULATOR */
diff --git a/apps/plugins/lib/playback_control.c b/apps/plugins/lib/playback_control.c
index b82e8bea16..7c28230642 100644
--- a/apps/plugins/lib/playback_control.c
+++ b/apps/plugins/lib/playback_control.c
@@ -22,70 +22,69 @@
22#include "plugin.h" 22#include "plugin.h"
23#include "playback_control.h" 23#include "playback_control.h"
24 24
25const struct plugin_api* api = 0;
26struct viewport *parentvp = NULL; 25struct viewport *parentvp = NULL;
27 26
28static bool prevtrack(void) 27static bool prevtrack(void)
29{ 28{
30 api->audio_prev(); 29 rb->audio_prev();
31 return false; 30 return false;
32} 31}
33 32
34static bool play(void) 33static bool play(void)
35{ 34{
36 int audio_status = api->audio_status(); 35 int audio_status = rb->audio_status();
37 if (!audio_status && api->global_status->resume_index != -1) 36 if (!audio_status && rb->global_status->resume_index != -1)
38 { 37 {
39 if (api->playlist_resume() != -1) 38 if (rb->playlist_resume() != -1)
40 { 39 {
41 api->playlist_start(api->global_status->resume_index, 40 rb->playlist_start(rb->global_status->resume_index,
42 api->global_status->resume_offset); 41 rb->global_status->resume_offset);
43 } 42 }
44 } 43 }
45 else if (audio_status & AUDIO_STATUS_PAUSE) 44 else if (audio_status & AUDIO_STATUS_PAUSE)
46 api->audio_resume(); 45 rb->audio_resume();
47 else 46 else
48 api->audio_pause(); 47 rb->audio_pause();
49 return false; 48 return false;
50} 49}
51 50
52static bool stop(void) 51static bool stop(void)
53{ 52{
54 api->audio_stop(); 53 rb->audio_stop();
55 return false; 54 return false;
56} 55}
57 56
58static bool nexttrack(void) 57static bool nexttrack(void)
59{ 58{
60 api->audio_next(); 59 rb->audio_next();
61 return false; 60 return false;
62} 61}
63 62
64static bool volume(void) 63static bool volume(void)
65{ 64{
66 const struct settings_list* vol = 65 const struct settings_list* vol =
67 api->find_setting(&api->global_settings->volume, NULL); 66 rb->find_setting(&rb->global_settings->volume, NULL);
68 return api->option_screen((struct settings_list*)vol, parentvp, false, "Volume"); 67 return rb->option_screen((struct settings_list*)vol, parentvp, false, "Volume");
69} 68}
70 69
71static bool shuffle(void) 70static bool shuffle(void)
72{ 71{
73 const struct settings_list* shuffle = 72 const struct settings_list* shuffle =
74 api->find_setting(&api->global_settings->playlist_shuffle, NULL); 73 rb->find_setting(&rb->global_settings->playlist_shuffle, NULL);
75 return api->option_screen((struct settings_list*)shuffle, parentvp, false, "Shuffle"); 74 return rb->option_screen((struct settings_list*)shuffle, parentvp, false, "Shuffle");
76} 75}
77 76
78static bool repeat_mode(void) 77static bool repeat_mode(void)
79{ 78{
80 const struct settings_list* repeat = 79 const struct settings_list* repeat =
81 api->find_setting(&api->global_settings->repeat_mode, NULL); 80 rb->find_setting(&rb->global_settings->repeat_mode, NULL);
82 int old_repeat = api->global_settings->repeat_mode; 81 int old_repeat = rb->global_settings->repeat_mode;
83 82
84 api->option_screen((struct settings_list*)repeat, parentvp, false, "Repeat"); 83 rb->option_screen((struct settings_list*)repeat, parentvp, false, "Repeat");
85 84
86 if (old_repeat != api->global_settings->repeat_mode && 85 if (old_repeat != rb->global_settings->repeat_mode &&
87 (api->audio_status() & AUDIO_STATUS_PLAY)) 86 (rb->audio_status() & AUDIO_STATUS_PLAY))
88 api->audio_flush_and_reload_tracks(); 87 rb->audio_flush_and_reload_tracks();
89 88
90 return false; 89 return false;
91} 90}
@@ -107,17 +106,13 @@ MAKE_MENU(playback_control_menu, "Playback Control", NULL, Icon_NOICON,
107 &prevtrack_item, &playpause_item, &stop_item, &nexttrack_item, 106 &prevtrack_item, &playpause_item, &stop_item, &nexttrack_item,
108 &volume_item, &shuffle_item, &repeat_mode_item); 107 &volume_item, &shuffle_item, &repeat_mode_item);
109 108
110void playback_control_init(const struct plugin_api* newapi, 109void playback_control_init(struct viewport parent[NB_SCREENS])
111 struct viewport parent[NB_SCREENS])
112{ 110{
113 api = newapi;
114 parentvp = parent; 111 parentvp = parent;
115} 112}
116 113
117bool playback_control(const struct plugin_api* newapi, 114bool playback_control(struct viewport parent[NB_SCREENS])
118 struct viewport parent[NB_SCREENS])
119{ 115{
120 api = newapi;
121 parentvp = parent; 116 parentvp = parent;
122 return api->do_menu(&playback_control_menu, NULL, parent, false) == MENU_ATTACHED_USB; 117 return rb->do_menu(&playback_control_menu, NULL, parent, false) == MENU_ATTACHED_USB;
123} 118}
diff --git a/apps/plugins/lib/playback_control.h b/apps/plugins/lib/playback_control.h
index b8fa840d28..43719615ad 100644
--- a/apps/plugins/lib/playback_control.h
+++ b/apps/plugins/lib/playback_control.h
@@ -27,11 +27,9 @@
27 So, make sure you use the same viewport for the rb->do_menu() call 27 So, make sure you use the same viewport for the rb->do_menu() call
28 that you use in the playback_control_init() call 28 that you use in the playback_control_init() call
29*/ 29*/
30void playback_control_init(const struct plugin_api* newapi, 30void playback_control_init(struct viewport parent[NB_SCREENS]);
31 struct viewport parent[NB_SCREENS]);
32 31
33/* Use this if your menu still uses the old menu api */ 32/* Use this if your menu still uses the old menu api */
34bool playback_control(const struct plugin_api* api, 33bool playback_control(struct viewport parent[NB_SCREENS]);
35 struct viewport parent[NB_SCREENS]);
36 34
37#endif /* __PLAYBACK_CONTROL_H__ */ 35#endif /* __PLAYBACK_CONTROL_H__ */
diff --git a/apps/plugins/lib/playergfx.c b/apps/plugins/lib/playergfx.c
index c332c02711..d07043c572 100644
--- a/apps/plugins/lib/playergfx.c
+++ b/apps/plugins/lib/playergfx.c
@@ -28,7 +28,6 @@
28 28
29/*** globals ***/ 29/*** globals ***/
30 30
31static const struct plugin_api *pgfx_rb = NULL; /* global api struct pointer */
32static int char_width; 31static int char_width;
33static int char_height; 32static int char_height;
34static int pixel_height; 33static int pixel_height;
@@ -40,14 +39,13 @@ static int drawmode = DRMODE_SOLID;
40/*** Special functions ***/ 39/*** Special functions ***/
41 40
42/* library init */ 41/* library init */
43bool pgfx_init(const struct plugin_api* newrb, int cwidth, int cheight) 42bool pgfx_init(int cwidth, int cheight)
44{ 43{
45 int i; 44 int i;
46 45
47 if (((unsigned) cwidth * (unsigned) cheight) > 8 || (unsigned) cheight > 2) 46 if (((unsigned) cwidth * (unsigned) cheight) > 8 || (unsigned) cheight > 2)
48 return false; 47 return false;
49 48
50 pgfx_rb = newrb;
51 char_width = cwidth; 49 char_width = cwidth;
52 char_height = cheight; 50 char_height = cheight;
53 pixel_height = 7 * char_height; 51 pixel_height = 7 * char_height;
@@ -55,7 +53,7 @@ bool pgfx_init(const struct plugin_api* newrb, int cwidth, int cheight)
55 53
56 for (i = 0; i < cwidth * cheight; i++) 54 for (i = 0; i < cwidth * cheight; i++)
57 { 55 {
58 if ((gfx_chars[i] = pgfx_rb->lcd_get_locked_pattern()) == 0) 56 if ((gfx_chars[i] = rb->lcd_get_locked_pattern()) == 0)
59 { 57 {
60 pgfx_release(); 58 pgfx_release();
61 return false; 59 return false;
@@ -72,7 +70,7 @@ void pgfx_release(void)
72 70
73 for (i = 0; i < 8; i++) 71 for (i = 0; i < 8; i++)
74 if (gfx_chars[i]) 72 if (gfx_chars[i])
75 pgfx_rb->lcd_unlock_pattern(gfx_chars[i]); 73 rb->lcd_unlock_pattern(gfx_chars[i]);
76} 74}
77 75
78/* place the display */ 76/* place the display */
@@ -84,12 +82,12 @@ void pgfx_display(int cx, int cy)
84 82
85 for (i = 0; i < width; i++) 83 for (i = 0; i < width; i++)
86 for (j = 0; j < height; j++) 84 for (j = 0; j < height; j++)
87 pgfx_rb->lcd_putc(cx + i, cy + j, gfx_chars[char_height * i + j]); 85 rb->lcd_putc(cx + i, cy + j, gfx_chars[char_height * i + j]);
88} 86}
89 87
90void pgfx_display_block(int cx, int cy, int x, int y) 88void pgfx_display_block(int cx, int cy, int x, int y)
91{ 89{
92 pgfx_rb->lcd_putc(cx, cy, gfx_chars[char_height * x + y]); 90 rb->lcd_putc(cx, cy, gfx_chars[char_height * x + y]);
93} 91}
94 92
95 93
@@ -100,9 +98,9 @@ void pgfx_update(void)
100 int i; 98 int i;
101 99
102 for (i = 0; i < char_width * char_height; i++) 100 for (i = 0; i < char_width * char_height; i++)
103 pgfx_rb->lcd_define_pattern(gfx_chars[i], gfx_buffer + 7 * i); 101 rb->lcd_define_pattern(gfx_chars[i], gfx_buffer + 7 * i);
104 102
105 pgfx_rb->lcd_update(); 103 rb->lcd_update();
106} 104}
107 105
108/*** Parameter handling ***/ 106/*** Parameter handling ***/
@@ -203,7 +201,7 @@ void pgfx_clear_display(void)
203{ 201{
204 unsigned bits = (drawmode & DRMODE_INVERSEVID) ? 0x1F : 0; 202 unsigned bits = (drawmode & DRMODE_INVERSEVID) ? 0x1F : 0;
205 203
206 pgfx_rb->memset(gfx_buffer, bits, char_width * pixel_height); 204 rb->memset(gfx_buffer, bits, char_width * pixel_height);
207} 205}
208 206
209/* Set a single pixel */ 207/* Set a single pixel */
diff --git a/apps/plugins/lib/playergfx.h b/apps/plugins/lib/playergfx.h
index ff9cd5fa7d..9f1305af12 100644
--- a/apps/plugins/lib/playergfx.h
+++ b/apps/plugins/lib/playergfx.h
@@ -28,7 +28,7 @@
28 28
29#ifdef HAVE_LCD_CHARCELLS /* Player only :) */ 29#ifdef HAVE_LCD_CHARCELLS /* Player only :) */
30 30
31bool pgfx_init(const struct plugin_api* newrb, int cwidth, int cheight); 31bool pgfx_init(int cwidth, int cheight);
32void pgfx_release(void); 32void pgfx_release(void);
33void pgfx_display(int cx, int cy); 33void pgfx_display(int cx, int cy);
34void pgfx_display_block(int cx, int cy, int x, int y); 34void pgfx_display_block(int cx, int cy, int x, int y);
diff --git a/apps/plugins/lib/pluginlib_actions.c b/apps/plugins/lib/pluginlib_actions.c
index 2ec6cf6cf2..8e2f1253c0 100644
--- a/apps/plugins/lib/pluginlib_actions.c
+++ b/apps/plugins/lib/pluginlib_actions.c
@@ -524,12 +524,12 @@ static const struct button_mapping* get_context_map(int context)
524 else return NULL; 524 else return NULL;
525} 525}
526 526
527int pluginlib_getaction(const struct plugin_api *api,int timeout, 527int pluginlib_getaction(int timeout,
528 const struct button_mapping *plugin_contexts[], 528 const struct button_mapping *plugin_contexts[],
529 int count) 529 int count)
530{ 530{
531 plugin_context_order = (struct button_mapping **)plugin_contexts; 531 plugin_context_order = (struct button_mapping **)plugin_contexts;
532 plugin_context_count = count; 532 plugin_context_count = count;
533 last_context = 0; 533 last_context = 0;
534 return api->get_custom_action(CONTEXT_CUSTOM,timeout,get_context_map); 534 return rb->get_custom_action(CONTEXT_CUSTOM,timeout,get_context_map);
535} 535}
diff --git a/apps/plugins/lib/pluginlib_actions.h b/apps/plugins/lib/pluginlib_actions.h
index 5f06a0b476..cc5f8b4eb8 100644
--- a/apps/plugins/lib/pluginlib_actions.h
+++ b/apps/plugins/lib/pluginlib_actions.h
@@ -60,7 +60,7 @@ extern const struct button_mapping generic_left_right_fire[];
60extern const struct button_mapping generic_actions[]; 60extern const struct button_mapping generic_actions[];
61extern const struct button_mapping generic_increase_decrease[]; 61extern const struct button_mapping generic_increase_decrease[];
62 62
63int pluginlib_getaction(const struct plugin_api *api,int timeout, 63int pluginlib_getaction(int timeout,
64 const struct button_mapping *plugin_contexts[], 64 const struct button_mapping *plugin_contexts[],
65 int count); 65 int count);
66 66
diff --git a/apps/plugins/lib/pluginlib_bmp.c b/apps/plugins/lib/pluginlib_bmp.c
index b1dd53b15e..b9cfc4ded3 100644
--- a/apps/plugins/lib/pluginlib_bmp.c
+++ b/apps/plugins/lib/pluginlib_bmp.c
@@ -34,7 +34,7 @@
34/** 34/**
35 * Save to 24 bit bitmap. 35 * Save to 24 bit bitmap.
36 */ 36 */
37int save_bmp_file( char* filename, struct bitmap *bm, const struct plugin_api* rb ) 37int save_bmp_file( char* filename, struct bitmap *bm )
38{ 38{
39 /* I'm not really sure about this one :) */ 39 /* I'm not really sure about this one :) */
40 int line_width = bm->width*3+((bm->width*3)%4?4-((bm->width*3)%4):0); 40 int line_width = bm->width*3+((bm->width*3)%4?4-((bm->width*3)%4):0);
@@ -125,14 +125,7 @@ void simple_resize_bitmap(struct bitmap *src, struct bitmap *dst)
125#else /* LCD_DEPTH == 1 */ 125#else /* LCD_DEPTH == 1 */
126#include "wrappers.h" 126#include "wrappers.h"
127 127
128static const struct plugin_api *rb;
129
130/* import the core bmp loader */ 128/* import the core bmp loader */
131#include "../../recorder/bmp.c" 129#include "../../recorder/bmp.c"
132 130
133/* initialize rb for use by the bmp loader */
134void bmp_init(const struct plugin_api *api)
135{
136 rb = api;
137}
138#endif 131#endif
diff --git a/apps/plugins/lib/pluginlib_bmp.h b/apps/plugins/lib/pluginlib_bmp.h
index 0e7a0a4933..17844a8e38 100644
--- a/apps/plugins/lib/pluginlib_bmp.h
+++ b/apps/plugins/lib/pluginlib_bmp.h
@@ -24,12 +24,11 @@
24#include "lcd.h" 24#include "lcd.h"
25#include "plugin.h" 25#include "plugin.h"
26 26
27#if LCD_DEPTH > 1 /* save is only available for color, resize for >1bpp */
28#ifdef HAVE_LCD_COLOR 27#ifdef HAVE_LCD_COLOR
29/** 28/**
30 * Save bitmap to file 29 * Save bitmap to file
31 */ 30 */
32int save_bmp_file( char* filename, struct bitmap *bm, const struct plugin_api* rb ); 31int save_bmp_file( char* filename, struct bitmap *bm );
33#endif 32#endif
34 33
35/** 34/**
@@ -44,13 +43,4 @@ void simple_resize_bitmap(struct bitmap *src, struct bitmap *dst);
44 */ 43 */
45void smooth_resize_bitmap(struct bitmap *src, struct bitmap *dst); 44void smooth_resize_bitmap(struct bitmap *src, struct bitmap *dst);
46 45
47#else
48/*
49 BMP loader is built with scaling support in pluginlib on 1bpp targets, as
50 these do not provide scaling support in the core BMP loader. bmp_init is
51 needed to copy the plugin API pointer for the pluginlib loader's use.
52*/
53void bmp_init(const struct plugin_api *api);
54#endif
55
56#endif 46#endif
diff --git a/apps/plugins/lib/pluginlib_resize.h b/apps/plugins/lib/pluginlib_resize.h
deleted file mode 100644
index 46a8977675..0000000000
--- a/apps/plugins/lib/pluginlib_resize.h
+++ /dev/null
@@ -1,29 +0,0 @@
1/***************************************************************************
2* __________ __ ___.
3* Open \______ \ ____ ____ | | _\_ |__ _______ ___
4* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7* \/ \/ \/ \/ \/
8* $Id$
9*
10* Copyright (C) 2009 by Andrew Mahone
11*
12* This is a header for the pluginlib extensions to the core resize.c file
13*
14* This program is free software; you can redistribute it and/or
15* modify it under the terms of the GNU General Public License
16* as published by the Free Software Foundation; either version 2
17* of the License, or (at your option) any later version.
18*
19* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
20* KIND, either express or implied.
21*
22****************************************************************************/
23
24#ifndef _LIB_RESIZE_H_
25#define _LIB_RESIZE_H_
26
27void resize_init(const struct plugin_api *api);
28
29#endif
diff --git a/apps/plugins/lib/profile_plugin.c b/apps/plugins/lib/profile_plugin.c
index 1225bf1006..9224997423 100644
--- a/apps/plugins/lib/profile_plugin.c
+++ b/apps/plugins/lib/profile_plugin.c
@@ -23,22 +23,15 @@
23 23
24#include "plugin.h" 24#include "plugin.h"
25 25
26static const struct plugin_api *local_rb = NULL; /* global api struct pointer */
27
28void profile_init(const struct plugin_api* pa)
29{
30 local_rb = pa;
31}
32
33void __cyg_profile_func_enter(void *this_fn, void *call_site) { 26void __cyg_profile_func_enter(void *this_fn, void *call_site) {
34#ifdef CPU_COLDFIRE 27#ifdef CPU_COLDFIRE
35 (void)call_site; 28 (void)call_site;
36 local_rb->profile_func_enter(this_fn, __builtin_return_address(1)); 29 rb->profile_func_enter(this_fn, __builtin_return_address(1));
37#else 30#else
38 local_rb->profile_func_enter(this_fn, call_site); 31 rb->profile_func_enter(this_fn, call_site);
39#endif 32#endif
40} 33}
41 34
42void __cyg_profile_func_exit(void *this_fn, void *call_site) { 35void __cyg_profile_func_exit(void *this_fn, void *call_site) {
43 local_rb->profile_func_exit(this_fn,call_site); 36 rb->profile_func_exit(this_fn,call_site);
44} 37}
diff --git a/apps/plugins/lib/profile_plugin.h b/apps/plugins/lib/profile_plugin.h
index fae2a87382..ce0581a7cb 100644
--- a/apps/plugins/lib/profile_plugin.h
+++ b/apps/plugins/lib/profile_plugin.h
@@ -26,8 +26,6 @@
26 26
27#include "plugin.h" 27#include "plugin.h"
28 28
29void profile_init(const struct plugin_api* pa);
30
31void __cyg_profile_func_enter(void *this_fn, void *call_site) 29void __cyg_profile_func_enter(void *this_fn, void *call_site)
32 NO_PROF_ATTR ICODE_ATTR; 30 NO_PROF_ATTR ICODE_ATTR;
33void __cyg_profile_func_exit(void *this_fn, void *call_site) 31void __cyg_profile_func_exit(void *this_fn, void *call_site)
diff --git a/apps/plugins/lib/xlcd.h b/apps/plugins/lib/xlcd.h
index da27af19a3..b6d0867e01 100644
--- a/apps/plugins/lib/xlcd.h
+++ b/apps/plugins/lib/xlcd.h
@@ -28,7 +28,6 @@
28 28
29#ifdef HAVE_LCD_BITMAP 29#ifdef HAVE_LCD_BITMAP
30 30
31void xlcd_init(const struct plugin_api* newrb);
32void xlcd_filltriangle(int x1, int y1, int x2, int y2, int x3, int y3); 31void xlcd_filltriangle(int x1, int y1, int x2, int y2, int x3, int y3);
33void xlcd_filltriangle_screen(struct screen* display, 32void xlcd_filltriangle_screen(struct screen* display,
34 int x1, int y1, int x2, int y2, int x3, int y3); 33 int x1, int y1, int x2, int y2, int x3, int y3);
@@ -50,9 +49,6 @@ void xlcd_scroll_right(int count);
50void xlcd_scroll_up(int count); 49void xlcd_scroll_up(int count);
51void xlcd_scroll_down(int count); 50void xlcd_scroll_down(int count);
52 51
53/* internal stuff */
54extern const struct plugin_api *_xlcd_rb; /* global api struct pointer */
55
56#endif /* HAVE_LCD_BITMAP */ 52#endif /* HAVE_LCD_BITMAP */
57#endif /* __XLCD_H__ */ 53#endif /* __XLCD_H__ */
58 54
diff --git a/apps/plugins/lib/xlcd_core.c b/apps/plugins/lib/xlcd_core.c
index a035a80e7b..87e73b5485 100644
--- a/apps/plugins/lib/xlcd_core.c
+++ b/apps/plugins/lib/xlcd_core.c
@@ -27,17 +27,5 @@
27#ifdef HAVE_LCD_BITMAP 27#ifdef HAVE_LCD_BITMAP
28#include "xlcd.h" 28#include "xlcd.h"
29 29
30/*** globals ***/
31
32const struct plugin_api *_xlcd_rb = NULL; /* global api struct pointer */
33
34/*** functions ***/
35
36/* library init */
37void xlcd_init(const struct plugin_api* newrb)
38{
39 _xlcd_rb = newrb;
40}
41
42#endif /* HAVE_LCD_BITMAP */ 30#endif /* HAVE_LCD_BITMAP */
43 31
diff --git a/apps/plugins/lib/xlcd_draw.c b/apps/plugins/lib/xlcd_draw.c
index 01fbc5ef5c..3be15718f6 100644
--- a/apps/plugins/lib/xlcd_draw.c
+++ b/apps/plugins/lib/xlcd_draw.c
@@ -155,7 +155,7 @@ void xlcd_filltriangle(int x1, int y1,
155 int x3, int y3) 155 int x3, int y3)
156{ 156{
157 /* default is main screen */ 157 /* default is main screen */
158 xlcd_filltriangle_screen(_xlcd_rb->screens[SCREEN_MAIN], 158 xlcd_filltriangle_screen(rb->screens[SCREEN_MAIN],
159 x1, y1, x2, y2, x3, y3); 159 x1, y1, x2, y2, x3, y3);
160} 160}
161 161
@@ -276,7 +276,7 @@ void xlcd_gray_bitmap_part(const unsigned char *src, int src_x, int src_y,
276 276
277 src += stride * src_y + src_x; /* move starting point */ 277 src += stride * src_y + src_x; /* move starting point */
278 src_end = src + stride * height; 278 src_end = src + stride * height;
279 dst = _xlcd_rb->lcd_framebuffer + LCD_WIDTH * y + x; 279 dst = rb->lcd_framebuffer + LCD_WIDTH * y + x;
280 280
281 do 281 do
282 { 282 {
@@ -336,7 +336,7 @@ void xlcd_color_bitmap_part(const unsigned char *src, int src_x, int src_y,
336 336
337 src += 3 * (stride * src_y + src_x); /* move starting point */ 337 src += 3 * (stride * src_y + src_x); /* move starting point */
338 src_end = src + 3 * stride * height; 338 src_end = src + 3 * stride * height;
339 dst = _xlcd_rb->lcd_framebuffer + LCD_WIDTH * y + x; 339 dst = rb->lcd_framebuffer + LCD_WIDTH * y + x;
340 340
341 do 341 do
342 { 342 {
diff --git a/apps/plugins/lib/xlcd_scroll.c b/apps/plugins/lib/xlcd_scroll.c
index f25e702518..6b70e2cfd2 100644
--- a/apps/plugins/lib/xlcd_scroll.c
+++ b/apps/plugins/lib/xlcd_scroll.c
@@ -50,12 +50,12 @@ void xlcd_scroll_left(int count)
50 50
51 if (blockcount) 51 if (blockcount)
52 { 52 {
53 unsigned char *data = _xlcd_rb->lcd_framebuffer; 53 unsigned char *data = rb->lcd_framebuffer;
54 unsigned char *data_end = data + LCD_FBWIDTH*LCD_HEIGHT; 54 unsigned char *data_end = data + LCD_FBWIDTH*LCD_HEIGHT;
55 55
56 do 56 do
57 { 57 {
58 _xlcd_rb->memmove(data, data + blockcount, blocklen); 58 rb->memmove(data, data + blockcount, blocklen);
59 data += LCD_FBWIDTH; 59 data += LCD_FBWIDTH;
60 } 60 }
61 while (data < data_end); 61 while (data < data_end);
@@ -63,9 +63,9 @@ void xlcd_scroll_left(int count)
63 if (bitcount) 63 if (bitcount)
64 { 64 {
65 int bx, y; 65 int bx, y;
66 unsigned char *addr = _xlcd_rb->lcd_framebuffer + blocklen; 66 unsigned char *addr = rb->lcd_framebuffer + blocklen;
67#if LCD_DEPTH == 2 67#if LCD_DEPTH == 2
68 unsigned fill = 0x55 * (~_xlcd_rb->lcd_get_background() & 3); 68 unsigned fill = 0x55 * (~rb->lcd_get_background() & 3);
69#endif 69#endif
70 70
71 for (y = 0; y < LCD_HEIGHT; y++) 71 for (y = 0; y < LCD_HEIGHT; y++)
@@ -82,10 +82,10 @@ void xlcd_scroll_left(int count)
82 addr += LCD_FBWIDTH; 82 addr += LCD_FBWIDTH;
83 } 83 }
84 } 84 }
85 oldmode = _xlcd_rb->lcd_get_drawmode(); 85 oldmode = rb->lcd_get_drawmode();
86 _xlcd_rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID); 86 rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID);
87 _xlcd_rb->lcd_fillrect(LCD_WIDTH - count, 0, count, LCD_HEIGHT); 87 rb->lcd_fillrect(LCD_WIDTH - count, 0, count, LCD_HEIGHT);
88 _xlcd_rb->lcd_set_drawmode(oldmode); 88 rb->lcd_set_drawmode(oldmode);
89} 89}
90 90
91/* Scroll right */ 91/* Scroll right */
@@ -105,12 +105,12 @@ void xlcd_scroll_right(int count)
105 105
106 if (blockcount) 106 if (blockcount)
107 { 107 {
108 unsigned char *data = _xlcd_rb->lcd_framebuffer; 108 unsigned char *data = rb->lcd_framebuffer;
109 unsigned char *data_end = data + LCD_FBWIDTH*LCD_HEIGHT; 109 unsigned char *data_end = data + LCD_FBWIDTH*LCD_HEIGHT;
110 110
111 do 111 do
112 { 112 {
113 _xlcd_rb->memmove(data + blockcount, data, blocklen); 113 rb->memmove(data + blockcount, data, blocklen);
114 data += LCD_FBWIDTH; 114 data += LCD_FBWIDTH;
115 } 115 }
116 while (data < data_end); 116 while (data < data_end);
@@ -118,9 +118,9 @@ void xlcd_scroll_right(int count)
118 if (bitcount) 118 if (bitcount)
119 { 119 {
120 int bx, y; 120 int bx, y;
121 unsigned char *addr = _xlcd_rb->lcd_framebuffer + blockcount; 121 unsigned char *addr = rb->lcd_framebuffer + blockcount;
122#if LCD_DEPTH == 2 122#if LCD_DEPTH == 2
123 unsigned fill = 0x55 * (~_xlcd_rb->lcd_get_background() & 3); 123 unsigned fill = 0x55 * (~rb->lcd_get_background() & 3);
124#endif 124#endif
125 125
126 for (y = 0; y < LCD_HEIGHT; y++) 126 for (y = 0; y < LCD_HEIGHT; y++)
@@ -137,10 +137,10 @@ void xlcd_scroll_right(int count)
137 addr += LCD_FBWIDTH; 137 addr += LCD_FBWIDTH;
138 } 138 }
139 } 139 }
140 oldmode = _xlcd_rb->lcd_get_drawmode(); 140 oldmode = rb->lcd_get_drawmode();
141 _xlcd_rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID); 141 rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID);
142 _xlcd_rb->lcd_fillrect(0, 0, count, LCD_HEIGHT); 142 rb->lcd_fillrect(0, 0, count, LCD_HEIGHT);
143 _xlcd_rb->lcd_set_drawmode(oldmode); 143 rb->lcd_set_drawmode(oldmode);
144} 144}
145 145
146#else /* LCD_PIXELFORMAT vertical packed or >= 8bit / pixel */ 146#else /* LCD_PIXELFORMAT vertical packed or >= 8bit / pixel */
@@ -154,21 +154,21 @@ void xlcd_scroll_left(int count)
154 if ((unsigned)count >= LCD_WIDTH) 154 if ((unsigned)count >= LCD_WIDTH)
155 return; 155 return;
156 156
157 data = _xlcd_rb->lcd_framebuffer; 157 data = rb->lcd_framebuffer;
158 data_end = data + LCD_WIDTH*LCD_FBHEIGHT; 158 data_end = data + LCD_WIDTH*LCD_FBHEIGHT;
159 length = LCD_WIDTH - count; 159 length = LCD_WIDTH - count;
160 160
161 do 161 do
162 { 162 {
163 _xlcd_rb->memmove(data, data + count, length * sizeof(fb_data)); 163 rb->memmove(data, data + count, length * sizeof(fb_data));
164 data += LCD_WIDTH; 164 data += LCD_WIDTH;
165 } 165 }
166 while (data < data_end); 166 while (data < data_end);
167 167
168 oldmode = _xlcd_rb->lcd_get_drawmode(); 168 oldmode = rb->lcd_get_drawmode();
169 _xlcd_rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID); 169 rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID);
170 _xlcd_rb->lcd_fillrect(length, 0, count, LCD_HEIGHT); 170 rb->lcd_fillrect(length, 0, count, LCD_HEIGHT);
171 _xlcd_rb->lcd_set_drawmode(oldmode); 171 rb->lcd_set_drawmode(oldmode);
172} 172}
173 173
174/* Scroll right */ 174/* Scroll right */
@@ -180,21 +180,21 @@ void xlcd_scroll_right(int count)
180 if ((unsigned)count >= LCD_WIDTH) 180 if ((unsigned)count >= LCD_WIDTH)
181 return; 181 return;
182 182
183 data = _xlcd_rb->lcd_framebuffer; 183 data = rb->lcd_framebuffer;
184 data_end = data + LCD_WIDTH*LCD_FBHEIGHT; 184 data_end = data + LCD_WIDTH*LCD_FBHEIGHT;
185 length = LCD_WIDTH - count; 185 length = LCD_WIDTH - count;
186 186
187 do 187 do
188 { 188 {
189 _xlcd_rb->memmove(data + count, data, length * sizeof(fb_data)); 189 rb->memmove(data + count, data, length * sizeof(fb_data));
190 data += LCD_WIDTH; 190 data += LCD_WIDTH;
191 } 191 }
192 while (data < data_end); 192 while (data < data_end);
193 193
194 oldmode = _xlcd_rb->lcd_get_drawmode(); 194 oldmode = rb->lcd_get_drawmode();
195 _xlcd_rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID); 195 rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID);
196 _xlcd_rb->lcd_fillrect(0, 0, count, LCD_HEIGHT); 196 rb->lcd_fillrect(0, 0, count, LCD_HEIGHT);
197 _xlcd_rb->lcd_set_drawmode(oldmode); 197 rb->lcd_set_drawmode(oldmode);
198} 198}
199 199
200#endif /* LCD_PIXELFORMAT, LCD_DEPTH */ 200#endif /* LCD_PIXELFORMAT, LCD_DEPTH */
@@ -211,14 +211,14 @@ void xlcd_scroll_up(int count)
211 211
212 length = LCD_HEIGHT - count; 212 length = LCD_HEIGHT - count;
213 213
214 _xlcd_rb->memmove(_xlcd_rb->lcd_framebuffer, 214 rb->memmove(rb->lcd_framebuffer,
215 _xlcd_rb->lcd_framebuffer + count * LCD_FBWIDTH, 215 rb->lcd_framebuffer + count * LCD_FBWIDTH,
216 length * LCD_FBWIDTH * sizeof(fb_data)); 216 length * LCD_FBWIDTH * sizeof(fb_data));
217 217
218 oldmode = _xlcd_rb->lcd_get_drawmode(); 218 oldmode = rb->lcd_get_drawmode();
219 _xlcd_rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID); 219 rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID);
220 _xlcd_rb->lcd_fillrect(0, length, LCD_WIDTH, count); 220 rb->lcd_fillrect(0, length, LCD_WIDTH, count);
221 _xlcd_rb->lcd_set_drawmode(oldmode); 221 rb->lcd_set_drawmode(oldmode);
222} 222}
223 223
224/* Scroll down */ 224/* Scroll down */
@@ -231,14 +231,14 @@ void xlcd_scroll_down(int count)
231 231
232 length = LCD_HEIGHT - count; 232 length = LCD_HEIGHT - count;
233 233
234 _xlcd_rb->memmove(_xlcd_rb->lcd_framebuffer + count * LCD_FBWIDTH, 234 rb->memmove(rb->lcd_framebuffer + count * LCD_FBWIDTH,
235 _xlcd_rb->lcd_framebuffer, 235 rb->lcd_framebuffer,
236 length * LCD_FBWIDTH * sizeof(fb_data)); 236 length * LCD_FBWIDTH * sizeof(fb_data));
237 237
238 oldmode = _xlcd_rb->lcd_get_drawmode(); 238 oldmode = rb->lcd_get_drawmode();
239 _xlcd_rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID); 239 rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID);
240 _xlcd_rb->lcd_fillrect(0, 0, LCD_WIDTH, count); 240 rb->lcd_fillrect(0, 0, LCD_WIDTH, count);
241 _xlcd_rb->lcd_set_drawmode(oldmode); 241 rb->lcd_set_drawmode(oldmode);
242} 242}
243 243
244#else /* LCD_PIXELFORMAT == VERTICAL_PACKING, 244#else /* LCD_PIXELFORMAT == VERTICAL_PACKING,
@@ -265,8 +265,8 @@ void xlcd_scroll_up(int count)
265 265
266 if (blockcount) 266 if (blockcount)
267 { 267 {
268 _xlcd_rb->memmove(_xlcd_rb->lcd_framebuffer, 268 rb->memmove(rb->lcd_framebuffer,
269 _xlcd_rb->lcd_framebuffer + blockcount * LCD_FBWIDTH, 269 rb->lcd_framebuffer + blockcount * LCD_FBWIDTH,
270 blocklen * LCD_FBWIDTH * sizeof(fb_data)); 270 blocklen * LCD_FBWIDTH * sizeof(fb_data));
271 } 271 }
272 if (bitcount) 272 if (bitcount)
@@ -336,7 +336,7 @@ void xlcd_scroll_up(int count)
336 "bt .su_cloop \n" 336 "bt .su_cloop \n"
337 : /* outputs */ 337 : /* outputs */
338 : /* inputs */ 338 : /* inputs */
339 [addr]"r"(_xlcd_rb->lcd_framebuffer + blocklen * LCD_FBWIDTH), 339 [addr]"r"(rb->lcd_framebuffer + blocklen * LCD_FBWIDTH),
340 [wide]"r"(LCD_FBWIDTH), 340 [wide]"r"(LCD_FBWIDTH),
341 [rows]"r"(blocklen), 341 [rows]"r"(blocklen),
342 [cnt] "r"(bitcount) 342 [cnt] "r"(bitcount)
@@ -374,17 +374,17 @@ void xlcd_scroll_up(int count)
374 : /* inputs */ 374 : /* inputs */
375 [wide]"r"(LCD_FBWIDTH), 375 [wide]"r"(LCD_FBWIDTH),
376 [rows]"r"(blocklen), 376 [rows]"r"(blocklen),
377 [addr]"a"(_xlcd_rb->lcd_framebuffer + blocklen * LCD_FBWIDTH), 377 [addr]"a"(rb->lcd_framebuffer + blocklen * LCD_FBWIDTH),
378 [cnt] "d"(bitcount), 378 [cnt] "d"(bitcount),
379 [bkg] "d"(0x55 * (~_xlcd_rb->lcd_get_background() & 3)) 379 [bkg] "d"(0x55 * (~rb->lcd_get_background() & 3))
380 : /* clobbers */ 380 : /* clobbers */
381 "a1", "d0", "d1", "d2", "d3" 381 "a1", "d0", "d1", "d2", "d3"
382 ); 382 );
383#else /* C version */ 383#else /* C version */
384 int x, by; 384 int x, by;
385 unsigned char *addr = _xlcd_rb->lcd_framebuffer + blocklen * LCD_FBWIDTH; 385 unsigned char *addr = rb->lcd_framebuffer + blocklen * LCD_FBWIDTH;
386#if LCD_DEPTH == 2 386#if LCD_DEPTH == 2
387 unsigned fill = 0x55 * (~_xlcd_rb->lcd_get_background() & 3); 387 unsigned fill = 0x55 * (~rb->lcd_get_background() & 3);
388#else 388#else
389 const unsigned fill = 0; 389 const unsigned fill = 0;
390#endif 390#endif
@@ -407,10 +407,10 @@ void xlcd_scroll_up(int count)
407 407
408#if LCD_DEPTH == 2 408#if LCD_DEPTH == 2
409 int x, by; 409 int x, by;
410 fb_data *addr = _xlcd_rb->lcd_framebuffer + blocklen * LCD_FBWIDTH; 410 fb_data *addr = rb->lcd_framebuffer + blocklen * LCD_FBWIDTH;
411 unsigned fill, mask; 411 unsigned fill, mask;
412 412
413 fill = patterns[_xlcd_rb->lcd_get_background() & 3] << 8; 413 fill = patterns[rb->lcd_get_background() & 3] << 8;
414 mask = (0xFFu >> bitcount) << bitcount; 414 mask = (0xFFu >> bitcount) << bitcount;
415 mask |= mask << 8; 415 mask |= mask << 8;
416 416
@@ -432,10 +432,10 @@ void xlcd_scroll_up(int count)
432 432
433#endif /* LCD_PIXELFORMAT */ 433#endif /* LCD_PIXELFORMAT */
434 } 434 }
435 oldmode = _xlcd_rb->lcd_get_drawmode(); 435 oldmode = rb->lcd_get_drawmode();
436 _xlcd_rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID); 436 rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID);
437 _xlcd_rb->lcd_fillrect(0, LCD_HEIGHT - count, LCD_WIDTH, count); 437 rb->lcd_fillrect(0, LCD_HEIGHT - count, LCD_WIDTH, count);
438 _xlcd_rb->lcd_set_drawmode(oldmode); 438 rb->lcd_set_drawmode(oldmode);
439} 439}
440 440
441/* Scroll up */ 441/* Scroll up */
@@ -459,8 +459,8 @@ void xlcd_scroll_down(int count)
459 459
460 if (blockcount) 460 if (blockcount)
461 { 461 {
462 _xlcd_rb->memmove(_xlcd_rb->lcd_framebuffer + blockcount * LCD_FBWIDTH, 462 rb->memmove(rb->lcd_framebuffer + blockcount * LCD_FBWIDTH,
463 _xlcd_rb->lcd_framebuffer, 463 rb->lcd_framebuffer,
464 blocklen * LCD_FBWIDTH * sizeof(fb_data)); 464 blocklen * LCD_FBWIDTH * sizeof(fb_data));
465 } 465 }
466 if (bitcount) 466 if (bitcount)
@@ -529,7 +529,7 @@ void xlcd_scroll_down(int count)
529 "bt .sd_cloop \n" 529 "bt .sd_cloop \n"
530 : /* outputs */ 530 : /* outputs */
531 : /* inputs */ 531 : /* inputs */
532 [addr]"r"(_xlcd_rb->lcd_framebuffer + blockcount * LCD_FBWIDTH), 532 [addr]"r"(rb->lcd_framebuffer + blockcount * LCD_FBWIDTH),
533 [wide]"r"(LCD_WIDTH), 533 [wide]"r"(LCD_WIDTH),
534 [rows]"r"(blocklen), 534 [rows]"r"(blocklen),
535 [cnt] "r"(bitcount) 535 [cnt] "r"(bitcount)
@@ -564,17 +564,17 @@ void xlcd_scroll_down(int count)
564 : /* inputs */ 564 : /* inputs */
565 [wide]"r"(LCD_WIDTH), 565 [wide]"r"(LCD_WIDTH),
566 [rows]"r"(blocklen), 566 [rows]"r"(blocklen),
567 [addr]"a"(_xlcd_rb->lcd_framebuffer + blockcount * LCD_FBWIDTH), 567 [addr]"a"(rb->lcd_framebuffer + blockcount * LCD_FBWIDTH),
568 [cnt] "d"(bitcount), 568 [cnt] "d"(bitcount),
569 [bkg] "d"((0x55 * (~_xlcd_rb->lcd_get_background() & 3)) << bitcount) 569 [bkg] "d"((0x55 * (~rb->lcd_get_background() & 3)) << bitcount)
570 : /* clobbers */ 570 : /* clobbers */
571 "a1", "d0", "d1", "d2", "d3" 571 "a1", "d0", "d1", "d2", "d3"
572 ); 572 );
573#else /* C version */ 573#else /* C version */
574 int x, by; 574 int x, by;
575 unsigned char *addr = _xlcd_rb->lcd_framebuffer + blockcount * LCD_FBWIDTH; 575 unsigned char *addr = rb->lcd_framebuffer + blockcount * LCD_FBWIDTH;
576#if LCD_DEPTH == 2 576#if LCD_DEPTH == 2
577 unsigned fill = (0x55 * (~_xlcd_rb->lcd_get_background() & 3)) << bitcount; 577 unsigned fill = (0x55 * (~rb->lcd_get_background() & 3)) << bitcount;
578#else 578#else
579 const unsigned fill = 0; 579 const unsigned fill = 0;
580#endif 580#endif
@@ -597,10 +597,10 @@ void xlcd_scroll_down(int count)
597 597
598#if LCD_DEPTH == 2 598#if LCD_DEPTH == 2
599 int x, by; 599 int x, by;
600 fb_data *addr = _xlcd_rb->lcd_framebuffer + blockcount * LCD_FBWIDTH; 600 fb_data *addr = rb->lcd_framebuffer + blockcount * LCD_FBWIDTH;
601 unsigned fill, mask; 601 unsigned fill, mask;
602 602
603 fill = patterns[_xlcd_rb->lcd_get_background() & 3] >> (8 - bitcount); 603 fill = patterns[rb->lcd_get_background() & 3] >> (8 - bitcount);
604 mask = (0xFFu >> bitcount) << bitcount; 604 mask = (0xFFu >> bitcount) << bitcount;
605 mask |= mask << 8; 605 mask |= mask << 8;
606 606
@@ -622,10 +622,10 @@ void xlcd_scroll_down(int count)
622 622
623#endif /* LCD_PIXELFORMAT */ 623#endif /* LCD_PIXELFORMAT */
624 } 624 }
625 oldmode = _xlcd_rb->lcd_get_drawmode(); 625 oldmode = rb->lcd_get_drawmode();
626 _xlcd_rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID); 626 rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID);
627 _xlcd_rb->lcd_fillrect(0, 0, LCD_WIDTH, count); 627 rb->lcd_fillrect(0, 0, LCD_WIDTH, count);
628 _xlcd_rb->lcd_set_drawmode(oldmode); 628 rb->lcd_set_drawmode(oldmode);
629} 629}
630 630
631#endif /* LCD_PIXELFORMAT, LCD_DEPTH */ 631#endif /* LCD_PIXELFORMAT, LCD_DEPTH */
diff --git a/apps/plugins/logo.c b/apps/plugins/logo.c
index c96b45adf0..f0d53215ce 100644
--- a/apps/plugins/logo.c
+++ b/apps/plugins/logo.c
@@ -195,12 +195,11 @@ const unsigned char rockbox16x7[] = {
195#endif 195#endif
196#endif 196#endif
197 197
198enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) { 198enum plugin_status plugin_start(const void* parameter) {
199 int button; 199 int button;
200 int timer = 10; 200 int timer = 10;
201 int x = (DISPLAY_WIDTH / 2) - (LOGO_WIDTH / 2); 201 int x = (DISPLAY_WIDTH / 2) - (LOGO_WIDTH / 2);
202 int y = (DISPLAY_HEIGHT / 2) - (LOGO_HEIGHT / 2); 202 int y = (DISPLAY_HEIGHT / 2) - (LOGO_HEIGHT / 2);
203 const struct plugin_api* rb = api;
204 int dx; 203 int dx;
205 int dy; 204 int dy;
206#ifdef HAVE_LCD_CHARCELLS 205#ifdef HAVE_LCD_CHARCELLS
@@ -211,7 +210,7 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
211 (void)parameter; 210 (void)parameter;
212 211
213#ifdef HAVE_LCD_CHARCELLS 212#ifdef HAVE_LCD_CHARCELLS
214 if (!pgfx_init(rb, 4, 2)) { 213 if (!pgfx_init(4, 2)) {
215 rb->splash(HZ*2, "Old LCD :("); 214 rb->splash(HZ*2, "Old LCD :(");
216 return PLUGIN_OK; 215 return PLUGIN_OK;
217 } 216 }
diff --git a/apps/plugins/mandelbrot.c b/apps/plugins/mandelbrot.c
index 379022ec96..a763dffa29 100644
--- a/apps/plugins/mandelbrot.c
+++ b/apps/plugins/mandelbrot.c
@@ -323,8 +323,6 @@ PLUGIN_HEADER
323#define MYXLCD(fn) xlcd_ ## fn 323#define MYXLCD(fn) xlcd_ ## fn
324#endif 324#endif
325 325
326static const struct plugin_api* rb;
327
328/* Fixed point format s5.26: sign, 5 bits integer part, 26 bits fractional part */ 326/* Fixed point format s5.26: sign, 5 bits integer part, 26 bits fractional part */
329static long x_min; 327static long x_min;
330static long x_max; 328static long x_max;
@@ -711,13 +709,12 @@ void cleanup(void *parameter)
711#define REDRAW_PARTIAL 1 709#define REDRAW_PARTIAL 1
712#define REDRAW_FULL 2 710#define REDRAW_FULL 2
713 711
714enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 712enum plugin_status plugin_start(const void* parameter)
715{ 713{
716 int button; 714 int button;
717 int lastbutton = BUTTON_NONE; 715 int lastbutton = BUTTON_NONE;
718 int redraw = REDRAW_FULL; 716 int redraw = REDRAW_FULL;
719 717
720 rb = api;
721 (void)parameter; 718 (void)parameter;
722 719
723#ifdef USEGSLIB 720#ifdef USEGSLIB
@@ -725,15 +722,13 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
725 gbuf = (unsigned char *) rb->plugin_get_buffer(&gbuf_size); 722 gbuf = (unsigned char *) rb->plugin_get_buffer(&gbuf_size);
726 723
727 /* initialize the greyscale buffer.*/ 724 /* initialize the greyscale buffer.*/
728 if (!grey_init(rb, gbuf, gbuf_size, GREY_ON_COP, 725 if (!grey_init(gbuf, gbuf_size, GREY_ON_COP,
729 LCD_WIDTH, LCD_HEIGHT, NULL)) 726 LCD_WIDTH, LCD_HEIGHT, NULL))
730 { 727 {
731 rb->splash(HZ, "Couldn't init greyscale display"); 728 rb->splash(HZ, "Couldn't init greyscale display");
732 return 0; 729 return 0;
733 } 730 }
734 grey_show(true); /* switch on greyscale overlay */ 731 grey_show(true); /* switch on greyscale overlay */
735#else
736 xlcd_init(rb);
737#endif 732#endif
738 733
739#if LCD_DEPTH > 1 734#if LCD_DEPTH > 1
diff --git a/apps/plugins/matrix.c b/apps/plugins/matrix.c
index 986eb72e48..a3b0b850d8 100644
--- a/apps/plugins/matrix.c
+++ b/apps/plugins/matrix.c
@@ -136,9 +136,6 @@ extern const fb_data matrix_normal[];
136 136
137#define SLEEP HZ/50 137#define SLEEP HZ/50
138 138
139/* Codec api pointer */
140static const struct plugin_api* rb;
141
142/* Each position is of this type */ 139/* Each position is of this type */
143typedef struct cmatrix { 140typedef struct cmatrix {
144 int val; 141 int val;
@@ -302,13 +299,12 @@ static void matrix_loop(void)
302 } 299 }
303} 300}
304 301
305enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) { 302enum plugin_status plugin_start(const void* parameter) {
306 int button; 303 int button;
307 int sleep = SLEEP; 304 int sleep = SLEEP;
308 bool frozen = false; 305 bool frozen = false;
309 306
310 (void)parameter; 307 (void)parameter;
311 rb = api;
312 308
313 rb->lcd_set_background(LCD_BLACK); 309 rb->lcd_set_background(LCD_BLACK);
314 rb->lcd_set_backdrop(NULL); 310 rb->lcd_set_backdrop(NULL);
diff --git a/apps/plugins/maze.c b/apps/plugins/maze.c
index 67c0623dec..881d804400 100644
--- a/apps/plugins/maze.c
+++ b/apps/plugins/maze.c
@@ -85,9 +85,6 @@ static const struct button_mapping *plugin_contexts[]
85#define BORDER_S(y) ((y) == MAZE_HEIGHT-1) 85#define BORDER_S(y) ((y) == MAZE_HEIGHT-1)
86#define BORDER_W(x) ((x) == 0) 86#define BORDER_W(x) ((x) == 0)
87 87
88/* the API */
89static const struct plugin_api* rb;
90
91// we can and should change this to make square boxes 88// we can and should change this to make square boxes
92#if ( LCD_WIDTH == 112 ) 89#if ( LCD_WIDTH == 112 )
93#define MAZE_WIDTH 16 90#define MAZE_WIDTH 16
@@ -493,17 +490,16 @@ static void maze_move_player_left(struct maze* maze)
493/**********************************/ 490/**********************************/
494/* this is the plugin entry point */ 491/* this is the plugin entry point */
495/**********************************/ 492/**********************************/
496enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 493enum plugin_status plugin_start(const void* parameter)
497{ 494{
498 int button, lastbutton = BUTTON_NONE; 495 int button, lastbutton = BUTTON_NONE;
499 int quit = 0; 496 int quit = 0;
500 int i; 497 int i;
501 struct maze maze; 498 struct maze maze;
502 (void)parameter; 499 (void)parameter;
503 rb = api;
504 500
505 /* Turn off backlight timeout */ 501 /* Turn off backlight timeout */
506 backlight_force_on(rb); /* backlight control in lib/helper.c */ 502 backlight_force_on(); /* backlight control in lib/helper.c */
507 503
508 /* Seed the RNG */ 504 /* Seed the RNG */
509 rb->srand(*rb->current_tick); 505 rb->srand(*rb->current_tick);
@@ -531,7 +527,7 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
531 527
532 while(!quit) { 528 while(!quit) {
533#ifdef __PLUGINLIB_ACTIONS_H__ 529#ifdef __PLUGINLIB_ACTIONS_H__
534 button = pluginlib_getaction(rb, TIMEOUT_BLOCK, plugin_contexts, 2); 530 button = pluginlib_getaction(TIMEOUT_BLOCK, plugin_contexts, 2);
535#else 531#else
536 button = rb->button_get(true); 532 button = rb->button_get(true);
537#endif 533#endif
@@ -591,6 +587,6 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
591 587
592 } 588 }
593 /* Turn on backlight timeout (revert to settings) */ 589 /* Turn on backlight timeout (revert to settings) */
594 backlight_use_settings(rb); /* backlight control in lib/helper.c */ 590 backlight_use_settings(); /* backlight control in lib/helper.c */
595 return ((quit == 1) ? PLUGIN_OK : PLUGIN_USB_CONNECTED); 591 return ((quit == 1) ? PLUGIN_OK : PLUGIN_USB_CONNECTED);
596} 592}
diff --git a/apps/plugins/mazezam.c b/apps/plugins/mazezam.c
index fac12def4f..8981986144 100644
--- a/apps/plugins/mazezam.c
+++ b/apps/plugins/mazezam.c
@@ -28,13 +28,11 @@
28/* Include standard plugin macro */ 28/* Include standard plugin macro */
29PLUGIN_HEADER 29PLUGIN_HEADER
30 30
31static const struct plugin_api* rb;
32
33/* The plugin actions of interest. */ 31/* The plugin actions of interest. */
34const struct button_mapping *plugin_contexts[] 32const struct button_mapping *plugin_contexts[]
35= {generic_directions, generic_actions}; 33= {generic_directions, generic_actions};
36 34
37MEM_FUNCTION_WRAPPERS(rb); 35MEM_FUNCTION_WRAPPERS;
38 36
39/* Use the standard plugin buttons rather than a hard-to-maintain list of 37/* Use the standard plugin buttons rather than a hard-to-maintain list of
40 * MazezaM specific buttons. */ 38 * MazezaM specific buttons. */
@@ -252,7 +250,7 @@ static void store_lcd_settings(void)
252******************************************************************************/ 250******************************************************************************/
253static void restore_lcd_settings(void) { 251static void restore_lcd_settings(void) {
254 /* Turn on backlight timeout (revert to settings) */ 252 /* Turn on backlight timeout (revert to settings) */
255 backlight_use_settings(rb); /* backlight control in lib/helper.c */ 253 backlight_use_settings(); /* backlight control in lib/helper.c */
256 254
257 /* Restore the old settings */ 255 /* Restore the old settings */
258#if LCD_DEPTH > 1 256#if LCD_DEPTH > 1
@@ -267,7 +265,7 @@ static void restore_lcd_settings(void) {
267******************************************************************************/ 265******************************************************************************/
268static void plugin_lcd_settings(void) { 266static void plugin_lcd_settings(void) {
269 /* Turn off backlight timeout */ 267 /* Turn off backlight timeout */
270 backlight_force_on(rb); /* backlight control in lib/helper.c */ 268 backlight_force_on(); /* backlight control in lib/helper.c */
271 269
272 /* Set the new settings */ 270 /* Set the new settings */
273#ifdef HAVE_LCD_COLOR 271#ifdef HAVE_LCD_COLOR
@@ -546,7 +544,7 @@ static void level_loop(struct level_info* li, short* shift, short *x, short *y)
546 while (state >= STATE_IN_LEVEL) { 544 while (state >= STATE_IN_LEVEL) {
547 draw_level(li, shift, *x, *y); 545 draw_level(li, shift, *x, *y);
548 rb->lcd_update(); 546 rb->lcd_update();
549 button = pluginlib_getaction(rb, TIMEOUT_BLOCK, plugin_contexts, 2); 547 button = pluginlib_getaction(TIMEOUT_BLOCK, plugin_contexts, 2);
550 blocked = false; 548 blocked = false;
551 549
552 switch (button) { 550 switch (button) {
@@ -643,7 +641,7 @@ static void in_game_menu(void)
643 break; 641 break;
644 642
645 case 2: /* Audio playback */ 643 case 2: /* Audio playback */
646 playback_control(rb, NULL); 644 playback_control(NULL);
647 state = STATE_IN_LEVEL; 645 state = STATE_IN_LEVEL;
648 break; 646 break;
649 647
@@ -918,17 +916,12 @@ static void main_menu(void)
918/***************************************************************************** 916/*****************************************************************************
919* Plugin entry point 917* Plugin entry point
920******************************************************************************/ 918******************************************************************************/
921enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 919enum plugin_status plugin_start(const void* parameter)
922{ 920{
923 enum plugin_status plugin_state; 921 enum plugin_status plugin_state;
924 922
925 /* Usual plugin stuff */ 923 /* Usual plugin stuff */
926 (void)parameter; 924 (void)parameter;
927 rb = api;
928
929
930 /* initialise the config file module */
931 configfile_init(rb);
932 925
933 store_lcd_settings(); 926 store_lcd_settings();
934 927
diff --git a/apps/plugins/md5sum.c b/apps/plugins/md5sum.c
index 6479f204a2..03db427f29 100644
--- a/apps/plugins/md5sum.c
+++ b/apps/plugins/md5sum.c
@@ -24,9 +24,7 @@
24 24
25PLUGIN_HEADER 25PLUGIN_HEADER
26 26
27static const struct plugin_api *rb; 27MEM_FUNCTION_WRAPPERS;
28
29MEM_FUNCTION_WRAPPERS(rb);
30 28
31#define BUFFERSIZE 16384 29#define BUFFERSIZE 16384
32 30
@@ -183,7 +181,7 @@ static void hash_check( int out, const char *path )
183 rb->close( list ); 181 rb->close( list );
184} 182}
185 183
186enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 184enum plugin_status plugin_start(const void* parameter)
187{ 185{
188 const char *arg = (const char *)parameter; /* input file name, if any */ 186 const char *arg = (const char *)parameter; /* input file name, if any */
189 int out = -1; /* output file descriptor */ 187 int out = -1; /* output file descriptor */
@@ -191,8 +189,6 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
191 189
192 void (*action)( int, const char * ) = NULL; 190 void (*action)( int, const char * ) = NULL;
193 191
194 md5_init( api );
195 rb = api;
196#ifdef HAVE_ADJUSTABLE_CPU_FREQ 192#ifdef HAVE_ADJUSTABLE_CPU_FREQ
197 rb->cpu_boost( true ); 193 rb->cpu_boost( true );
198#endif 194#endif
@@ -225,7 +221,7 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
225 dir = rb->opendir( arg ); 221 dir = rb->opendir( arg );
226 if( dir ) 222 if( dir )
227 { 223 {
228 api->closedir( dir ); 224 rb->closedir( dir );
229 225
230 /* Hash the directory's content recursively */ 226 /* Hash the directory's content recursively */
231 action = hash_dir; 227 action = hash_dir;
diff --git a/apps/plugins/metronome.c b/apps/plugins/metronome.c
index d792642265..e93b2ad244 100644
--- a/apps/plugins/metronome.c
+++ b/apps/plugins/metronome.c
@@ -667,9 +667,7 @@ const struct button_mapping *plugin_contexts[] =
667}; 667};
668#define PLA_ARRAY_COUNT sizeof(plugin_contexts)/sizeof(plugin_contexts[0]) 668#define PLA_ARRAY_COUNT sizeof(plugin_contexts)/sizeof(plugin_contexts[0])
669 669
670static const struct plugin_api* rb; 670MEM_FUNCTION_WRAPPERS;
671
672MEM_FUNCTION_WRAPPERS(rb);
673 671
674static int bpm = 120; 672static int bpm = 120;
675static int period = 0; 673static int period = 0;
@@ -891,13 +889,12 @@ void tap(void)
891 reset_tap = false; 889 reset_tap = false;
892} 890}
893 891
894enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 892enum plugin_status plugin_start(const void* parameter)
895{ 893{
896 int button; 894 int button;
897 enum plugin_status status; 895 enum plugin_status status;
898 896
899 (void)parameter; 897 (void)parameter;
900 rb = api;
901 898
902 if (MET_IS_PLAYING) 899 if (MET_IS_PLAYING)
903 MET_PLAY_STOP; /* stop audio IS */ 900 MET_PLAY_STOP; /* stop audio IS */
@@ -923,14 +920,14 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
923 while (true){ 920 while (true){
924 reset_tap = true; 921 reset_tap = true;
925#if CONFIG_CODEC == SWCODEC 922#if CONFIG_CODEC == SWCODEC
926 button = pluginlib_getaction(rb,1,plugin_contexts,PLA_ARRAY_COUNT); 923 button = pluginlib_getaction(1,plugin_contexts,PLA_ARRAY_COUNT);
927 if (need_to_play) 924 if (need_to_play)
928 { 925 {
929 need_to_play = false; 926 need_to_play = false;
930 play_tock(); 927 play_tock();
931 } 928 }
932#else 929#else
933 button = pluginlib_getaction(rb,TIMEOUT_BLOCK, 930 button = pluginlib_getaction(TIMEOUT_BLOCK,
934 plugin_contexts,PLA_ARRAY_COUNT); 931 plugin_contexts,PLA_ARRAY_COUNT);
935#endif /* SWCODEC */ 932#endif /* SWCODEC */
936 switch (button) { 933 switch (button) {
diff --git a/apps/plugins/midi/guspat.c b/apps/plugins/midi/guspat.c
index 419cfa3ad0..124f779671 100644
--- a/apps/plugins/midi/guspat.c
+++ b/apps/plugins/midi/guspat.c
@@ -22,8 +22,6 @@
22#include "guspat.h" 22#include "guspat.h"
23#include "midiutil.h" 23#include "midiutil.h"
24 24
25extern struct plugin_api * rb;
26
27/* This came from one of the Gravis documents */ 25/* This came from one of the Gravis documents */
28const uint32_t gustable[]= 26const uint32_t gustable[]=
29{ 27{
diff --git a/apps/plugins/midi/midifile.c b/apps/plugins/midi/midifile.c
index dd659033e8..84e8b567bc 100644
--- a/apps/plugins/midi/midifile.c
+++ b/apps/plugins/midi/midifile.c
@@ -21,8 +21,6 @@
21#include "plugin.h" 21#include "plugin.h"
22#include "midiutil.h" 22#include "midiutil.h"
23 23
24extern struct plugin_api * rb;
25
26struct Track * readTrack(int file); 24struct Track * readTrack(int file);
27int readID(int file); 25int readID(int file);
28 26
diff --git a/apps/plugins/midi/midiplay.c b/apps/plugins/midi/midiplay.c
index 5f4613a37b..b506b680fd 100644
--- a/apps/plugins/midi/midiplay.c
+++ b/apps/plugins/midi/midiplay.c
@@ -211,18 +211,16 @@ int32_t gmbuf[BUF_SIZE*NBUF];
211static unsigned int samples_in_buf; 211static unsigned int samples_in_buf;
212 212
213int quit=0; 213int quit=0;
214const struct plugin_api * rb;
215 214
216static int midimain(const void * filename); 215static int midimain(const void * filename);
217 216
218enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 217enum plugin_status plugin_start(const void* parameter)
219{ 218{
220 int retval = 0; 219 int retval = 0;
221 220
222 221
223 PLUGIN_IRAM_INIT(api) 222 PLUGIN_IRAM_INIT(rb)
224 223
225 rb = api;
226 if(parameter == NULL) 224 if(parameter == NULL)
227 { 225 {
228 rb->splash(HZ*2, " Play .MID file "); 226 rb->splash(HZ*2, " Play .MID file ");
diff --git a/apps/plugins/midi/midiutil.c b/apps/plugins/midi/midiutil.c
index 510a30d87f..f1b6668be2 100644
--- a/apps/plugins/midi/midiutil.c
+++ b/apps/plugins/midi/midiutil.c
@@ -21,8 +21,6 @@
21#include "plugin.h" 21#include "plugin.h"
22#include "midiutil.h" 22#include "midiutil.h"
23 23
24extern struct plugin_api * rb;
25
26int chVol[16] IBSS_ATTR; /* Channel volume */ 24int chVol[16] IBSS_ATTR; /* Channel volume */
27int chPan[16] IBSS_ATTR; /* Channel panning */ 25int chPan[16] IBSS_ATTR; /* Channel panning */
28int chPat[16] IBSS_ATTR; /* Channel patch */ 26int chPat[16] IBSS_ATTR; /* Channel patch */
diff --git a/apps/plugins/midi/sequencer.c b/apps/plugins/midi/sequencer.c
index 34478e4d4f..11dd0e3f96 100644
--- a/apps/plugins/midi/sequencer.c
+++ b/apps/plugins/midi/sequencer.c
@@ -23,7 +23,6 @@
23#include "guspat.h" 23#include "guspat.h"
24#include "synth.h" 24#include "synth.h"
25 25
26extern struct plugin_api * rb;
27extern int playingTime IBSS_ATTR; 26extern int playingTime IBSS_ATTR;
28extern int samplesThisSecond IBSS_ATTR; 27extern int samplesThisSecond IBSS_ATTR;
29 28
diff --git a/apps/plugins/midi/synth.c b/apps/plugins/midi/synth.c
index 1d759be288..f2fbe063e7 100644
--- a/apps/plugins/midi/synth.c
+++ b/apps/plugins/midi/synth.c
@@ -23,8 +23,6 @@
23#include "midiutil.h" 23#include "midiutil.h"
24#include "synth.h" 24#include "synth.h"
25 25
26extern struct plugin_api * rb;
27
28void readTextBlock(int file, char * buf) 26void readTextBlock(int file, char * buf)
29{ 27{
30 char c = 0; 28 char c = 0;
diff --git a/apps/plugins/minesweeper.c b/apps/plugins/minesweeper.c
index 183ce0fd9b..7cffdaf230 100644
--- a/apps/plugins/minesweeper.c
+++ b/apps/plugins/minesweeper.c
@@ -243,12 +243,6 @@ enum minesweeper_status {
243#endif 243#endif
244#endif 244#endif
245 245
246/* here is a global api struct pointer. while not strictly necessary,
247 * it's nice not to have to pass the api pointer in all function calls
248 * in the plugin
249 */
250static const struct plugin_api *rb;
251
252extern const fb_data minesweeper_tiles[]; 246extern const fb_data minesweeper_tiles[];
253 247
254#ifdef HAVE_LCD_COLOR 248#ifdef HAVE_LCD_COLOR
@@ -795,12 +789,11 @@ enum minesweeper_status minesweeper( void )
795} 789}
796 790
797/* plugin entry point */ 791/* plugin entry point */
798enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 792enum plugin_status plugin_start(const void* parameter)
799{ 793{
800 bool exit = false; 794 bool exit = false;
801 795
802 (void)parameter; 796 (void)parameter;
803 rb = api;
804#if LCD_DEPTH > 1 797#if LCD_DEPTH > 1
805 rb->lcd_set_backdrop(NULL); 798 rb->lcd_set_backdrop(NULL);
806#endif 799#endif
diff --git a/apps/plugins/mosaique.c b/apps/plugins/mosaique.c
index c8031e8b3b..adb0d423f2 100644
--- a/apps/plugins/mosaique.c
+++ b/apps/plugins/mosaique.c
@@ -157,7 +157,7 @@ PLUGIN_HEADER
157#endif 157#endif
158#endif 158#endif
159 159
160enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 160enum plugin_status plugin_start(const void* parameter)
161{ 161{
162 int button; 162 int button;
163 int timer = 10; 163 int timer = 10;
@@ -165,11 +165,10 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
165 int y=0; 165 int y=0;
166 int sx = 3; 166 int sx = 3;
167 int sy = 3; 167 int sy = 3;
168 const struct plugin_api* rb = api;
169 (void)parameter; 168 (void)parameter;
170 169
171#ifdef HAVE_LCD_CHARCELLS 170#ifdef HAVE_LCD_CHARCELLS
172 if (!pgfx_init(rb, 4, 2)) 171 if (!pgfx_init(4, 2))
173 { 172 {
174 rb->splash(HZ*2, "Old LCD :("); 173 rb->splash(HZ*2, "Old LCD :(");
175 return PLUGIN_OK; 174 return PLUGIN_OK;
diff --git a/apps/plugins/mp3_encoder.c b/apps/plugins/mp3_encoder.c
index 1de89bda97..b77058e97e 100644
--- a/apps/plugins/mp3_encoder.c
+++ b/apps/plugins/mp3_encoder.c
@@ -17,9 +17,7 @@
17PLUGIN_HEADER 17PLUGIN_HEADER
18PLUGIN_IRAM_DECLARE 18PLUGIN_IRAM_DECLARE
19 19
20static const struct plugin_api* rb; 20MEM_FUNCTION_WRAPPERS;
21
22MEM_FUNCTION_WRAPPERS(rb);
23 21
24#define SAMP_PER_FRAME 1152 22#define SAMP_PER_FRAME 1152
25#define SAMPL2 576 23#define SAMPL2 576
@@ -2496,7 +2494,7 @@ void get_mp3_filename(const char *wav_name)
2496#endif 2494#endif
2497#endif 2495#endif
2498 2496
2499enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 2497enum plugin_status plugin_start(const void* parameter)
2500{ 2498{
2501 int rat, srat, nrat; /* for rate selection */ 2499 int rat, srat, nrat; /* for rate selection */
2502 int cont = 1, butt; 2500 int cont = 1, butt;
@@ -2512,13 +2510,12 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
2512 if (parameter == NULL) 2510 if (parameter == NULL)
2513 return PLUGIN_ERROR; 2511 return PLUGIN_ERROR;
2514 2512
2515 PLUGIN_IRAM_INIT(api) 2513 PLUGIN_IRAM_INIT(rb)
2516 2514
2517#ifdef CPU_COLDFIRE 2515#ifdef CPU_COLDFIRE
2518 coldfire_set_macsr(0); /* integer mode */ 2516 coldfire_set_macsr(0); /* integer mode */
2519#endif 2517#endif
2520 2518
2521 rb = api;
2522 rb->lcd_setfont(FONT_SYSFIXED); 2519 rb->lcd_setfont(FONT_SYSFIXED);
2523 2520
2524#ifdef HAVE_ADJUSTABLE_CPU_FREQ 2521#ifdef HAVE_ADJUSTABLE_CPU_FREQ
diff --git a/apps/plugins/mpegplayer/decode.c b/apps/plugins/mpegplayer/decode.c
index 80a396d15b..a19b929bef 100644
--- a/apps/plugins/mpegplayer/decode.c
+++ b/apps/plugins/mpegplayer/decode.c
@@ -29,8 +29,6 @@
29 29
30#include "mpeg2dec_config.h" 30#include "mpeg2dec_config.h"
31 31
32extern const struct plugin_api* rb;
33
34#include "mpeg2.h" 32#include "mpeg2.h"
35#include "attributes.h" 33#include "attributes.h"
36#include "mpeg2_internal.h" 34#include "mpeg2_internal.h"
diff --git a/apps/plugins/mpegplayer/header.c b/apps/plugins/mpegplayer/header.c
index f5571835c1..001cafe7d5 100644
--- a/apps/plugins/mpegplayer/header.c
+++ b/apps/plugins/mpegplayer/header.c
@@ -30,8 +30,6 @@
30 30
31#include "mpeg2dec_config.h" 31#include "mpeg2dec_config.h"
32 32
33extern const struct plugin_api* rb;
34
35#include "mpeg2.h" 33#include "mpeg2.h"
36#include "attributes.h" 34#include "attributes.h"
37#include "mpeg2_internal.h" 35#include "mpeg2_internal.h"
diff --git a/apps/plugins/mpegplayer/mpeg_settings.c b/apps/plugins/mpegplayer/mpeg_settings.c
index cf7af09469..3e83f8bc17 100644
--- a/apps/plugins/mpegplayer/mpeg_settings.c
+++ b/apps/plugins/mpegplayer/mpeg_settings.c
@@ -308,11 +308,11 @@ void mpeg_backlight_update_brightness(int value)
308 if (value >= 0) 308 if (value >= 0)
309 { 309 {
310 value += MIN_BRIGHTNESS_SETTING; 310 value += MIN_BRIGHTNESS_SETTING;
311 backlight_brightness_set(rb, value); 311 backlight_brightness_set(value);
312 } 312 }
313 else 313 else
314 { 314 {
315 backlight_brightness_use_setting(rb); 315 backlight_brightness_use_setting();
316 } 316 }
317} 317}
318 318
@@ -820,7 +820,7 @@ static int show_start_menu(uint32_t duration)
820 format_menu_item(&items[MPEG_START_RESUME], sizeof (resume_str), 820 format_menu_item(&items[MPEG_START_RESUME], sizeof (resume_str),
821 "Resume at: %s", hms_str); 821 "Resume at: %s", hms_str);
822 822
823 menu_id = menu_init(rb, items, ARRAYLEN(items), 823 menu_id = menu_init(items, ARRAYLEN(items),
824 mpeg_menu_sysevent_callback, NULL, NULL, NULL); 824 mpeg_menu_sysevent_callback, NULL, NULL, NULL);
825 825
826 rb->button_clear_queue(); 826 rb->button_clear_queue();
@@ -925,7 +925,7 @@ static void display_options(void)
925#endif 925#endif
926 }; 926 };
927 927
928 menu_id = menu_init(rb, items, ARRAYLEN(items), 928 menu_id = menu_init(items, ARRAYLEN(items),
929 mpeg_menu_sysevent_callback, NULL, NULL, NULL); 929 mpeg_menu_sysevent_callback, NULL, NULL, NULL);
930 930
931 rb->button_clear_queue(); 931 rb->button_clear_queue();
@@ -1007,7 +1007,7 @@ static void audio_options(void)
1007 { "Dithering", NULL }, 1007 { "Dithering", NULL },
1008 }; 1008 };
1009 1009
1010 menu_id = menu_init(rb, items, ARRAYLEN(items), 1010 menu_id = menu_init(items, ARRAYLEN(items),
1011 mpeg_menu_sysevent_callback, NULL, NULL, NULL); 1011 mpeg_menu_sysevent_callback, NULL, NULL, NULL);
1012 1012
1013 rb->button_clear_queue(); 1013 rb->button_clear_queue();
@@ -1115,7 +1115,7 @@ int mpeg_menu(unsigned flags)
1115 if (flags & MPEG_MENU_HIDE_QUIT_ITEM) 1115 if (flags & MPEG_MENU_HIDE_QUIT_ITEM)
1116 item_count--; 1116 item_count--;
1117 1117
1118 menu_id = menu_init(rb, items, item_count, 1118 menu_id = menu_init(items, item_count,
1119 mpeg_menu_sysevent_callback, NULL, NULL, NULL); 1119 mpeg_menu_sysevent_callback, NULL, NULL, NULL);
1120 1120
1121 rb->button_clear_queue(); 1121 rb->button_clear_queue();
@@ -1189,8 +1189,6 @@ void init_settings(const char* filename)
1189 settings.equalizer = false; 1189 settings.equalizer = false;
1190 settings.dithering = false; 1190 settings.dithering = false;
1191 1191
1192 configfile_init(rb);
1193
1194 if (configfile_load(SETTINGS_FILENAME, config, 1192 if (configfile_load(SETTINGS_FILENAME, config,
1195 sizeof(config)/sizeof(*config), 1193 sizeof(config)/sizeof(*config),
1196 SETTINGS_MIN_VERSION) < 0) 1194 SETTINGS_MIN_VERSION) < 0)
diff --git a/apps/plugins/mpegplayer/mpegplayer.c b/apps/plugins/mpegplayer/mpegplayer.c
index 0b5bb518fe..fbd3dc6b2c 100644
--- a/apps/plugins/mpegplayer/mpegplayer.c
+++ b/apps/plugins/mpegplayer/mpegplayer.c
@@ -280,9 +280,7 @@ CONFIG_KEYPAD == SANSA_M200_PAD
280#endif 280#endif
281#endif 281#endif
282 282
283const struct plugin_api* rb; 283CACHE_FUNCTION_WRAPPERS;
284
285CACHE_FUNCTION_WRAPPERS(rb);
286 284
287/* One thing we can do here for targets with remotes is having a display 285/* One thing we can do here for targets with remotes is having a display
288 * always on the remote instead of always forcing a popup on the main display */ 286 * always on the remote instead of always forcing a popup on the main display */
@@ -622,7 +620,7 @@ static void wvs_backlight_on_video_mode(bool video_on)
622 if (video_on) { 620 if (video_on) {
623 /* Turn off backlight timeout */ 621 /* Turn off backlight timeout */
624 /* backlight control in lib/helper.c */ 622 /* backlight control in lib/helper.c */
625 backlight_force_on(rb); 623 backlight_force_on();
626#if defined(HAVE_LCD_ENABLE) && defined(HAVE_LCD_COLOR) 624#if defined(HAVE_LCD_ENABLE) && defined(HAVE_LCD_COLOR)
627 rb->lcd_set_enable_hook(NULL); 625 rb->lcd_set_enable_hook(NULL);
628#endif 626#endif
@@ -631,7 +629,7 @@ static void wvs_backlight_on_video_mode(bool video_on)
631 rb->lcd_set_enable_hook(wvs_lcd_enable_hook); 629 rb->lcd_set_enable_hook(wvs_lcd_enable_hook);
632#endif 630#endif
633 /* Revert to user's backlight settings */ 631 /* Revert to user's backlight settings */
634 backlight_use_settings(rb); 632 backlight_use_settings();
635 } 633 }
636} 634}
637 635
@@ -1625,7 +1623,7 @@ static void button_loop(void)
1625 rb->lcd_setfont(FONT_UI); 1623 rb->lcd_setfont(FONT_UI);
1626} 1624}
1627 1625
1628enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 1626enum plugin_status plugin_start(const void* parameter)
1629{ 1627{
1630 int status = PLUGIN_ERROR; /* assume failure */ 1628 int status = PLUGIN_ERROR; /* assume failure */
1631 int result; 1629 int result;
@@ -1634,17 +1632,15 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
1634 1632
1635 if (parameter == NULL) { 1633 if (parameter == NULL) {
1636 /* No file = GTFO */ 1634 /* No file = GTFO */
1637 api->splash(HZ*2, "No File"); 1635 rb->splash(HZ*2, "No File");
1638 return PLUGIN_ERROR; 1636 return PLUGIN_ERROR;
1639 } 1637 }
1640 1638
1641 /* Disable all talking before initializing IRAM */ 1639 /* Disable all talking before initializing IRAM */
1642 api->talk_disable(true); 1640 rb->talk_disable(true);
1643 1641
1644 /* Initialize IRAM - stops audio and voice as well */ 1642 /* Initialize IRAM - stops audio and voice as well */
1645 PLUGIN_IRAM_INIT(api) 1643 PLUGIN_IRAM_INIT(rb)
1646
1647 rb = api;
1648 1644
1649#ifdef HAVE_LCD_COLOR 1645#ifdef HAVE_LCD_COLOR
1650 rb->lcd_set_backdrop(NULL); 1646 rb->lcd_set_backdrop(NULL);
diff --git a/apps/plugins/mpegplayer/mpegplayer.h b/apps/plugins/mpegplayer/mpegplayer.h
index 323f8f34f1..6247a6d3e1 100644
--- a/apps/plugins/mpegplayer/mpegplayer.h
+++ b/apps/plugins/mpegplayer/mpegplayer.h
@@ -23,9 +23,6 @@
23#ifndef MPEGPLAYER_H 23#ifndef MPEGPLAYER_H
24#define MPEGPLAYER_H 24#define MPEGPLAYER_H
25 25
26/* Global API pointer */
27extern const struct plugin_api* rb;
28
29#ifdef HAVE_SCHEDULER_BOOSTCTRL 26#ifdef HAVE_SCHEDULER_BOOSTCTRL
30#define trigger_cpu_boost rb->trigger_cpu_boost 27#define trigger_cpu_boost rb->trigger_cpu_boost
31#define cancel_cpu_boost rb->cancel_cpu_boost 28#define cancel_cpu_boost rb->cancel_cpu_boost
diff --git a/apps/plugins/mpegplayer/stream_mgr.c b/apps/plugins/mpegplayer/stream_mgr.c
index 222ffb7d6b..065843a344 100644
--- a/apps/plugins/mpegplayer/stream_mgr.c
+++ b/apps/plugins/mpegplayer/stream_mgr.c
@@ -998,7 +998,7 @@ int stream_init(void)
998 long greysize; 998 long greysize;
999 999
1000 /* Greylib init handles all necessary cache alignment */ 1000 /* Greylib init handles all necessary cache alignment */
1001 if (!grey_init(rb, mem, memsize, GREY_BUFFERED|GREY_ON_COP, 1001 if (!grey_init(mem, memsize, GREY_BUFFERED|GREY_ON_COP,
1002 LCD_WIDTH, LCD_HEIGHT, &greysize)) 1002 LCD_WIDTH, LCD_HEIGHT, &greysize))
1003 { 1003 {
1004 rb->splash(HZ, "greylib init failed!"); 1004 rb->splash(HZ, "greylib init failed!");
diff --git a/apps/plugins/nim.c b/apps/plugins/nim.c
index 1500407f49..4f8f33b03b 100644
--- a/apps/plugins/nim.c
+++ b/apps/plugins/nim.c
@@ -62,8 +62,6 @@ static unsigned char str[12]; /*String use to display the first line*/
62static unsigned long hsmile,hcry,h1,h2; /*Handle for the new pattern*/ 62static unsigned long hsmile,hcry,h1,h2; /*Handle for the new pattern*/
63 63
64static bool end; /*If true game is finished*/ 64static bool end; /*If true game is finished*/
65static const struct plugin_api* rb;
66
67 65
68/*Display that the action it's impossible*/ 66/*Display that the action it's impossible*/
69static void impossible(void) 67static void impossible(void)
@@ -141,7 +139,7 @@ static void nim_exit(void *parameter)
141} 139}
142 140
143/* this is the plugin entry point */ 141/* this is the plugin entry point */
144enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 142enum plugin_status plugin_start(const void* parameter)
145{ 143{
146 int y,z,button; 144 int y,z,button;
147 int x,v,min; 145 int x,v,min;
@@ -152,10 +150,6 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
152 this to avoid the compiler warning about it */ 150 this to avoid the compiler warning about it */
153 (void)parameter; 151 (void)parameter;
154 152
155 /* if you are using a global api pointer, don't forget to copy it!
156 otherwise you will get lovely "I04: IllInstr" errors... :-) */
157 rb = api;
158
159 /*Get the pattern handle*/ 153 /*Get the pattern handle*/
160 h1=rb->lcd_get_locked_pattern(); 154 h1=rb->lcd_get_locked_pattern();
161 h2=rb->lcd_get_locked_pattern(); 155 h2=rb->lcd_get_locked_pattern();
diff --git a/apps/plugins/oscilloscope.c b/apps/plugins/oscilloscope.c
index 5915604b74..ab3c5b2e39 100644
--- a/apps/plugins/oscilloscope.c
+++ b/apps/plugins/oscilloscope.c
@@ -295,8 +295,6 @@ enum { OSC_HORIZ, OSC_VERT, MAX_OSC };
295 295
296/* global variables */ 296/* global variables */
297 297
298const struct plugin_api* rb; /* global api struct pointer */
299
300/* settings */ 298/* settings */
301struct osc_config { 299struct osc_config {
302 int delay; /* in ticks */ 300 int delay; /* in ticks */
@@ -693,10 +691,10 @@ void cleanup(void *parameter)
693 rb->lcd_set_background(LCD_DEFAULT_BG); 691 rb->lcd_set_background(LCD_DEFAULT_BG);
694#endif 692#endif
695 /* Turn on backlight timeout (revert to settings) */ 693 /* Turn on backlight timeout (revert to settings) */
696 backlight_use_settings(rb); /* backlight control in lib/helper.c */ 694 backlight_use_settings(); /* backlight control in lib/helper.c */
697} 695}
698 696
699enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 697enum plugin_status plugin_start(const void* parameter)
700{ 698{
701 int button, vol; 699 int button, vol;
702 int lastbutton = BUTTON_NONE; 700 int lastbutton = BUTTON_NONE;
@@ -705,10 +703,6 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
705 bool tell_speed; 703 bool tell_speed;
706 704
707 (void)parameter; 705 (void)parameter;
708 rb = api;
709
710 xlcd_init(rb);
711 configfile_init(rb);
712 706
713 configfile_load(cfg_filename, disk_config, 707 configfile_load(cfg_filename, disk_config,
714 sizeof(disk_config) / sizeof(disk_config[0]), 708 sizeof(disk_config) / sizeof(disk_config[0]),
@@ -724,7 +718,7 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
724#endif 718#endif
725 719
726 /* Turn off backlight timeout */ 720 /* Turn off backlight timeout */
727 backlight_force_on(rb); /* backlight control in lib/helper.c */ 721 backlight_force_on(); /* backlight control in lib/helper.c */
728 722
729 rb->lcd_getstringsize("A", NULL, &font_height); 723 rb->lcd_getstringsize("A", NULL, &font_height);
730 724
diff --git a/apps/plugins/pacbox/arcade.c b/apps/plugins/pacbox/arcade.c
index d5c73993a8..d4fa0ada20 100644
--- a/apps/plugins/pacbox/arcade.c
+++ b/apps/plugins/pacbox/arcade.c
@@ -29,8 +29,6 @@
29#include <string.h> 29#include <string.h>
30#include "plugin.h" 30#include "plugin.h"
31 31
32extern const struct plugin_api* rb;
33
34#ifndef HAVE_LCD_COLOR 32#ifndef HAVE_LCD_COLOR
35/* Convert RGB888 to 2-bit greyscale - logic taken from bmp2rb.c */ 33/* Convert RGB888 to 2-bit greyscale - logic taken from bmp2rb.c */
36static fb_data rgb_to_gray(unsigned int r, unsigned int g, unsigned int b) 34static fb_data rgb_to_gray(unsigned int r, unsigned int g, unsigned int b)
diff --git a/apps/plugins/pacbox/hardware.c b/apps/plugins/pacbox/hardware.c
index 919eb89a94..f5a7184475 100644
--- a/apps/plugins/pacbox/hardware.c
+++ b/apps/plugins/pacbox/hardware.c
@@ -27,8 +27,6 @@
27#include "plugin.h" 27#include "plugin.h"
28#include "hardware.h" 28#include "hardware.h"
29 29
30extern const struct plugin_api* rb;
31
32/* The main data for Pacman */ 30/* The main data for Pacman */
33 31
34unsigned char ram_[20*1024] IBSS_ATTR; // ROM (16K) and RAM (4K) 32unsigned char ram_[20*1024] IBSS_ATTR; // ROM (16K) and RAM (4K)
diff --git a/apps/plugins/pacbox/pacbox.c b/apps/plugins/pacbox/pacbox.c
index c4ee037b5a..ef5d4f5c0e 100644
--- a/apps/plugins/pacbox/pacbox.c
+++ b/apps/plugins/pacbox/pacbox.c
@@ -34,8 +34,6 @@
34PLUGIN_HEADER 34PLUGIN_HEADER
35PLUGIN_IRAM_DECLARE 35PLUGIN_IRAM_DECLARE
36 36
37const struct plugin_api* rb;
38
39struct pacman_settings { 37struct pacman_settings {
40 int difficulty; 38 int difficulty;
41 int numlives; 39 int numlives;
@@ -181,7 +179,7 @@ static bool pacbox_menu(void)
181 { "Quit", NULL }, 179 { "Quit", NULL },
182 }; 180 };
183 181
184 m = menu_init(rb, items, sizeof(items) / sizeof(*items), 182 m = menu_init(items, sizeof(items) / sizeof(*items),
185 NULL, NULL, NULL, NULL); 183 NULL, NULL, NULL, NULL);
186 184
187 rb->button_clear_queue(); 185 rb->button_clear_queue();
@@ -363,12 +361,11 @@ static int gameProc( void )
363 return 0; 361 return 0;
364} 362}
365 363
366enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 364enum plugin_status plugin_start(const void* parameter)
367{ 365{
368 (void)parameter; 366 (void)parameter;
369 367
370 PLUGIN_IRAM_INIT(api) 368 PLUGIN_IRAM_INIT(rb)
371 rb = api;
372 369
373#ifdef HAVE_ADJUSTABLE_CPU_FREQ 370#ifdef HAVE_ADJUSTABLE_CPU_FREQ
374 rb->cpu_boost(true); 371 rb->cpu_boost(true);
@@ -386,8 +383,6 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
386 settings.ghostnames = 0; /* Normal names */ 383 settings.ghostnames = 0; /* Normal names */
387 settings.showfps = 0; /* Do not show FPS */ 384 settings.showfps = 0; /* Do not show FPS */
388 385
389 configfile_init(rb);
390
391 if (configfile_load(SETTINGS_FILENAME, config, 386 if (configfile_load(SETTINGS_FILENAME, config,
392 sizeof(config)/sizeof(*config), 387 sizeof(config)/sizeof(*config),
393 SETTINGS_MIN_VERSION 388 SETTINGS_MIN_VERSION
diff --git a/apps/plugins/pegbox.c b/apps/plugins/pegbox.c
index 25f8adfbed..712d102a32 100644
--- a/apps/plugins/pegbox.c
+++ b/apps/plugins/pegbox.c
@@ -32,8 +32,6 @@
32#define ITEM_HEIGHT (BMPHEIGHT_pegbox_menu_items/9) 32#define ITEM_HEIGHT (BMPHEIGHT_pegbox_menu_items/9)
33#endif 33#endif
34 34
35static const struct plugin_api* rb;
36
37PLUGIN_HEADER 35PLUGIN_HEADER
38 36
39/* final game return status */ 37/* final game return status */
@@ -1436,12 +1434,11 @@ static int pegbox(struct game_context* pb) {
1436/***************************************************************************** 1434/*****************************************************************************
1437* plugin entry point. 1435* plugin entry point.
1438******************************************************************************/ 1436******************************************************************************/
1439enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) { 1437enum plugin_status plugin_start(const void* parameter) {
1440 bool exit = false; 1438 bool exit = false;
1441 struct game_context pb; 1439 struct game_context pb;
1442 1440
1443 (void)parameter; 1441 (void)parameter;
1444 rb = api;
1445 1442
1446 rb->lcd_setfont(FONT_SYSFIXED); 1443 rb->lcd_setfont(FONT_SYSFIXED);
1447#if LCD_DEPTH > 1 1444#if LCD_DEPTH > 1
diff --git a/apps/plugins/pictureflow.c b/apps/plugins/pictureflow.c
index d06f99dfd8..1489c40801 100644
--- a/apps/plugins/pictureflow.c
+++ b/apps/plugins/pictureflow.c
@@ -34,8 +34,6 @@ PLUGIN_HEADER
34 34
35/******************************* Globals ***********************************/ 35/******************************* Globals ***********************************/
36 36
37static const struct plugin_api *rb; /* global api struct pointer */
38
39const struct button_mapping *plugin_contexts[] 37const struct button_mapping *plugin_contexts[]
40= {generic_actions, generic_directions}; 38= {generic_actions, generic_directions};
41 39
@@ -1451,7 +1449,7 @@ void cleanup(void *parameter)
1451{ 1449{
1452 (void) parameter; 1450 (void) parameter;
1453 /* Turn on backlight timeout (revert to settings) */ 1451 /* Turn on backlight timeout (revert to settings) */
1454 backlight_use_settings(rb); /* backlight control in lib/helper.c */ 1452 backlight_use_settings(); /* backlight control in lib/helper.c */
1455 1453
1456 int i; 1454 int i;
1457 for (i = 0; i < slide_cache_in_use; i++) { 1455 for (i = 0; i < slide_cache_in_use; i++) {
@@ -1952,7 +1950,7 @@ int main(void)
1952 slide_cache_stack_index = min_slide_cache-1; 1950 slide_cache_stack_index = min_slide_cache-1;
1953 slide_cache_in_use = 0; 1951 slide_cache_in_use = 0;
1954#ifdef USEGSLIB 1952#ifdef USEGSLIB
1955 if (!grey_init(rb, plugin_buf, plugin_buf_size, GREY_BUFFERED|GREY_ON_COP, 1953 if (!grey_init(plugin_buf, plugin_buf_size, GREY_BUFFERED|GREY_ON_COP,
1956 LCD_WIDTH, LCD_HEIGHT, NULL)) 1954 LCD_WIDTH, LCD_HEIGHT, NULL))
1957 rb->splash(HZ, "Greylib init failed!"); 1955 rb->splash(HZ, "Greylib init failed!");
1958 grey_setfont(FONT_UI); 1956 grey_setfont(FONT_UI);
@@ -2050,7 +2048,7 @@ int main(void)
2050 rb->yield(); 2048 rb->yield();
2051 2049
2052 /*/ Handle buttons */ 2050 /*/ Handle buttons */
2053 button = pluginlib_getaction(rb, instant_update ? 0 : HZ/16, 2051 button = pluginlib_getaction(instant_update ? 0 : HZ/16,
2054 plugin_contexts, NB_ACTION_CONTEXTS); 2052 plugin_contexts, NB_ACTION_CONTEXTS);
2055 2053
2056 switch (button) { 2054 switch (button) {
@@ -2130,18 +2128,16 @@ int main(void)
2130 2128
2131/*************************** Plugin entry point ****************************/ 2129/*************************** Plugin entry point ****************************/
2132 2130
2133enum plugin_status plugin_start(const struct plugin_api *api, 2131enum plugin_status plugin_start(const void *parameter)
2134 const void *parameter)
2135{ 2132{
2136 int ret; 2133 int ret;
2137 2134
2138 rb = api; /* copy to global api pointer */
2139 (void) parameter; 2135 (void) parameter;
2140#if LCD_DEPTH > 1 2136#if LCD_DEPTH > 1
2141 rb->lcd_set_backdrop(NULL); 2137 rb->lcd_set_backdrop(NULL);
2142#endif 2138#endif
2143 /* Turn off backlight timeout */ 2139 /* Turn off backlight timeout */
2144 backlight_force_on(rb); /* backlight control in lib/helper.c */ 2140 backlight_force_on(); /* backlight control in lib/helper.c */
2145#ifdef HAVE_ADJUSTABLE_CPU_FREQ 2141#ifdef HAVE_ADJUSTABLE_CPU_FREQ
2146 rb->cpu_boost(true); 2142 rb->cpu_boost(true);
2147#endif 2143#endif
diff --git a/apps/plugins/plasma.c b/apps/plugins/plasma.c
index 8e85bf08c4..6bd4d095ce 100644
--- a/apps/plugins/plasma.c
+++ b/apps/plugins/plasma.c
@@ -38,7 +38,6 @@ PLUGIN_HEADER
38 38
39/******************************* Globals ***********************************/ 39/******************************* Globals ***********************************/
40 40
41static const struct plugin_api* rb; /* global api struct pointer */
42static unsigned char wave_array[256]; /* Pre calculated wave array */ 41static unsigned char wave_array[256]; /* Pre calculated wave array */
43#ifdef HAVE_LCD_COLOR 42#ifdef HAVE_LCD_COLOR
44static fb_data colours[256]; /* Smooth transition of shades */ 43static fb_data colours[256]; /* Smooth transition of shades */
@@ -245,7 +244,7 @@ void cleanup(void *parameter)
245 grey_release(); 244 grey_release();
246#endif 245#endif
247 /* Turn on backlight timeout (revert to settings) */ 246 /* Turn on backlight timeout (revert to settings) */
248 backlight_use_settings(rb); /* backlight control in lib/helper.c */ 247 backlight_use_settings(); /* backlight control in lib/helper.c */
249} 248}
250 249
251/* 250/*
@@ -274,7 +273,7 @@ int main(void)
274 /* get the remainder of the plugin buffer */ 273 /* get the remainder of the plugin buffer */
275 gbuf = (unsigned char *) rb->plugin_get_buffer(&gbuf_size); 274 gbuf = (unsigned char *) rb->plugin_get_buffer(&gbuf_size);
276 275
277 grey_init(rb, gbuf, gbuf_size, GREY_ON_COP, LCD_WIDTH, LCD_HEIGHT, NULL); 276 grey_init(gbuf, gbuf_size, GREY_ON_COP, LCD_WIDTH, LCD_HEIGHT, NULL);
278 /* switch on greyscale overlay */ 277 /* switch on greyscale overlay */
279 grey_show(true); 278 grey_show(true);
280#endif 279#endif
@@ -365,17 +364,16 @@ int main(void)
365 364
366/*************************** Plugin entry point ****************************/ 365/*************************** Plugin entry point ****************************/
367 366
368enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 367enum plugin_status plugin_start(const void* parameter)
369{ 368{
370 int ret; 369 int ret;
371 370
372 rb = api; /* copy to global api pointer */
373 (void)parameter; 371 (void)parameter;
374#if LCD_DEPTH > 1 372#if LCD_DEPTH > 1
375 rb->lcd_set_backdrop(NULL); 373 rb->lcd_set_backdrop(NULL);
376#endif 374#endif
377 /* Turn off backlight timeout */ 375 /* Turn off backlight timeout */
378 backlight_force_on(rb); /* backlight control in lib/helper.c */ 376 backlight_force_on(); /* backlight control in lib/helper.c */
379 377
380 ret = main(); 378 ret = main();
381 379
diff --git a/apps/plugins/pong.c b/apps/plugins/pong.c
index 220bcf641c..905e7689f8 100644
--- a/apps/plugins/pong.c
+++ b/apps/plugins/pong.c
@@ -194,8 +194,6 @@ PLUGIN_HEADER
194#endif 194#endif
195#endif 195#endif
196 196
197static const struct plugin_api* rb;
198
199struct pong { 197struct pong {
200 int ballx; /* current X*RES position of the ball */ 198 int ballx; /* current X*RES position of the ball */
201 int bally; /* current Y*RES position of the ball */ 199 int bally; /* current Y*RES position of the ball */
@@ -491,7 +489,7 @@ void showscore(struct pong *p)
491} 489}
492 490
493/* this is the plugin entry point */ 491/* this is the plugin entry point */
494enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 492enum plugin_status plugin_start(const void* parameter)
495{ 493{
496 struct pong pong; 494 struct pong pong;
497 int game = 1; 495 int game = 1;
@@ -515,8 +513,6 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
515 this to avoid the compiler warning about it */ 513 this to avoid the compiler warning about it */
516 (void)parameter; 514 (void)parameter;
517 515
518 rb = api; /* use the "standard" rb pointer */
519
520 /* Clear screen */ 516 /* Clear screen */
521 rb->lcd_clear_display(); 517 rb->lcd_clear_display();
522 518
diff --git a/apps/plugins/ppmviewer.c b/apps/plugins/ppmviewer.c
index 6db24ff804..56193b3c47 100644
--- a/apps/plugins/ppmviewer.c
+++ b/apps/plugins/ppmviewer.c
@@ -41,8 +41,6 @@ PLUGIN_HEADER
41static fb_data buffer[PPM_MAXSIZE]; 41static fb_data buffer[PPM_MAXSIZE];
42static fb_data lcd_buf[LCD_WIDTH * LCD_HEIGHT]; 42static fb_data lcd_buf[LCD_WIDTH * LCD_HEIGHT];
43 43
44static const struct plugin_api* rb; /* global api struct pointer */
45
46int ppm_read_magic_number(int fd) 44int ppm_read_magic_number(int fd)
47{ 45{
48 char i1, i2; 46 char i1, i2;
@@ -270,7 +268,7 @@ int read_ppm(int fd,
270} 268}
271 269
272/* this is the plugin entry point */ 270/* this is the plugin entry point */
273enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 271enum plugin_status plugin_start(const void* parameter)
274{ 272{
275 static char filename[MAX_PATH]; 273 static char filename[MAX_PATH];
276 int fd; 274 int fd;
@@ -285,8 +283,6 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
285 283
286 if(!parameter) return PLUGIN_ERROR; 284 if(!parameter) return PLUGIN_ERROR;
287 285
288 rb = api;
289
290 rb->strcpy(filename, parameter); 286 rb->strcpy(filename, parameter);
291 287
292 fd = rb->open(filename, O_RDONLY); 288 fd = rb->open(filename, O_RDONLY);
diff --git a/apps/plugins/properties.c b/apps/plugins/properties.c
index 0af98106d2..5fee435808 100644
--- a/apps/plugins/properties.c
+++ b/apps/plugins/properties.c
@@ -22,9 +22,7 @@
22 22
23PLUGIN_HEADER 23PLUGIN_HEADER
24 24
25static const struct plugin_api* rb; 25MEM_FUNCTION_WRAPPERS;
26
27MEM_FUNCTION_WRAPPERS(rb);
28 26
29bool its_a_dir = false; 27bool its_a_dir = false;
30 28
@@ -254,9 +252,8 @@ char * get_props(int selected_item, void* data, char *buffer, size_t buffer_len)
254 return buffer; 252 return buffer;
255} 253}
256 254
257enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 255enum plugin_status plugin_start(const void* parameter)
258{ 256{
259 rb = api;
260 struct gui_synclist properties_lists; 257 struct gui_synclist properties_lists;
261 int button; 258 int button;
262 bool prev_show_statusbar; 259 bool prev_show_statusbar;
diff --git a/apps/plugins/random_folder_advance_config.c b/apps/plugins/random_folder_advance_config.c
index 9c568df3be..8d211aaa8f 100644
--- a/apps/plugins/random_folder_advance_config.c
+++ b/apps/plugins/random_folder_advance_config.c
@@ -23,7 +23,6 @@
23 23
24PLUGIN_HEADER 24PLUGIN_HEADER
25 25
26static const struct plugin_api* rb;
27static bool abort; 26static bool abort;
28static int fd; 27static int fd;
29static int dirs_count; 28static int dirs_count;
@@ -327,7 +326,7 @@ int edit_list(void)
327 { "Remove Folder", NULL }, 326 { "Remove Folder", NULL },
328 { "Remove Folder Tree", NULL }, 327 { "Remove Folder Tree", NULL },
329 }; 328 };
330 m = menu_init(rb, items, sizeof(items) / sizeof(*items), 329 m = menu_init(items, sizeof(items) / sizeof(*items),
331 NULL, NULL, NULL, NULL); 330 NULL, NULL, NULL, NULL);
332 331
333 switch (menu_show(m)) 332 switch (menu_show(m))
@@ -362,7 +361,7 @@ int edit_list(void)
362 { "Save and Exit", NULL }, 361 { "Save and Exit", NULL },
363 { "Ignore Changes and Exit", NULL }, 362 { "Ignore Changes and Exit", NULL },
364 }; 363 };
365 m = menu_init(rb, items, sizeof(items) / sizeof(*items), 364 m = menu_init(items, sizeof(items) / sizeof(*items),
366 NULL, NULL, NULL, NULL); 365 NULL, NULL, NULL, NULL);
367 366
368 switch (menu_show(m)) 367 switch (menu_show(m))
@@ -484,7 +483,7 @@ int main_menu(void)
484 { "Import List From Textfile", NULL }, 483 { "Import List From Textfile", NULL },
485 { "Quit", NULL }, 484 { "Quit", NULL },
486 }; 485 };
487 m = menu_init(rb, items, sizeof(items) / sizeof(*items), 486 m = menu_init(items, sizeof(items) / sizeof(*items),
488 NULL, NULL, NULL, NULL); 487 NULL, NULL, NULL, NULL);
489 488
490 switch (menu_show(m)) 489 switch (menu_show(m))
@@ -550,11 +549,10 @@ int main_menu(void)
550 return exit?1:0; 549 return exit?1:0;
551} 550}
552 551
553enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 552enum plugin_status plugin_start(const void* parameter)
554{ 553{
555 (void)parameter; 554 (void)parameter;
556 555
557 rb = api;
558 abort = false; 556 abort = false;
559 557
560 while (!main_menu()) 558 while (!main_menu())
diff --git a/apps/plugins/reversi/reversi-game.h b/apps/plugins/reversi/reversi-game.h
index 4be91821b7..eac2f4ae3a 100644
--- a/apps/plugins/reversi/reversi-game.h
+++ b/apps/plugins/reversi/reversi-game.h
@@ -59,8 +59,6 @@ typedef struct _reversi_board_t {
59 * stored in history[1] etc. 59 * stored in history[1] etc.
60 */ 60 */
61 move_t history[BOARD_SIZE*BOARD_SIZE - INIT_STONES]; 61 move_t history[BOARD_SIZE*BOARD_SIZE - INIT_STONES];
62
63 const struct plugin_api *rb;
64} reversi_board_t; 62} reversi_board_t;
65 63
66 64
diff --git a/apps/plugins/reversi/reversi-gui.c b/apps/plugins/reversi/reversi-gui.c
index d8cdc0a952..5249a93efd 100644
--- a/apps/plugins/reversi/reversi-gui.c
+++ b/apps/plugins/reversi/reversi-gui.c
@@ -51,11 +51,6 @@ further options:
51 51
52PLUGIN_HEADER 52PLUGIN_HEADER
53 53
54/* The global api struct pointer. While not strictly necessary,
55 it's nice not to have to pass the api pointer in all function
56 calls in the plugin */
57static const struct plugin_api* rb;
58
59/* Thickness of the grid lines */ 54/* Thickness of the grid lines */
60#define LINE_THCK 1 55#define LINE_THCK 1
61 56
@@ -391,7 +386,7 @@ static bool reversi_gui_menu(void) {
391 { "Quit", NULL }, 386 { "Quit", NULL },
392 }; 387 };
393 388
394 m = menu_init(rb, items, sizeof(items) / sizeof(*items), 389 m = menu_init(items, sizeof(items) / sizeof(*items),
395 NULL, NULL, NULL, NULL); 390 NULL, NULL, NULL, NULL);
396 391
397 result = menu_show(m); 392 result = menu_show(m);
@@ -553,7 +548,7 @@ static void reversi_gui_move_cursor(int new_row, int new_col) {
553 548
554 549
555/* plugin entry point */ 550/* plugin entry point */
556enum plugin_status plugin_start(const struct plugin_api *api, const void *parameter) { 551enum plugin_status plugin_start(const void *parameter) {
557 bool exit, draw_screen; 552 bool exit, draw_screen;
558 int button; 553 int button;
559 int lastbutton = BUTTON_NONE; 554 int lastbutton = BUTTON_NONE;
@@ -561,10 +556,6 @@ enum plugin_status plugin_start(const struct plugin_api *api, const void *parame
561 int w_cnt, b_cnt; 556 int w_cnt, b_cnt;
562 char msg_buf[30]; 557 char msg_buf[30];
563 558
564 /* plugin init */
565 rb = api;
566 /* end of plugin init */
567
568#if LCD_DEPTH > 1 559#if LCD_DEPTH > 1
569 rb->lcd_set_backdrop(NULL); 560 rb->lcd_set_backdrop(NULL);
570 rb->lcd_set_foreground(LCD_BLACK); 561 rb->lcd_set_foreground(LCD_BLACK);
@@ -574,7 +565,6 @@ enum plugin_status plugin_start(const struct plugin_api *api, const void *parame
574 /* Avoid compiler warnings */ 565 /* Avoid compiler warnings */
575 (void)parameter; 566 (void)parameter;
576 567
577 game.rb = rb;
578 rb->srand(*rb->current_tick); /* Some AIs use rand() */ 568 rb->srand(*rb->current_tick); /* Some AIs use rand() */
579 white_strategy = &strategy_human; 569 white_strategy = &strategy_human;
580 black_strategy = &strategy_human; 570 black_strategy = &strategy_human;
diff --git a/apps/plugins/reversi/reversi-strategy-naive.c b/apps/plugins/reversi/reversi-strategy-naive.c
index 95d5e6010d..37a25d10da 100644
--- a/apps/plugins/reversi/reversi-strategy-naive.c
+++ b/apps/plugins/reversi/reversi-strategy-naive.c
@@ -32,7 +32,7 @@ static move_t naive_move_func(const reversi_board_t *game, int player) {
32 int row = 0; 32 int row = 0;
33 int col = 0; 33 int col = 0;
34 if(!num_moves) return MOVE_INVALID; 34 if(!num_moves) return MOVE_INVALID;
35 r = game->rb->rand()%num_moves; 35 r = rb->rand()%num_moves;
36 while(true) { 36 while(true) {
37 if(reversi_is_valid_move(game, row, col, player)) { 37 if(reversi_is_valid_move(game, row, col, player)) {
38 r--; 38 r--;
diff --git a/apps/plugins/reversi/reversi-strategy-simple.c b/apps/plugins/reversi/reversi-strategy-simple.c
index 326fa3f7ef..fdf34f505b 100644
--- a/apps/plugins/reversi/reversi-strategy-simple.c
+++ b/apps/plugins/reversi/reversi-strategy-simple.c
@@ -31,11 +31,10 @@
31static void reversi_copy_board(reversi_board_t *dst, 31static void reversi_copy_board(reversi_board_t *dst,
32 const reversi_board_t *src) { 32 const reversi_board_t *src) {
33 int i; 33 int i;
34 dst->rb = src->rb; 34 rb->memcpy(dst->history,src->history,
35 dst->rb->memcpy(dst->history,src->history,
36 (BOARD_SIZE*BOARD_SIZE - INIT_STONES)*sizeof(move_t)); 35 (BOARD_SIZE*BOARD_SIZE - INIT_STONES)*sizeof(move_t));
37 for(i=0;i<BOARD_SIZE;i++) { 36 for(i=0;i<BOARD_SIZE;i++) {
38 dst->rb->memcpy(dst->board[i],src->board[i],BOARD_SIZE*sizeof(int)); 37 rb->memcpy(dst->board[i],src->board[i],BOARD_SIZE*sizeof(int));
39 } 38 }
40} 39}
41 40
@@ -92,7 +91,7 @@ static move_t simple_move_func(const reversi_board_t *game, int player) {
92 if(!count) return MOVE_INVALID; 91 if(!count) return MOVE_INVALID;
93 92
94 /* chose one of the moves which scores highest */ 93 /* chose one of the moves which scores highest */
95 r = game->rb->rand()%count; 94 r = rb->rand()%count;
96 row = 0; 95 row = 0;
97 col = 0; 96 col = 0;
98 while(true) { 97 while(true) {
diff --git a/apps/plugins/robotfindskitten.c b/apps/plugins/robotfindskitten.c
index 58d9d12665..056b799a52 100644
--- a/apps/plugins/robotfindskitten.c
+++ b/apps/plugins/robotfindskitten.c
@@ -620,18 +620,13 @@ bool exit_rfk;
620 offset function and using that everywhere. So not right now. */ 620 offset function and using that everywhere. So not right now. */
621int screen[X_MAX + 1][Y_MAX + 1]; 621int screen[X_MAX + 1][Y_MAX + 1];
622 622
623/* here is a global api struct pointer. while not strictly necessary,
624 it's nice not to have to pass the api pointer in all function calls
625 in the plugin */
626static const struct plugin_api* rb;
627
628/****************************************************************************** 623/******************************************************************************
629 * 624 *
630 * Begin meaty routines that do the dirty work. 625 * Begin meaty routines that do the dirty work.
631 * 626 *
632 *****************************************************************************/ 627 *****************************************************************************/
633 628
634MEM_FUNCTION_WRAPPERS(rb) 629MEM_FUNCTION_WRAPPERS
635 630
636static void drawchar(int x, int y, char c) 631static void drawchar(int x, int y, char c)
637{ 632{
@@ -695,7 +690,7 @@ static void play_game()
695 old_y = robot.y; 690 old_y = robot.y;
696 } 691 }
697#ifdef __PLUGINLIB_ACTIONS_H__ 692#ifdef __PLUGINLIB_ACTIONS_H__
698 input = pluginlib_getaction(rb, TIMEOUT_BLOCK, plugin_contexts, 2); 693 input = pluginlib_getaction(TIMEOUT_BLOCK, plugin_contexts, 2);
699#else 694#else
700 input = rb->button_get(true); 695 input = rb->button_get(true);
701#endif 696#endif
@@ -1037,10 +1032,9 @@ static void initialize_screen()
1037} 1032}
1038 1033
1039/* this is the plugin entry point */ 1034/* this is the plugin entry point */
1040enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 1035enum plugin_status plugin_start(const void* parameter)
1041{ 1036{
1042 (void)parameter; 1037 (void)parameter;
1043 rb = api;
1044 1038
1045 exit_rfk = false; 1039 exit_rfk = false;
1046 1040
diff --git a/apps/plugins/rockblox.c b/apps/plugins/rockblox.c
index 89971c3153..639728b370 100644
--- a/apps/plugins/rockblox.c
+++ b/apps/plugins/rockblox.c
@@ -570,9 +570,6 @@ extern const fb_data rockblox_background[];
570 */ 570 */
571 571
572 572
573/* must have variable */
574static const struct plugin_api *rb;
575
576static bool gameover = false; 573static bool gameover = false;
577/* c=current f=figure o=orientation n=next */ 574/* c=current f=figure o=orientation n=next */
578static int lines = 0, level = 0, score = 0, cx, cy, cf, co, nf; 575static int lines = 0, level = 0, score = 0, cx, cy, cf, co, nf;
@@ -1072,13 +1069,13 @@ static int rockblox_loop (void)
1072#ifdef HAS_BUTTON_HOLD 1069#ifdef HAS_BUTTON_HOLD
1073 if (rb->button_hold ()) { 1070 if (rb->button_hold ()) {
1074 /* Turn on backlight timeout (revert to settings) */ 1071 /* Turn on backlight timeout (revert to settings) */
1075 backlight_use_settings(rb); /* backlight control in lib/helper.c */ 1072 backlight_use_settings(); /* backlight control in lib/helper.c */
1076 rb->splash(0, "Paused"); 1073 rb->splash(0, "Paused");
1077 while (rb->button_hold ()) 1074 while (rb->button_hold ())
1078 rb->sleep(HZ/10); 1075 rb->sleep(HZ/10);
1079 1076
1080 /* Turn off backlight timeout */ 1077 /* Turn off backlight timeout */
1081 backlight_force_on(rb); /* backlight control in lib/helper.c */ 1078 backlight_force_on(); /* backlight control in lib/helper.c */
1082 1079
1083 /* get rid of the splash text */ 1080 /* get rid of the splash text */
1084 rb->lcd_bitmap (rockblox_background, 0, 0, LCD_WIDTH, LCD_HEIGHT); 1081 rb->lcd_bitmap (rockblox_background, 0, 0, LCD_WIDTH, LCD_HEIGHT);
@@ -1223,17 +1220,15 @@ static int rockblox_loop (void)
1223 return PLUGIN_OK; 1220 return PLUGIN_OK;
1224} 1221}
1225 1222
1226enum plugin_status plugin_start (const struct plugin_api *api, const void *parameter) 1223enum plugin_status plugin_start (const void *parameter)
1227{ 1224{
1228 int ret; 1225 int ret;
1229 1226
1230 (void) parameter; 1227 (void) parameter;
1231 rb = api;
1232 1228
1233 rb->srand (*rb->current_tick); 1229 rb->srand (*rb->current_tick);
1234 1230
1235 /* Load HighScore if any */ 1231 /* Load HighScore if any */
1236 highscore_init(rb);
1237 highscore_load(HIGH_SCORE,Highest,MAX_HIGH_SCORES); 1232 highscore_load(HIGH_SCORE,Highest,MAX_HIGH_SCORES);
1238 1233
1239#if LCD_DEPTH > 1 1234#if LCD_DEPTH > 1
@@ -1243,14 +1238,14 @@ enum plugin_status plugin_start (const struct plugin_api *api, const void *param
1243#ifdef HAVE_LCD_BITMAP 1238#ifdef HAVE_LCD_BITMAP
1244 rb->lcd_setfont (FONT_SYSFIXED); 1239 rb->lcd_setfont (FONT_SYSFIXED);
1245#else 1240#else
1246 if (!pgfx_init(rb, 4, 2)) 1241 if (!pgfx_init(4, 2))
1247 { 1242 {
1248 rb->splash(HZ*2, "Old LCD :("); 1243 rb->splash(HZ*2, "Old LCD :(");
1249 return PLUGIN_OK; 1244 return PLUGIN_OK;
1250 } 1245 }
1251#endif 1246#endif
1252 /* Turn off backlight timeout */ 1247 /* Turn off backlight timeout */
1253 backlight_force_on(rb); /* backlight control in lib/helper.c */ 1248 backlight_force_on(); /* backlight control in lib/helper.c */
1254 1249
1255 init_rockblox (); 1250 init_rockblox ();
1256 ret = rockblox_loop (); 1251 ret = rockblox_loop ();
@@ -1262,7 +1257,7 @@ enum plugin_status plugin_start (const struct plugin_api *api, const void *param
1262#endif 1257#endif
1263 /* Save user's HighScore */ 1258 /* Save user's HighScore */
1264 highscore_save(HIGH_SCORE,Highest,MAX_HIGH_SCORES); 1259 highscore_save(HIGH_SCORE,Highest,MAX_HIGH_SCORES);
1265 backlight_use_settings(rb); /* backlight control in lib/helper.c */ 1260 backlight_use_settings(); /* backlight control in lib/helper.c */
1266 1261
1267 return ret; 1262 return ret;
1268} 1263}
diff --git a/apps/plugins/rockblox1d.c b/apps/plugins/rockblox1d.c
index 7c948e2d4f..0c6186b0ff 100644
--- a/apps/plugins/rockblox1d.c
+++ b/apps/plugins/rockblox1d.c
@@ -152,8 +152,6 @@ PLUGIN_HEADER
152# define NEXT_Y (int)((LCD_HEIGHT * 0.8)/2-NEXT_H/2) 152# define NEXT_Y (int)((LCD_HEIGHT * 0.8)/2-NEXT_H/2)
153#endif 153#endif
154 154
155static const struct plugin_api* rb; /* global api struct pointer */
156
157void draw_brick(int pos, int length) { 155void draw_brick(int pos, int length) {
158 int i = pos; 156 int i = pos;
159 rb->lcd_set_drawmode(DRMODE_BG|DRMODE_INVERSEVID); 157 rb->lcd_set_drawmode(DRMODE_BG|DRMODE_INVERSEVID);
@@ -165,7 +163,7 @@ void draw_brick(int pos, int length) {
165 } 163 }
166} 164}
167 165
168enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 166enum plugin_status plugin_start(const void* parameter)
169{ 167{
170 int i; 168 int i;
171 int f_width, f_height; 169 int f_width, f_height;
@@ -184,7 +182,6 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
184 unsigned long int score = 34126; 182 unsigned long int score = 34126;
185 char score_buf[10]; 183 char score_buf[10];
186 184
187 rb = api;
188 (void)parameter; 185 (void)parameter;
189 186
190#if LCD_DEPTH > 1 187#if LCD_DEPTH > 1
diff --git a/apps/plugins/rockbox_flash.c b/apps/plugins/rockbox_flash.c
index d0dc73875e..5f2117d746 100644
--- a/apps/plugins/rockbox_flash.c
+++ b/apps/plugins/rockbox_flash.c
@@ -97,8 +97,6 @@ typedef struct
97 char name[32]; 97 char name[32];
98} tFlashInfo; 98} tFlashInfo;
99 99
100static const struct plugin_api* rb; /* here is a global api struct pointer */
101
102static UINT8* sector; /* better not place this on the stack... */ 100static UINT8* sector; /* better not place this on the stack... */
103 101
104/***************** Flash Functions *****************/ 102/***************** Flash Functions *****************/
@@ -942,12 +940,10 @@ static void DoUserDialog(char* filename)
942 940
943/***************** Plugin Entry Point *****************/ 941/***************** Plugin Entry Point *****************/
944 942
945enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 943enum plugin_status plugin_start(const void* parameter)
946{ 944{
947 int oldmode; 945 int oldmode;
948 946
949 rb = api; /* copy to global api pointer */
950
951 if (parameter == NULL) 947 if (parameter == NULL)
952 { 948 {
953 rb->splash(HZ*3, "Play .ucl file!"); 949 rb->splash(HZ*3, "Play .ucl file!");
diff --git a/apps/plugins/rockboy.c b/apps/plugins/rockboy.c
index f3d25e21cd..3f3788ea88 100644
--- a/apps/plugins/rockboy.c
+++ b/apps/plugins/rockboy.c
@@ -29,8 +29,8 @@
29PLUGIN_HEADER 29PLUGIN_HEADER
30 30
31/* this is the plugin entry point */ 31/* this is the plugin entry point */
32enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 32enum plugin_status plugin_start(const void* parameter)
33{ 33{
34 return run_overlay(api, parameter, PLUGIN_GAMES_DIR "/rockboy.ovl", "RockBoy"); 34 return run_overlay(parameter, PLUGIN_GAMES_DIR "/rockboy.ovl", "RockBoy");
35} 35}
36#endif 36#endif
diff --git a/apps/plugins/rockboy/menu.c b/apps/plugins/rockboy/menu.c
index fe0b72d133..d10e2b6e1a 100644
--- a/apps/plugins/rockboy/menu.c
+++ b/apps/plugins/rockboy/menu.c
@@ -106,7 +106,7 @@ int do_user_menu(void) {
106 106
107 pcm_init(); 107 pcm_init();
108 108
109 m = menu_init(rb,items, sizeof(items) / sizeof(*items), NULL, NULL, NULL, NULL); 109 m = menu_init(items, sizeof(items) / sizeof(*items), NULL, NULL, NULL, NULL);
110 110
111 while(!done) 111 while(!done)
112 { 112 {
@@ -314,7 +314,7 @@ static void do_slot_menu(bool is_load) {
314 for (i = 0; i < num_items; i++) 314 for (i = 0; i < num_items; i++)
315 slot_info(buf[i], 20, i); 315 slot_info(buf[i], 20, i);
316 316
317 m = menu_init(rb,items, num_items, NULL, NULL, NULL, NULL); 317 m = menu_init(items, num_items, NULL, NULL, NULL, NULL);
318 318
319 while(!done) 319 while(!done)
320 { 320 {
@@ -391,7 +391,7 @@ static void do_opt_menu(void)
391#endif 391#endif
392 }; 392 };
393 393
394 m = menu_init(rb,items, sizeof(items) / sizeof(*items), NULL, NULL, NULL, NULL); 394 m = menu_init(items, sizeof(items) / sizeof(*items), NULL, NULL, NULL, NULL);
395 395
396 options.dirty=1; /* Assume that the settings have been changed */ 396 options.dirty=1; /* Assume that the settings have been changed */
397 397
diff --git a/apps/plugins/rockboy/rockboy.c b/apps/plugins/rockboy/rockboy.c
index 6733bf8551..ae0d218ccb 100644
--- a/apps/plugins/rockboy/rockboy.c
+++ b/apps/plugins/rockboy/rockboy.c
@@ -29,10 +29,6 @@
29PLUGIN_HEADER 29PLUGIN_HEADER
30PLUGIN_IRAM_DECLARE 30PLUGIN_IRAM_DECLARE
31 31
32/* here is a global api struct pointer. while not strictly necessary,
33 it's nice not to have to pass the api pointer in all function calls
34 in the plugin */
35const struct plugin_api* rb;
36int shut,cleanshut; 32int shut,cleanshut;
37char *errormsg; 33char *errormsg;
38 34
@@ -324,13 +320,9 @@ static int gnuboy_main(const char *rom)
324} 320}
325 321
326/* this is the plugin entry point */ 322/* this is the plugin entry point */
327enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 323enum plugin_status plugin_start(const void* parameter)
328{ 324{
329 PLUGIN_IRAM_INIT(api) 325 PLUGIN_IRAM_INIT(rb)
330
331 /* if you are using a global api pointer, don't forget to copy it!
332 otherwise you will get lovely "I04: IllInstr" errors... :-) */
333 rb = api;
334 326
335 rb->lcd_setfont(0); 327 rb->lcd_setfont(0);
336 328
diff --git a/apps/plugins/rockboy/rockmacros.h b/apps/plugins/rockboy/rockmacros.h
index 34e8d0cd3f..414b889003 100644
--- a/apps/plugins/rockboy/rockmacros.h
+++ b/apps/plugins/rockboy/rockmacros.h
@@ -28,7 +28,6 @@
28#define malloc(a) my_malloc(a) 28#define malloc(a) my_malloc(a)
29void *my_malloc(size_t size); 29void *my_malloc(size_t size);
30 30
31extern const struct plugin_api* rb;
32extern int shut,cleanshut; 31extern int shut,cleanshut;
33void vid_init(void); 32void vid_init(void);
34inline void vid_begin(void); 33inline void vid_begin(void);
diff --git a/apps/plugins/rocklife.c b/apps/plugins/rocklife.c
index e22cb33cae..2d162fc595 100644
--- a/apps/plugins/rocklife.c
+++ b/apps/plugins/rocklife.c
@@ -79,7 +79,6 @@ PLUGIN_HEADER
79#define PATTERN_ACORN 3 79#define PATTERN_ACORN 3
80#define PATTERN_GLIDER_GUN 4 /* not yet implemented */ 80#define PATTERN_GLIDER_GUN 4 /* not yet implemented */
81 81
82static const struct plugin_api* rb;
83const struct button_mapping *plugin_contexts[] 82const struct button_mapping *plugin_contexts[]
84= {generic_directions, generic_actions}; 83= {generic_directions, generic_actions};
85 84
@@ -395,7 +394,7 @@ static void next_generation(char *pgrid, char *pnext_grid){
395/**********************************/ 394/**********************************/
396/* this is the plugin entry point */ 395/* this is the plugin entry point */
397/**********************************/ 396/**********************************/
398enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 397enum plugin_status plugin_start(const void* parameter)
399{ 398{
400 int button = 0; 399 int button = 0;
401 int quit = 0; 400 int quit = 0;
@@ -406,9 +405,8 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
406 char *ptemp; 405 char *ptemp;
407 406
408 (void)parameter; 407 (void)parameter;
409 rb = api;
410 408
411 backlight_force_on(rb); /* backlight control in lib/helper.c */ 409 backlight_force_on(); /* backlight control in lib/helper.c */
412#if LCD_DEPTH > 1 410#if LCD_DEPTH > 1
413 rb->lcd_set_backdrop(NULL); 411 rb->lcd_set_backdrop(NULL);
414#ifdef HAVE_LCD_COLOR 412#ifdef HAVE_LCD_COLOR
@@ -427,7 +425,7 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
427 show_grid(pgrid); 425 show_grid(pgrid);
428 426
429 while(!quit) { 427 while(!quit) {
430 button = pluginlib_getaction(rb, TIMEOUT_BLOCK, plugin_contexts, 2); 428 button = pluginlib_getaction(TIMEOUT_BLOCK, plugin_contexts, 2);
431 switch(button) { 429 switch(button) {
432 case ROCKLIFE_NEXT: 430 case ROCKLIFE_NEXT:
433 case ROCKLIFE_NEXT_REP: 431 case ROCKLIFE_NEXT_REP:
@@ -452,7 +450,7 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
452 /* show new generation */ 450 /* show new generation */
453 rb->yield(); 451 rb->yield();
454 show_grid(pgrid); 452 show_grid(pgrid);
455 button = pluginlib_getaction(rb, 0, plugin_contexts, 2); 453 button = pluginlib_getaction(0, plugin_contexts, 2);
456 switch(button) { 454 switch(button) {
457 case ROCKLIFE_PLAY_PAUSE: 455 case ROCKLIFE_PLAY_PAUSE:
458 case ROCKLIFE_QUIT: 456 case ROCKLIFE_QUIT:
@@ -489,7 +487,7 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
489 rb->yield(); 487 rb->yield();
490 } 488 }
491 489
492 backlight_use_settings(rb); /* backlight control in lib/helper.c */ 490 backlight_use_settings(); /* backlight control in lib/helper.c */
493 return PLUGIN_OK; 491 return PLUGIN_OK;
494} 492}
495 493
diff --git a/apps/plugins/rockpaint.c b/apps/plugins/rockpaint.c
index 96ae7c5af5..9cfbf7c915 100644
--- a/apps/plugins/rockpaint.c
+++ b/apps/plugins/rockpaint.c
@@ -295,9 +295,7 @@ extern int errno;
295int errno; 295int errno;
296#endif 296#endif
297 297
298static const struct plugin_api* rb; 298MEM_FUNCTION_WRAPPERS;
299
300MEM_FUNCTION_WRAPPERS(rb);
301 299
302static int drawcolor=0; /* Current color (in palette) */ 300static int drawcolor=0; /* Current color (in palette) */
303static int bgdrawcolor=9; /* Current background color (in palette) */ 301static int bgdrawcolor=9; /* Current background color (in palette) */
@@ -3009,14 +3007,11 @@ static int save_bitmap( char *file )
3009 bm.height = ROWS; 3007 bm.height = ROWS;
3010 bm.width = COLS; 3008 bm.width = COLS;
3011 bm.format = FORMAT_NATIVE; 3009 bm.format = FORMAT_NATIVE;
3012 return save_bmp_file( file, &bm, rb ); 3010 return save_bmp_file( file, &bm );
3013} 3011}
3014 3012
3015enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 3013enum plugin_status plugin_start(const void* parameter)
3016{ 3014{
3017 /** must have stuff **/
3018 rb = api;
3019
3020 rb->lcd_set_foreground(COLOR_WHITE); 3015 rb->lcd_set_foreground(COLOR_WHITE);
3021 rb->lcd_set_backdrop(NULL); 3016 rb->lcd_set_backdrop(NULL);
3022 rb->lcd_fillrect(0,0,LCD_WIDTH,LCD_HEIGHT); 3017 rb->lcd_fillrect(0,0,LCD_WIDTH,LCD_HEIGHT);
diff --git a/apps/plugins/search.c b/apps/plugins/search.c
index d1c7f041da..4c6d569806 100644
--- a/apps/plugins/search.c
+++ b/apps/plugins/search.c
@@ -24,8 +24,6 @@
24 24
25PLUGIN_HEADER 25PLUGIN_HEADER
26 26
27static const struct plugin_api* rb;
28
29#define BUFFER_SIZE 16384 27#define BUFFER_SIZE 16384
30 28
31static int fd; 29static int fd;
@@ -146,14 +144,12 @@ static bool search_init(const char* file){
146} 144}
147 145
148/* this is the plugin entry point */ 146/* this is the plugin entry point */
149enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 147enum plugin_status plugin_start(const void* parameter)
150{ 148{
151 int ok; 149 int ok;
152 const char *filename = parameter; 150 const char *filename = parameter;
153 char *p; 151 char *p;
154 152
155 rb = api;
156
157 DEBUGF("%s - %s\n", (char *)parameter, &filename[rb->strlen(filename)-4]); 153 DEBUGF("%s - %s\n", (char *)parameter, &filename[rb->strlen(filename)-4]);
158 /* Check the extension. We only allow .m3u files. */ 154 /* Check the extension. We only allow .m3u files. */
159 if(rb->strcasecmp(&filename[rb->strlen(filename)-4], ".m3u") && 155 if(rb->strcasecmp(&filename[rb->strlen(filename)-4], ".m3u") &&
diff --git a/apps/plugins/searchengine/searchengine.c b/apps/plugins/searchengine/searchengine.c
index 5b4c5e275d..ddcd0ead0d 100644
--- a/apps/plugins/searchengine/searchengine.c
+++ b/apps/plugins/searchengine/searchengine.c
@@ -28,7 +28,6 @@ PLUGIN_HEADER
28void *audio_bufferbase; 28void *audio_bufferbase;
29void *audio_bufferpointer; 29void *audio_bufferpointer;
30size_t audio_buffer_free; 30size_t audio_buffer_free;
31const struct plugin_api* rb;
32int w, h, y; 31int w, h, y;
33 32
34void *my_malloc(size_t size) 33void *my_malloc(size_t size)
@@ -58,13 +57,10 @@ void setmallocpos(void *pointer)
58} 57}
59 58
60/* this is the plugin entry point */ 59/* this is the plugin entry point */
61enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 60enum plugin_status plugin_start(const void* parameter)
62{ 61{
63 unsigned char *result,buf[500]; 62 unsigned char *result,buf[500];
64 int parsefd,hits; 63 int parsefd,hits;
65 /* if you are using a global api pointer, don't forget to copy it!
66 otherwise you will get lovely "I04: IllInstr" errors... :-) */
67 rb = api;
68 64
69 audio_bufferbase=audio_bufferpointer=0; 65 audio_bufferbase=audio_bufferpointer=0;
70 audio_buffer_free=0; 66 audio_buffer_free=0;
diff --git a/apps/plugins/searchengine/searchengine.h b/apps/plugins/searchengine/searchengine.h
index 900d4e2976..090adb7051 100644
--- a/apps/plugins/searchengine/searchengine.h
+++ b/apps/plugins/searchengine/searchengine.h
@@ -40,8 +40,6 @@ rb->lcd_update()
40rb->lcd_update() 40rb->lcd_update()
41#endif 41#endif
42 42
43extern const struct plugin_api* rb;
44
45void *my_malloc(size_t size); 43void *my_malloc(size_t size);
46void setmallocpos(void *pointer); 44void setmallocpos(void *pointer);
47 45
diff --git a/apps/plugins/settings_dumper.c b/apps/plugins/settings_dumper.c
index b9acdcf5fc..25b4098001 100644
--- a/apps/plugins/settings_dumper.c
+++ b/apps/plugins/settings_dumper.c
@@ -22,7 +22,6 @@
22 22
23PLUGIN_HEADER 23PLUGIN_HEADER
24 24
25static const struct plugin_api* rb;
26#define FILENAME "/settings_dumper.txt" 25#define FILENAME "/settings_dumper.txt"
27static int setting_count = 0; 26static int setting_count = 0;
28 27
@@ -117,14 +116,13 @@ static void write_setting(const struct settings_list *setting, int fd, unsigned
117 116
118 117
119/* this is the plugin entry point */ 118/* this is the plugin entry point */
120enum plugin_status plugin_start(const struct plugin_api* api, 119enum plugin_status plugin_start(
121 const void* parameter) 120 const void* parameter)
122{ 121{
123 const struct settings_list *list; 122 const struct settings_list *list;
124 int setting_count, i; 123 int setting_count, i;
125 int fd; 124 int fd;
126 (void)parameter; 125 (void)parameter;
127 rb = api;
128 126
129 fd = rb->open(FILENAME, O_CREAT|O_TRUNC|O_WRONLY); 127 fd = rb->open(FILENAME, O_CREAT|O_TRUNC|O_WRONLY);
130 if (fd < 0) 128 if (fd < 0)
diff --git a/apps/plugins/shortcuts/shortcuts.h b/apps/plugins/shortcuts/shortcuts.h
index 2196a75125..bfe3540c4d 100644
--- a/apps/plugins/shortcuts/shortcuts.h
+++ b/apps/plugins/shortcuts/shortcuts.h
@@ -34,8 +34,6 @@
34 34
35#define SHORTCUTS_FILENAME "/shortcuts.link" 35#define SHORTCUTS_FILENAME "/shortcuts.link"
36 36
37extern const struct plugin_api* rb;
38
39typedef struct sc_entry_s 37typedef struct sc_entry_s
40{ 38{
41 char path[MAX_PATH+1]; 39 char path[MAX_PATH+1];
diff --git a/apps/plugins/shortcuts/shortcuts_append.c b/apps/plugins/shortcuts/shortcuts_append.c
index 0d74767a87..69b2a445f3 100644
--- a/apps/plugins/shortcuts/shortcuts_append.c
+++ b/apps/plugins/shortcuts/shortcuts_append.c
@@ -51,9 +51,8 @@ bool append_entry_to_file(sc_file_t *file, char *path, bool is_dir)
51} 51}
52 52
53 53
54enum plugin_status plugin_start(const struct plugin_api* api, const void* void_parameter) 54enum plugin_status plugin_start(const void* void_parameter)
55{ 55{
56 rb = api;
57 bool found; 56 bool found;
58 bool its_a_dir; 57 bool its_a_dir;
59 58
diff --git a/apps/plugins/shortcuts/shortcuts_common.c b/apps/plugins/shortcuts/shortcuts_common.c
index 0ea18c06a2..fbf6d81d61 100644
--- a/apps/plugins/shortcuts/shortcuts_common.c
+++ b/apps/plugins/shortcuts/shortcuts_common.c
@@ -21,7 +21,7 @@
21 ****************************************************************************/ 21 ****************************************************************************/
22 22
23#include "shortcuts.h" 23#include "shortcuts.h"
24MEM_FUNCTION_WRAPPERS(rb); 24MEM_FUNCTION_WRAPPERS;
25 25
26#define SHORTCUTS_FILENAME "/shortcuts.link" 26#define SHORTCUTS_FILENAME "/shortcuts.link"
27 27
diff --git a/apps/plugins/shortcuts/shortcuts_view.c b/apps/plugins/shortcuts/shortcuts_view.c
index eb3cb9506c..d3d11f3ff3 100644
--- a/apps/plugins/shortcuts/shortcuts_view.c
+++ b/apps/plugins/shortcuts/shortcuts_view.c
@@ -198,9 +198,8 @@ bool ends_with(char *string, char *suffix)
198} 198}
199 199
200 200
201enum plugin_status plugin_start(const struct plugin_api* api, const void* void_parameter) 201enum plugin_status plugin_start(const void* void_parameter)
202{ 202{
203 rb = api;
204 bool leave_loop; 203 bool leave_loop;
205 204
206 /* This is a viewer, so a parameter must have been specified */ 205 /* This is a viewer, so a parameter must have been specified */
diff --git a/apps/plugins/sliding_puzzle.c b/apps/plugins/sliding_puzzle.c
index 7aa1ed36a8..9a46dac664 100644
--- a/apps/plugins/sliding_puzzle.c
+++ b/apps/plugins/sliding_puzzle.c
@@ -223,8 +223,6 @@ PLUGIN_HEADER
223#define IMAGE_HEIGHT BMPHEIGHT_sliding_puzzle 223#define IMAGE_HEIGHT BMPHEIGHT_sliding_puzzle
224#define IMAGE_SIZE IMAGE_WIDTH 224#define IMAGE_SIZE IMAGE_WIDTH
225 225
226static const struct plugin_api* rb;
227
228/* use a square image, (the default Archos bitmap looks square on its display) 226/* use a square image, (the default Archos bitmap looks square on its display)
229 Puzzle image dimension is min(lcd_height,lcd_width) 227 Puzzle image dimension is min(lcd_height,lcd_width)
230 4x4 is more convenient for square puzzles 228 4x4 is more convenient for square puzzles
@@ -622,13 +620,11 @@ static int puzzle_loop(void)
622 } 620 }
623} 621}
624 622
625enum plugin_status plugin_start(const struct plugin_api* api, 623enum plugin_status plugin_start(
626 const void* parameter) 624 const void* parameter)
627{ 625{
628 int i, w, h; 626 int i, w, h;
629 627
630 rb = api;
631
632 initial_bmp_path=(const char *)parameter; 628 initial_bmp_path=(const char *)parameter;
633 picmode = PICMODE_INITIAL_PICTURE; 629 picmode = PICMODE_INITIAL_PICTURE;
634 img_buf_path[0] = '\0'; 630 img_buf_path[0] = '\0';
diff --git a/apps/plugins/snake.c b/apps/plugins/snake.c
index 56e8c7854b..6d1277564b 100644
--- a/apps/plugins/snake.c
+++ b/apps/plugins/snake.c
@@ -187,7 +187,6 @@ PLUGIN_HEADER
187static int board[BOARD_WIDTH][BOARD_HEIGHT],snakelength; 187static int board[BOARD_WIDTH][BOARD_HEIGHT],snakelength;
188static unsigned int score,hiscore=0,level=1; 188static unsigned int score,hiscore=0,level=1;
189static short dir,frames,apple,dead=0; 189static short dir,frames,apple,dead=0;
190static const struct plugin_api* rb;
191 190
192void die (void) 191void die (void)
193{ 192{
@@ -445,10 +444,9 @@ void game_init(void) {
445 } 444 }
446} 445}
447 446
448enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 447enum plugin_status plugin_start(const void* parameter)
449{ 448{
450 (void)(parameter); 449 (void)(parameter);
451 rb = api;
452 450
453 game_init(); 451 game_init();
454 rb->lcd_clear_display(); 452 rb->lcd_clear_display();
diff --git a/apps/plugins/snake2.c b/apps/plugins/snake2.c
index 5b470f5f82..8cd8794057 100644
--- a/apps/plugins/snake2.c
+++ b/apps/plugins/snake2.c
@@ -399,7 +399,6 @@ static int apple;
399static int level = 4, speed = 5,dead = 0, quit = 0; 399static int level = 4, speed = 5,dead = 0, quit = 0;
400static int sillydir = 0, num_levels = 0; 400static int sillydir = 0, num_levels = 0;
401static int level_from_file = 0; 401static int level_from_file = 0;
402static const struct plugin_api* rb;
403static int headx, heady, tailx, taily, applecountdown = 5; 402static int headx, heady, tailx, taily, applecountdown = 5;
404static int game_type = 0; 403static int game_type = 0;
405static int num_apples_to_get=1; 404static int num_apples_to_get=1;
@@ -1443,10 +1442,9 @@ void game_init(void)
1443 1442
1444} 1443}
1445 1444
1446enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 1445enum plugin_status plugin_start(const void* parameter)
1447{ 1446{
1448 (void)(parameter); 1447 (void)(parameter);
1449 rb = api;
1450 1448
1451 /* Lets use the default font */ 1449 /* Lets use the default font */
1452 rb->lcd_setfont(FONT_SYSFIXED); 1450 rb->lcd_setfont(FONT_SYSFIXED);
diff --git a/apps/plugins/snow.c b/apps/plugins/snow.c
index 8e3d712f8f..4996cd3fd5 100644
--- a/apps/plugins/snow.c
+++ b/apps/plugins/snow.c
@@ -81,7 +81,6 @@ PLUGIN_HEADER
81#endif 81#endif
82 82
83static short particles[NUM_PARTICLES][2]; 83static short particles[NUM_PARTICLES][2];
84static const struct plugin_api* rb;
85 84
86#ifdef HAVE_LCD_BITMAP 85#ifdef HAVE_LCD_BITMAP
87#if LCD_WIDTH >= 160 86#if LCD_WIDTH >= 160
@@ -196,14 +195,13 @@ static void snow_init(void)
196#endif 195#endif
197} 196}
198 197
199enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 198enum plugin_status plugin_start(const void* parameter)
200{ 199{
201 int button; 200 int button;
202 (void)(parameter); 201 (void)(parameter);
203 rb = api;
204 202
205#ifdef HAVE_LCD_CHARCELLS 203#ifdef HAVE_LCD_CHARCELLS
206 if (!pgfx_init(rb, 4, 2)) 204 if (!pgfx_init(4, 2))
207 { 205 {
208 rb->splash(HZ*2, "Old LCD :("); 206 rb->splash(HZ*2, "Old LCD :(");
209 return PLUGIN_OK; 207 return PLUGIN_OK;
diff --git a/apps/plugins/sokoban.c b/apps/plugins/sokoban.c
index 98faf7961f..96dc17591c 100644
--- a/apps/plugins/sokoban.c
+++ b/apps/plugins/sokoban.c
@@ -452,8 +452,7 @@ static struct BufferedBoards {
452} buffered_boards; 452} buffered_boards;
453 453
454 454
455static const struct plugin_api* rb; 455MEM_FUNCTION_WRAPPERS;
456MEM_FUNCTION_WRAPPERS(rb);
457 456
458static char buf[ROWS*(COLS + 1)]; /* Enough for a whole board or a filename */ 457static char buf[ROWS*(COLS + 1)]; /* Enough for a whole board or a filename */
459 458
@@ -1257,7 +1256,7 @@ static int sokoban_menu(void)
1257 break; 1256 break;
1258 1257
1259 case 2: /* Audio playback control */ 1258 case 2: /* Audio playback control */
1260 playback_control(rb, NULL); 1259 playback_control(NULL);
1261 menu_quit = false; 1260 menu_quit = false;
1262 break; 1261 break;
1263 1262
@@ -1613,12 +1612,11 @@ static bool sokoban_loop(void)
1613} 1612}
1614 1613
1615 1614
1616enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 1615enum plugin_status plugin_start(const void* parameter)
1617{ 1616{
1618 int w, h; 1617 int w, h;
1619 1618
1620 (void)(parameter); 1619 (void)(parameter);
1621 rb = api;
1622 1620
1623 rb->lcd_setfont(SOKOBAN_FONT); 1621 rb->lcd_setfont(SOKOBAN_FONT);
1624 1622
diff --git a/apps/plugins/solitaire.c b/apps/plugins/solitaire.c
index 0a9bf99f51..2f5f2dc4a8 100644
--- a/apps/plugins/solitaire.c
+++ b/apps/plugins/solitaire.c
@@ -30,7 +30,6 @@
30 30
31PLUGIN_HEADER 31PLUGIN_HEADER
32 32
33static const struct plugin_api* rb;
34#define min(a,b) (a<b?a:b) 33#define min(a,b) (a<b?a:b)
35 34
36/** 35/**
@@ -795,7 +794,7 @@ int solitaire_menu(bool in_game)
795 items[i++].desc = "Quit"; 794 items[i++].desc = "Quit";
796 795
797 create_draw_option_string(); 796 create_draw_option_string();
798 m = menu_init(rb, items, i, NULL, NULL, NULL, NULL); 797 m = menu_init(items, i, NULL, NULL, NULL, NULL);
799 while (result < 0) 798 while (result < 0)
800 { 799 {
801 switch (menu_show(m)) 800 switch (menu_show(m))
@@ -831,7 +830,7 @@ int solitaire_menu(bool in_game)
831 break; 830 break;
832 831
833 case 3: 832 case 3:
834 playback_control(rb, NULL); 833 playback_control(NULL);
835 break; 834 break;
836 835
837 case 4: 836 case 4:
@@ -1904,17 +1903,15 @@ int solitaire( int skipmenu )
1904 * Plugin entry point 1903 * Plugin entry point
1905 */ 1904 */
1906 1905
1907enum plugin_status plugin_start( const struct plugin_api* api, const void* parameter ) 1906enum plugin_status plugin_start(const void* parameter )
1908{ 1907{
1909 int result; 1908 int result;
1910 1909
1911 /* plugin init */ 1910 /* plugin init */
1912 (void)parameter; 1911 (void)parameter;
1913 rb = api;
1914 1912
1915 rb->splash( HZ, "Welcome to Solitaire!" ); 1913 rb->splash( HZ, "Welcome to Solitaire!" );
1916 1914
1917 configfile_init(rb);
1918 configfile_load(CONFIG_FILENAME, config, 1915 configfile_load(CONFIG_FILENAME, config,
1919 sizeof(config) / sizeof(config[0]), CFGFILE_VERSION); 1916 sizeof(config) / sizeof(config[0]), CFGFILE_VERSION);
1920 rb->memcpy(&sol, &sol_disk, sizeof(sol)); /* copy to running config */ 1917 rb->memcpy(&sol, &sol_disk, sizeof(sol)); /* copy to running config */
diff --git a/apps/plugins/sort.c b/apps/plugins/sort.c
index 5292400b0f..24be560398 100644
--- a/apps/plugins/sort.c
+++ b/apps/plugins/sort.c
@@ -59,8 +59,6 @@
59 59
60PLUGIN_HEADER 60PLUGIN_HEADER
61 61
62static const struct plugin_api* rb;
63
64ssize_t buf_size; 62ssize_t buf_size;
65static char *filename; 63static char *filename;
66static int num_entries; 64static int num_entries;
@@ -178,15 +176,13 @@ static int write_file(void)
178 return 0; 176 return 0;
179} 177}
180 178
181enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 179enum plugin_status plugin_start(const void* parameter)
182{ 180{
183 char *buf; 181 char *buf;
184 int rc; 182 int rc;
185 183
186 filename = (char *)parameter; 184 filename = (char *)parameter;
187 185
188 rb = api;
189
190 buf = rb->plugin_get_audio_buffer((size_t *)&buf_size); /* start munching memory */ 186 buf = rb->plugin_get_audio_buffer((size_t *)&buf_size); /* start munching memory */
191 187
192 stringbuffer = buf; 188 stringbuffer = buf;
diff --git a/apps/plugins/spacerocks.c b/apps/plugins/spacerocks.c
index 6c2496a781..b4cddd9a12 100644
--- a/apps/plugins/spacerocks.c
+++ b/apps/plugins/spacerocks.c
@@ -25,7 +25,6 @@
25PLUGIN_HEADER 25PLUGIN_HEADER
26 26
27/******************************* Globals ***********************************/ 27/******************************* Globals ***********************************/
28static const struct plugin_api* rb; /* global api struct pointer */
29/* variable button definitions */ 28/* variable button definitions */
30#if CONFIG_KEYPAD == RECORDER_PAD 29#if CONFIG_KEYPAD == RECORDER_PAD
31#define AST_PAUSE BUTTON_ON 30#define AST_PAUSE BUTTON_ON
@@ -2074,11 +2073,10 @@ enum plugin_status start_game(void)
2074 } 2073 }
2075} 2074}
2076 2075
2077enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 2076enum plugin_status plugin_start(const void* parameter)
2078{ 2077{
2079 enum plugin_status retval; 2078 enum plugin_status retval;
2080 (void)(parameter); 2079 (void)(parameter);
2081 rb = api;
2082 2080
2083 game_state = ATTRACT_MODE; 2081 game_state = ATTRACT_MODE;
2084 2082
@@ -2088,12 +2086,12 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
2088 /* universal font */ 2086 /* universal font */
2089 rb->lcd_setfont(FONT_SYSFIXED); 2087 rb->lcd_setfont(FONT_SYSFIXED);
2090 /* Turn off backlight timeout */ 2088 /* Turn off backlight timeout */
2091 backlight_force_on(rb); /* backlight control in lib/helper.c */ 2089 backlight_force_on(); /* backlight control in lib/helper.c */
2092 iohiscore(); 2090 iohiscore();
2093 retval = start_game(); 2091 retval = start_game();
2094 iohiscore(); 2092 iohiscore();
2095 rb->lcd_setfont(FONT_UI); 2093 rb->lcd_setfont(FONT_UI);
2096 /* Turn on backlight timeout (revert to settings) */ 2094 /* Turn on backlight timeout (revert to settings) */
2097 backlight_use_settings(rb); /* backlight control in lib/helper.c */ 2095 backlight_use_settings(); /* backlight control in lib/helper.c */
2098 return retval; 2096 return retval;
2099} 2097}
diff --git a/apps/plugins/splitedit.c b/apps/plugins/splitedit.c
index dda46a0f29..28b4de8909 100644
--- a/apps/plugins/splitedit.c
+++ b/apps/plugins/splitedit.c
@@ -98,9 +98,6 @@ unsigned char SCALE_BMP[][13] =
98#define SE_SAVE 4 98#define SE_SAVE 4
99#define SE_COUNT 5 99#define SE_COUNT 5
100 100
101/* the global api pointer */
102static const struct plugin_api* rb;
103
104/* contains the file name of the song that is to be split */ 101/* contains the file name of the song that is to be split */
105static char path_mp3[MAX_PATH]; 102static char path_mp3[MAX_PATH];
106 103
@@ -1250,12 +1247,11 @@ unsigned long splitedit_editor(struct mp3entry * mp3_to_split,
1250 return retval; 1247 return retval;
1251} 1248}
1252 1249
1253enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 1250enum plugin_status plugin_start(const void* parameter)
1254{ 1251{
1255 struct mp3entry* mp3; 1252 struct mp3entry* mp3;
1256 1253
1257 (void)parameter; 1254 (void)parameter;
1258 rb = api;
1259 rb->lcd_clear_display(); 1255 rb->lcd_clear_display();
1260 rb->lcd_update(); 1256 rb->lcd_update();
1261 mp3 = rb->audio_current_track(); 1257 mp3 = rb->audio_current_track();
diff --git a/apps/plugins/star.c b/apps/plugins/star.c
index 2c4be27c34..fd727fa34b 100644
--- a/apps/plugins/star.c
+++ b/apps/plugins/star.c
@@ -328,8 +328,6 @@ static char board[STAR_HEIGHT][STAR_WIDTH];
328static int char_width = -1; 328static int char_width = -1;
329static int char_height = -1; 329static int char_height = -1;
330 330
331static const struct plugin_api* rb;
332
333/* this arrays contains a group of levels loaded into memory */ 331/* this arrays contains a group of levels loaded into memory */
334static unsigned char* levels = 332static unsigned char* levels =
335"****************\n" 333"****************\n"
@@ -1116,10 +1114,9 @@ static int star_menu(void)
1116/** 1114/**
1117 * Main entry point 1115 * Main entry point
1118 */ 1116 */
1119enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 1117enum plugin_status plugin_start(const void* parameter)
1120{ 1118{
1121 (void)parameter; 1119 (void)parameter;
1122 rb = api;
1123 1120
1124#if LCD_DEPTH > 1 1121#if LCD_DEPTH > 1
1125 rb->lcd_set_backdrop(NULL); 1122 rb->lcd_set_backdrop(NULL);
diff --git a/apps/plugins/starfield.c b/apps/plugins/starfield.c
index 7f39d5121b..bd75df3835 100644
--- a/apps/plugins/starfield.c
+++ b/apps/plugins/starfield.c
@@ -26,8 +26,6 @@ PLUGIN_HEADER
26 26
27/******************************* Globals ***********************************/ 27/******************************* Globals ***********************************/
28 28
29static const struct plugin_api* rb; /* global api struct pointer */
30
31/* Key assignement */ 29/* Key assignement */
32#if (CONFIG_KEYPAD == IPOD_4G_PAD) || \ 30#if (CONFIG_KEYPAD == IPOD_4G_PAD) || \
33 (CONFIG_KEYPAD == IPOD_3G_PAD) || \ 31 (CONFIG_KEYPAD == IPOD_3G_PAD) || \
@@ -188,8 +186,6 @@ static const struct plugin_api* rb; /* global api struct pointer */
188 186
189#define MSG_DISP_TIME 30 187#define MSG_DISP_TIME 30
190 188
191static const struct plugin_api* rb; /* global api struct pointer */
192
193/* 189/*
194 * Each star's stuffs 190 * Each star's stuffs
195 */ 191 */
@@ -442,7 +438,7 @@ int plugin_main(void)
442 case(STARFIELD_QUIT): 438 case(STARFIELD_QUIT):
443 case(SYS_USB_CONNECTED): 439 case(SYS_USB_CONNECTED):
444 /* Turn on backlight timeout (revert to settings) */ 440 /* Turn on backlight timeout (revert to settings) */
445 backlight_use_settings(rb); /* backlight control in lib/helper.c*/ 441 backlight_use_settings(); /* backlight control in lib/helper.c*/
446 return PLUGIN_OK; 442 return PLUGIN_OK;
447 break; 443 break;
448 } 444 }
@@ -451,14 +447,13 @@ int plugin_main(void)
451 447
452/*************************** Plugin entry point ****************************/ 448/*************************** Plugin entry point ****************************/
453 449
454enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 450enum plugin_status plugin_start(const void* parameter)
455{ 451{
456 int ret; 452 int ret;
457 453
458 rb = api; /* copy to global api pointer */
459 (void)parameter; 454 (void)parameter;
460 /* Turn off backlight timeout */ 455 /* Turn off backlight timeout */
461 backlight_force_on(rb); /* backlight control in lib/helper.c */ 456 backlight_force_on(); /* backlight control in lib/helper.c */
462 457
463 ret = plugin_main(); 458 ret = plugin_main();
464 459
diff --git a/apps/plugins/stats.c b/apps/plugins/stats.c
index ff47389e5d..95611e6f2e 100644
--- a/apps/plugins/stats.c
+++ b/apps/plugins/stats.c
@@ -22,7 +22,6 @@
22 22
23PLUGIN_HEADER 23PLUGIN_HEADER
24 24
25static const struct plugin_api* rb;
26static int files, dirs, musicfiles, largestdir; 25static int files, dirs, musicfiles, largestdir;
27static int lasttick; 26static int lasttick;
28static bool abort; 27static bool abort;
@@ -200,13 +199,12 @@ void traversedir(char* location, char* name)
200 largestdir = files_in_dir; 199 largestdir = files_in_dir;
201} 200}
202 201
203enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 202enum plugin_status plugin_start(const void* parameter)
204{ 203{
205 int button; 204 int button;
206 205
207 (void)parameter; 206 (void)parameter;
208 207
209 rb = api;
210 files = 0; 208 files = 0;
211 dirs = 0; 209 dirs = 0;
212 musicfiles = 0; 210 musicfiles = 0;
diff --git a/apps/plugins/stopwatch.c b/apps/plugins/stopwatch.c
index d53937acb2..9395dde31e 100644
--- a/apps/plugins/stopwatch.c
+++ b/apps/plugins/stopwatch.c
@@ -205,8 +205,6 @@ PLUGIN_HEADER
205#endif 205#endif
206#endif 206#endif
207 207
208static const struct plugin_api* rb;
209
210static int stopwatch = 0; 208static int stopwatch = 0;
211static long start_at = 0; 209static long start_at = 0;
212static int prev_total = 0; 210static int prev_total = 0;
@@ -331,7 +329,7 @@ void save_stopwatch(void)
331 rb->close(fd); 329 rb->close(fd);
332} 330}
333 331
334enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 332enum plugin_status plugin_start(const void* parameter)
335{ 333{
336 char buf[32]; 334 char buf[32];
337 int button; 335 int button;
@@ -341,7 +339,6 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
341 int lines; 339 int lines;
342 340
343 (void)parameter; 341 (void)parameter;
344 rb = api;
345 342
346#ifdef HAVE_LCD_BITMAP 343#ifdef HAVE_LCD_BITMAP
347 int h; 344 int h;
diff --git a/apps/plugins/sudoku/generator.c b/apps/plugins/sudoku/generator.c
index 56dce48cc2..3d37bde22a 100644
--- a/apps/plugins/sudoku/generator.c
+++ b/apps/plugins/sudoku/generator.c
@@ -35,8 +35,6 @@
35#include "sudoku.h" 35#include "sudoku.h"
36#include "templates.h" 36#include "templates.h"
37 37
38extern const struct plugin_api* rb;
39
40#define assert(x) 38#define assert(x)
41 39
42/* Common state encoding in a 32-bit integer: 40/* Common state encoding in a 32-bit integer:
diff --git a/apps/plugins/sudoku/sudoku.c b/apps/plugins/sudoku/sudoku.c
index de90de360c..88fd0bd8ec 100644
--- a/apps/plugins/sudoku/sudoku.c
+++ b/apps/plugins/sudoku/sudoku.c
@@ -78,12 +78,6 @@ Example ".ss" file, and one with a saved state:
78 78
79PLUGIN_HEADER 79PLUGIN_HEADER
80 80
81/* here is a global api struct pointer. while not strictly necessary,
82 it's nice not to have to pass the api pointer in all function calls
83 in the plugin */
84
85const struct plugin_api* rb;
86
87/* Default game - used to initialise sudoku.ss if it doesn't exist. */ 81/* Default game - used to initialise sudoku.ss if it doesn't exist. */
88static const char default_game[9][9] = 82static const char default_game[9][9] =
89{ 83{
@@ -1191,14 +1185,14 @@ bool sudoku_menu(struct sudoku_state_t* state)
1191 [SM_QUIT] = { "Quit", NULL }, 1185 [SM_QUIT] = { "Quit", NULL },
1192 }; 1186 };
1193 1187
1194 m = menu_init(rb,items, sizeof(items) / sizeof(*items), 1188 m = menu_init(items, sizeof(items) / sizeof(*items),
1195 NULL, NULL, NULL, NULL); 1189 NULL, NULL, NULL, NULL);
1196 1190
1197 result=menu_show(m); 1191 result=menu_show(m);
1198 1192
1199 switch (result) { 1193 switch (result) {
1200 case SM_AUDIO_PLAYBACK: 1194 case SM_AUDIO_PLAYBACK:
1201 playback_control(rb, NULL); 1195 playback_control(NULL);
1202 break; 1196 break;
1203 1197
1204#ifdef HAVE_LCD_COLOR 1198#ifdef HAVE_LCD_COLOR
@@ -1263,7 +1257,7 @@ int sudoku_edit_menu(struct sudoku_state_t* state)
1263 { "Quit", NULL }, 1257 { "Quit", NULL },
1264 }; 1258 };
1265 1259
1266 m = menu_init(rb,items, sizeof(items) / sizeof(*items), 1260 m = menu_init(items, sizeof(items) / sizeof(*items),
1267 NULL, NULL, NULL, NULL); 1261 NULL, NULL, NULL, NULL);
1268 1262
1269 result=menu_show(m); 1263 result=menu_show(m);
@@ -1314,7 +1308,7 @@ void move_cursor(struct sudoku_state_t* state, int newx, int newy)
1314} 1308}
1315 1309
1316/* plugin entry point */ 1310/* plugin entry point */
1317enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 1311enum plugin_status plugin_start(const void* parameter)
1318{ 1312{
1319 bool exit; 1313 bool exit;
1320 int button; 1314 int button;
@@ -1323,13 +1317,8 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
1323 int rc = PLUGIN_OK; 1317 int rc = PLUGIN_OK;
1324 long ticks; 1318 long ticks;
1325 struct sudoku_state_t state; 1319 struct sudoku_state_t state;
1326
1327 /* plugin init */
1328 rb = api;
1329 /* end of plugin init */
1330 1320
1331#if defined(HAVE_LCD_COLOR) || defined(SUDOKU_BUTTON_POSSIBLE) 1321#if defined(HAVE_LCD_COLOR) || defined(SUDOKU_BUTTON_POSSIBLE)
1332 configfile_init(rb);
1333 configfile_load(cfg_filename, disk_config, 1322 configfile_load(cfg_filename, disk_config,
1334 sizeof(disk_config) / sizeof(disk_config[0]), 1323 sizeof(disk_config) / sizeof(disk_config[0]),
1335 CFGFILE_MINVERSION); 1324 CFGFILE_MINVERSION);
diff --git a/apps/plugins/superdom.c b/apps/plugins/superdom.c
index 652b474336..5d9cf7ff00 100644
--- a/apps/plugins/superdom.c
+++ b/apps/plugins/superdom.c
@@ -20,7 +20,6 @@
20 ****************************************************************************/ 20 ****************************************************************************/
21#include "plugin.h" 21#include "plugin.h"
22PLUGIN_HEADER 22PLUGIN_HEADER
23static const struct plugin_api* rb;
24 23
25extern const fb_data superdom_boarditems[]; 24extern const fb_data superdom_boarditems[];
26char buf[255]; 25char buf[255];
@@ -2241,13 +2240,11 @@ int average_strength(bool colour) {
2241 return totalpower/100; 2240 return totalpower/100;
2242} 2241}
2243 2242
2244enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 2243enum plugin_status plugin_start(const void* parameter)
2245{ 2244{
2246 int tempmenu; 2245 int tempmenu;
2247 bool statusbar_setting; 2246 bool statusbar_setting;
2248 2247
2249 rb = api;
2250
2251#if LCD_DEPTH > 1 2248#if LCD_DEPTH > 1
2252 rb->lcd_set_backdrop(NULL); 2249 rb->lcd_set_backdrop(NULL);
2253 rb->lcd_set_foreground(LCD_BLACK); 2250 rb->lcd_set_foreground(LCD_BLACK);
diff --git a/apps/plugins/test_codec.c b/apps/plugins/test_codec.c
index aae2c1905b..48fceb9cf2 100644
--- a/apps/plugins/test_codec.c
+++ b/apps/plugins/test_codec.c
@@ -34,9 +34,7 @@ PLUGIN_HEADER
34#define TESTCODEC_EXITBUTTON BUTTON_SELECT 34#define TESTCODEC_EXITBUTTON BUTTON_SELECT
35#endif 35#endif
36 36
37static const struct plugin_api* rb; 37CACHE_FUNCTION_WRAPPERS
38
39CACHE_FUNCTION_WRAPPERS(rb)
40 38
41/* Log functions copied from test_disk.c */ 39/* Log functions copied from test_disk.c */
42static int line = 0; 40static int line = 0;
@@ -644,7 +642,7 @@ exit:
644} 642}
645 643
646/* plugin entry point */ 644/* plugin entry point */
647enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 645enum plugin_status plugin_start(const void* parameter)
648{ 646{
649 int result, selection = 0; 647 int result, selection = 0;
650 enum plugin_status res = PLUGIN_OK; 648 enum plugin_status res = PLUGIN_OK;
@@ -655,8 +653,6 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
655 char dirpath[MAX_PATH]; 653 char dirpath[MAX_PATH];
656 char filename[MAX_PATH]; 654 char filename[MAX_PATH];
657 655
658 rb = api;
659
660 if (parameter == NULL) 656 if (parameter == NULL)
661 { 657 {
662 rb->splash(HZ*2, "No File"); 658 rb->splash(HZ*2, "No File");
diff --git a/apps/plugins/test_disk.c b/apps/plugins/test_disk.c
index 085435e4c9..2fa841b314 100644
--- a/apps/plugins/test_disk.c
+++ b/apps/plugins/test_disk.c
@@ -36,7 +36,6 @@ PLUGIN_HEADER
36#endif 36#endif
37#define TEST_TIME 10 /* in seconds */ 37#define TEST_TIME 10 /* in seconds */
38 38
39static const struct plugin_api* rb;
40static unsigned char* audiobuf; 39static unsigned char* audiobuf;
41static ssize_t audiobuflen; 40static ssize_t audiobuflen;
42 41
@@ -405,7 +404,7 @@ static bool test_speed(void)
405 404
406 405
407/* this is the plugin entry point */ 406/* this is the plugin entry point */
408enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 407enum plugin_status plugin_start(const void* parameter)
409{ 408{
410 static const struct menu_item items[] = { 409 static const struct menu_item items[] = {
411 { "Disk speed", test_speed }, 410 { "Disk speed", test_speed },
@@ -416,7 +415,6 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
416 DIR *dir; 415 DIR *dir;
417 416
418 (void)parameter; 417 (void)parameter;
419 rb = api;
420 418
421 if ((dir = rb->opendir(testbasedir)) == NULL) 419 if ((dir = rb->opendir(testbasedir)) == NULL)
422 { 420 {
@@ -440,15 +438,15 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
440 rb->srand(*rb->current_tick); 438 rb->srand(*rb->current_tick);
441 439
442 /* Turn off backlight timeout */ 440 /* Turn off backlight timeout */
443 backlight_force_on(rb); /* backlight control in lib/helper.c */ 441 backlight_force_on(); /* backlight control in lib/helper.c */
444 442
445 m = menu_init(rb, items, sizeof(items) / sizeof(*items), NULL, 443 m = menu_init(items, sizeof(items) / sizeof(*items), NULL,
446 NULL, NULL, NULL); 444 NULL, NULL, NULL);
447 menu_run(m); 445 menu_run(m);
448 menu_exit(m); 446 menu_exit(m);
449 447
450 /* Turn on backlight timeout (revert to settings) */ 448 /* Turn on backlight timeout (revert to settings) */
451 backlight_use_settings(rb); /* backlight control in lib/helper.c */ 449 backlight_use_settings(); /* backlight control in lib/helper.c */
452 450
453 rb->rmdir(testbasedir); 451 rb->rmdir(testbasedir);
454 452
diff --git a/apps/plugins/test_fps.c b/apps/plugins/test_fps.c
index 6d347738b7..c688a54de0 100644
--- a/apps/plugins/test_fps.c
+++ b/apps/plugins/test_fps.c
@@ -41,8 +41,6 @@ PLUGIN_IRAM_DECLARE
41 41
42PLUGIN_HEADER 42PLUGIN_HEADER
43 43
44static const struct plugin_api* rb;
45
46/* Screen logging */ 44/* Screen logging */
47static int line; 45static int line;
48static int max_line; 46static int max_line;
@@ -286,7 +284,7 @@ static void time_greyscale(void)
286 int fps, load; 284 int fps, load;
287 285
288 gbuf = (unsigned char *) rb->plugin_get_buffer(&gbuf_size); 286 gbuf = (unsigned char *) rb->plugin_get_buffer(&gbuf_size);
289 if (!grey_init(rb, gbuf, gbuf_size, GREY_ON_COP, 287 if (!grey_init(gbuf, gbuf_size, GREY_ON_COP,
290 LCD_WIDTH, LCD_HEIGHT, NULL)) 288 LCD_WIDTH, LCD_HEIGHT, NULL))
291 { 289 {
292 log_text("greylib: out of memory."); 290 log_text("greylib: out of memory.");
@@ -334,7 +332,7 @@ static void time_greyscale(void)
334#endif 332#endif
335 333
336/* plugin entry point */ 334/* plugin entry point */
337enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 335enum plugin_status plugin_start(const void* parameter)
338{ 336{
339#ifndef SIMULATOR 337#ifndef SIMULATOR
340 char str[32]; 338 char str[32];
@@ -342,15 +340,14 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
342#endif 340#endif
343 341
344 /* standard stuff */ 342 /* standard stuff */
345 PLUGIN_IRAM_INIT(api) 343 PLUGIN_IRAM_INIT(rb)
346 (void)parameter; 344 (void)parameter;
347 rb = api;
348 345
349 log_init(); 346 log_init();
350#ifndef SIMULATOR 347#ifndef SIMULATOR
351 cpu_freq = *rb->cpu_frequency; /* remember CPU frequency */ 348 cpu_freq = *rb->cpu_frequency; /* remember CPU frequency */
352#endif 349#endif
353 backlight_force_on(rb); /* backlight control in lib/helper.c */ 350 backlight_force_on(); /* backlight control in lib/helper.c */
354 351
355 log_text("Main LCD Update"); 352 log_text("Main LCD Update");
356 time_main_update(); 353 time_main_update();
@@ -375,7 +372,7 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
375 (cpu_freq + 500000) / 1000000); 372 (cpu_freq + 500000) / 1000000);
376 log_text(str); 373 log_text(str);
377#endif 374#endif
378 backlight_use_settings(rb); /* backlight control in lib/helper.c */ 375 backlight_use_settings(); /* backlight control in lib/helper.c */
379 376
380 /* wait until user closes plugin */ 377 /* wait until user closes plugin */
381 while (rb->button_get(true) != FPS_QUIT); 378 while (rb->button_get(true) != FPS_QUIT);
diff --git a/apps/plugins/test_grey.c b/apps/plugins/test_grey.c
index 1b65c34f4e..84dcdae3e2 100644
--- a/apps/plugins/test_grey.c
+++ b/apps/plugins/test_grey.c
@@ -108,7 +108,6 @@ static const unsigned char dither_matrix[16][16] = {
108static unsigned char input_levels[STEPS+1]; 108static unsigned char input_levels[STEPS+1];
109static unsigned char lcd_levels[STEPS+1]; 109static unsigned char lcd_levels[STEPS+1];
110 110
111static const struct plugin_api* rb;
112static unsigned char *gbuf; 111static unsigned char *gbuf;
113static size_t gbuf_size = 0; 112static size_t gbuf_size = 0;
114 113
@@ -139,7 +138,7 @@ static void fill_rastered(int bx, int by, int bw, int bh, int step)
139} 138}
140 139
141/* plugin entry point */ 140/* plugin entry point */
142enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 141enum plugin_status plugin_start(const void* parameter)
143{ 142{
144 bool done = false; 143 bool done = false;
145 int cur_step = 1; 144 int cur_step = 1;
@@ -148,11 +147,10 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
148 147
149 /* standard stuff */ 148 /* standard stuff */
150 (void)parameter; 149 (void)parameter;
151 rb = api;
152 150
153 gbuf = (unsigned char *) rb->plugin_get_buffer(&gbuf_size); 151 gbuf = (unsigned char *) rb->plugin_get_buffer(&gbuf_size);
154 152
155 if (!grey_init(rb, gbuf, gbuf_size, 153 if (!grey_init(gbuf, gbuf_size,
156 GREY_BUFFERED|GREY_RAWMAPPED|GREY_ON_COP, 154 GREY_BUFFERED|GREY_RAWMAPPED|GREY_ON_COP,
157 LCD_WIDTH, LCD_HEIGHT, NULL)) 155 LCD_WIDTH, LCD_HEIGHT, NULL))
158 { 156 {
@@ -162,7 +160,7 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
162 for (i = 0; i <= STEPS; i++) 160 for (i = 0; i <= STEPS; i++)
163 input_levels[i] = lcd_levels[i] = (255 * i + (STEPS/2)) / STEPS; 161 input_levels[i] = lcd_levels[i] = (255 * i + (STEPS/2)) / STEPS;
164 162
165 backlight_force_on(rb); /* backlight control in lib/helper.c */ 163 backlight_force_on(); /* backlight control in lib/helper.c */
166 164
167 grey_set_background(0); /* set background to black */ 165 grey_set_background(0); /* set background to black */
168 grey_clear_display(); 166 grey_clear_display();
@@ -240,6 +238,6 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
240 } 238 }
241 239
242 grey_release(); 240 grey_release();
243 backlight_use_settings(rb); /* backlight control in lib/helper.c */ 241 backlight_use_settings(); /* backlight control in lib/helper.c */
244 return PLUGIN_OK; 242 return PLUGIN_OK;
245} 243}
diff --git a/apps/plugins/test_greylib_bitmap_scale.c b/apps/plugins/test_greylib_bitmap_scale.c
index 34d3cf2732..2117c6f7d4 100644
--- a/apps/plugins/test_greylib_bitmap_scale.c
+++ b/apps/plugins/test_greylib_bitmap_scale.c
@@ -35,12 +35,10 @@ GREY_INFO_STRUCT
35static unsigned char grey_bm_buf[LCD_WIDTH * LCD_HEIGHT + 35static unsigned char grey_bm_buf[LCD_WIDTH * LCD_HEIGHT +
36 BM_SCALED_SIZE(LCD_WIDTH,0,FORMAT_NATIVE,0)]; 36 BM_SCALED_SIZE(LCD_WIDTH,0,FORMAT_NATIVE,0)];
37 37
38static const struct plugin_api* rb; /* global api struct pointer */ 38MEM_FUNCTION_WRAPPERS
39
40MEM_FUNCTION_WRAPPERS(rb)
41 39
42/* this is the plugin entry point */ 40/* this is the plugin entry point */
43enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 41enum plugin_status plugin_start(const void* parameter)
44{ 42{
45 void * plugin_buf; 43 void * plugin_buf;
46 size_t plugin_buf_len; 44 size_t plugin_buf_len;
@@ -54,15 +52,8 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
54 52
55 if(!parameter) return PLUGIN_ERROR; 53 if(!parameter) return PLUGIN_ERROR;
56 54
57 rb = api;
58
59 rb->strcpy(filename, parameter); 55 rb->strcpy(filename, parameter);
60 56
61#if LCD_DEPTH == 1
62 bmp_init(rb);
63 resize_init(rb);
64#endif
65
66 ret = BMP_LOAD(filename, &grey_bm, sizeof(grey_bm_buf), 57 ret = BMP_LOAD(filename, &grey_bm, sizeof(grey_bm_buf),
67 FORMAT_NATIVE|FORMAT_RESIZE|FORMAT_KEEP_ASPECT, 58 FORMAT_NATIVE|FORMAT_RESIZE|FORMAT_KEEP_ASPECT,
68 &format_grey); 59 &format_grey);
@@ -74,7 +65,7 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
74 } 65 }
75 66
76 plugin_buf = rb->plugin_get_buffer(&plugin_buf_len); 67 plugin_buf = rb->plugin_get_buffer(&plugin_buf_len);
77 if(!grey_init(rb, plugin_buf, plugin_buf_len, 0, LCD_WIDTH, LCD_HEIGHT, 68 if(!grey_init(plugin_buf, plugin_buf_len, 0, LCD_WIDTH, LCD_HEIGHT,
78 NULL)) 69 NULL))
79 { 70 {
80 rb->splash(HZ*2,"grey init failed"); 71 rb->splash(HZ*2,"grey init failed");
diff --git a/apps/plugins/test_resize.c b/apps/plugins/test_resize.c
index e98fa80ba5..a6a183a54b 100644
--- a/apps/plugins/test_resize.c
+++ b/apps/plugins/test_resize.c
@@ -30,8 +30,6 @@
30 30
31PLUGIN_HEADER 31PLUGIN_HEADER
32 32
33static const struct plugin_api* rb;
34
35const struct button_mapping *plugin_contexts[] 33const struct button_mapping *plugin_contexts[]
36= {generic_actions, generic_directions}; 34= {generic_actions, generic_directions};
37 35
@@ -64,11 +62,10 @@ static fb_data output_bmp_data[MAX_OUTPUT_WIDTH*MAX_OUTPUT_HEIGHT];
64 62
65 63
66/* this is the plugin entry point */ 64/* this is the plugin entry point */
67enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 65enum plugin_status plugin_start(const void* parameter)
68{ 66{
69 (void)parameter; 67 (void)parameter;
70 68
71 rb = api;
72 b = rb->lcd_framebuffer; 69 b = rb->lcd_framebuffer;
73 70
74 rb->lcd_set_background(LCD_RGBPACK(0,0,0)); 71 rb->lcd_set_background(LCD_RGBPACK(0,0,0));
@@ -113,7 +110,7 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
113 output_bmp.height); 110 output_bmp.height);
114 111
115 rb->lcd_update(); 112 rb->lcd_update();
116 button = pluginlib_getaction(rb, HZ, 113 button = pluginlib_getaction(HZ,
117 plugin_contexts, NB_ACTION_CONTEXTS); 114 plugin_contexts, NB_ACTION_CONTEXTS);
118 switch (button) { 115 switch (button) {
119 case BUTTON_QUIT: 116 case BUTTON_QUIT:
diff --git a/apps/plugins/test_sampr.c b/apps/plugins/test_sampr.c
index a23b907048..edfe261ab9 100644
--- a/apps/plugins/test_sampr.c
+++ b/apps/plugins/test_sampr.c
@@ -32,8 +32,6 @@
32PLUGIN_HEADER 32PLUGIN_HEADER
33PLUGIN_IRAM_DECLARE; 33PLUGIN_IRAM_DECLARE;
34 34
35const struct plugin_api *rb;
36
37static int hw_freq IDATA_ATTR = HW_FREQ_DEFAULT; 35static int hw_freq IDATA_ATTR = HW_FREQ_DEFAULT;
38static unsigned long hw_sampr IDATA_ATTR = HW_SAMPR_DEFAULT; 36static unsigned long hw_sampr IDATA_ATTR = HW_SAMPR_DEFAULT;
39 37
@@ -275,8 +273,7 @@ static void play_tone(bool volume_set)
275 273
276/* Tests hardware sample rate switching */ 274/* Tests hardware sample rate switching */
277/* TODO: needs a volume control */ 275/* TODO: needs a volume control */
278enum plugin_status plugin_start(const struct plugin_api *api, 276enum plugin_status plugin_start(const void *parameter)
279 const void *parameter)
280{ 277{
281 enum 278 enum
282 { 279 {
@@ -304,12 +301,11 @@ enum plugin_status plugin_start(const struct plugin_api *api,
304 int m; 301 int m;
305 302
306 /* Disable all talking before initializing IRAM */ 303 /* Disable all talking before initializing IRAM */
307 api->talk_disable(true); 304 rb->talk_disable(true);
308 305
309 PLUGIN_IRAM_INIT(api); 306 PLUGIN_IRAM_INIT(rb);
310 rb = api;
311 307
312 m = menu_init(rb, items, ARRAYLEN(items), 308 m = menu_init(items, ARRAYLEN(items),
313 NULL, NULL, NULL, NULL); 309 NULL, NULL, NULL, NULL);
314 310
315 while (!exit) 311 while (!exit)
diff --git a/apps/plugins/test_scanrate.c b/apps/plugins/test_scanrate.c
index e869d3be12..2504bd36ac 100644
--- a/apps/plugins/test_scanrate.c
+++ b/apps/plugins/test_scanrate.c
@@ -113,7 +113,6 @@ PLUGIN_HEADER
113#define NEED_BOOST 113#define NEED_BOOST
114#endif 114#endif
115 115
116static const struct plugin_api* rb;
117static unsigned char bitbuffer[2][BUF_HEIGHT][BUF_WIDTH]; 116static unsigned char bitbuffer[2][BUF_HEIGHT][BUF_WIDTH];
118static int curbuf = 0; 117static int curbuf = 0;
119static int scan_rate = DEFAULT_SCAN_RATE; 118static int scan_rate = DEFAULT_SCAN_RATE;
@@ -216,10 +215,9 @@ int plugin_main(void)
216 215
217 216
218/* this is the plugin entry point */ 217/* this is the plugin entry point */
219enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 218enum plugin_status plugin_start(const void* parameter)
220{ 219{
221 (void)parameter; 220 (void)parameter;
222 rb = api;
223 return plugin_main(); 221 return plugin_main();
224} 222}
225 223
diff --git a/apps/plugins/test_touchscreen.c b/apps/plugins/test_touchscreen.c
index 84c8e96cb5..4d0c8a6744 100644
--- a/apps/plugins/test_touchscreen.c
+++ b/apps/plugins/test_touchscreen.c
@@ -30,17 +30,14 @@ PLUGIN_HEADER
30#define TOUCHSCREEN_TOGGLE BUTTON_RC_MODE 30#define TOUCHSCREEN_TOGGLE BUTTON_RC_MODE
31#endif 31#endif
32 32
33static const struct plugin_api* rb;
34
35/* plugin entry point */ 33/* plugin entry point */
36enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 34enum plugin_status plugin_start(const void* parameter)
37{ 35{
38 int button = 0; 36 int button = 0;
39 enum touchscreen_mode mode = TOUCHSCREEN_BUTTON; 37 enum touchscreen_mode mode = TOUCHSCREEN_BUTTON;
40 38
41 /* standard stuff */ 39 /* standard stuff */
42 (void)parameter; 40 (void)parameter;
43 rb = api;
44 41
45 rb->touchscreen_set_mode(mode); 42 rb->touchscreen_set_mode(mode);
46 43
diff --git a/apps/plugins/test_viewports.c b/apps/plugins/test_viewports.c
index 50a9396372..5a2ec542cc 100644
--- a/apps/plugins/test_viewports.c
+++ b/apps/plugins/test_viewports.c
@@ -23,8 +23,6 @@
23 23
24PLUGIN_HEADER 24PLUGIN_HEADER
25 25
26static const struct plugin_api* rb;
27
28#ifdef HAVE_LCD_BITMAP 26#ifdef HAVE_LCD_BITMAP
29 27
30#ifdef HAVE_LCD_COLOR 28#ifdef HAVE_LCD_COLOR
@@ -147,14 +145,12 @@ static struct viewport rvp1 =
147#endif 145#endif
148 146
149 147
150enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 148enum plugin_status plugin_start(const void* parameter)
151{ 149{
152 (void)parameter; 150 (void)parameter;
153 char buf[80]; 151 char buf[80];
154 int i,y; 152 int i,y;
155 153
156 rb = api;
157
158 rb->screens[SCREEN_MAIN]->set_viewport(&vp0); 154 rb->screens[SCREEN_MAIN]->set_viewport(&vp0);
159 rb->screens[SCREEN_MAIN]->clear_viewport(); 155 rb->screens[SCREEN_MAIN]->clear_viewport();
160 rb->screens[SCREEN_MAIN]->puts_scroll(0,0,"Viewport testing plugin - this is a scrolling title"); 156 rb->screens[SCREEN_MAIN]->puts_scroll(0,0,"Viewport testing plugin - this is a scrolling title");
@@ -262,12 +258,10 @@ static struct viewport vp2 =
262}; 258};
263 259
264 260
265enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 261enum plugin_status plugin_start(const void* parameter)
266{ 262{
267 (void)parameter; 263 (void)parameter;
268 264
269 rb = api;
270
271 rb->screens[SCREEN_MAIN]->set_viewport(&vp0); 265 rb->screens[SCREEN_MAIN]->set_viewport(&vp0);
272 rb->screens[SCREEN_MAIN]->clear_viewport(); 266 rb->screens[SCREEN_MAIN]->clear_viewport();
273 rb->screens[SCREEN_MAIN]->puts_scroll(0,0,"Rockbox"); 267 rb->screens[SCREEN_MAIN]->puts_scroll(0,0,"Rockbox");
diff --git a/apps/plugins/text_editor.c b/apps/plugins/text_editor.c
index abb278728f..f03cdcfb71 100644
--- a/apps/plugins/text_editor.c
+++ b/apps/plugins/text_editor.c
@@ -28,7 +28,6 @@
28#endif 28#endif
29#define MAX_LINE_LEN 2048 29#define MAX_LINE_LEN 2048
30PLUGIN_HEADER 30PLUGIN_HEADER
31static const struct plugin_api* rb;
32 31
33static char buffer[MAX_CHARS]; 32static char buffer[MAX_CHARS];
34static char eol[3]; 33static char eol[3];
@@ -264,7 +263,7 @@ int do_item_menu(int cur_sel, char* copy_buffer)
264 ret = MENU_RET_SAVE; 263 ret = MENU_RET_SAVE;
265 break; 264 break;
266 case 6: /* playback menu */ 265 case 6: /* playback menu */
267 playback_control(rb, NULL); 266 playback_control(NULL);
268 ret = MENU_RET_UPDATE; 267 ret = MENU_RET_UPDATE;
269 break; 268 break;
270 default: 269 default:
@@ -308,7 +307,7 @@ int hex_to_rgb(const char* hex, int* color)
308#endif /* HAVE_LCD_COLOR */ 307#endif /* HAVE_LCD_COLOR */
309 308
310/* this is the plugin entry point */ 309/* this is the plugin entry point */
311enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 310enum plugin_status plugin_start(const void* parameter)
312{ 311{
313 int fd; 312 int fd;
314 static char temp_line[MAX_LINE_LEN]; 313 static char temp_line[MAX_LINE_LEN];
@@ -324,8 +323,6 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
324 bool edit_colors_file = false; 323 bool edit_colors_file = false;
325#endif 324#endif
326 325
327 rb = api;
328
329 copy_buffer[0]='\0'; 326 copy_buffer[0]='\0';
330 prev_show_statusbar = rb->global_settings->statusbar; 327 prev_show_statusbar = rb->global_settings->statusbar;
331 rb->global_settings->statusbar = false; 328 rb->global_settings->statusbar = false;
@@ -481,7 +478,7 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
481 case 0: 478 case 0:
482 break; 479 break;
483 case 1: 480 case 1:
484 playback_control(rb, NULL); 481 playback_control(NULL);
485 break; 482 break;
486 case 2: //save to disk 483 case 2: //save to disk
487 save_changes(1); 484 save_changes(1);
diff --git a/apps/plugins/vbrfix.c b/apps/plugins/vbrfix.c
index 8313994e29..3e152be3fc 100644
--- a/apps/plugins/vbrfix.c
+++ b/apps/plugins/vbrfix.c
@@ -22,8 +22,6 @@
22 22
23PLUGIN_HEADER 23PLUGIN_HEADER
24 24
25static const struct plugin_api* rb;
26
27static char *audiobuf; 25static char *audiobuf;
28static ssize_t audiobuflen; 26static ssize_t audiobuflen;
29unsigned char xingbuf[1500]; 27unsigned char xingbuf[1500];
@@ -263,9 +261,8 @@ static bool vbr_fix(const char *selected_file)
263 return false; 261 return false;
264} 262}
265 263
266enum plugin_status plugin_start(const struct plugin_api* api, const void *parameter) 264enum plugin_status plugin_start(const void *parameter)
267{ 265{
268 rb = api;
269 266
270 if (!parameter) 267 if (!parameter)
271 return PLUGIN_ERROR; 268 return PLUGIN_ERROR;
diff --git a/apps/plugins/video.c b/apps/plugins/video.c
index a31b7c5415..bd2ddb5de6 100644
--- a/apps/plugins/video.c
+++ b/apps/plugins/video.c
@@ -143,7 +143,6 @@ typedef struct /* the little header for all audio blocks */
143 143
144/****************** globals ******************/ 144/****************** globals ******************/
145 145
146static const struct plugin_api* rb; /* here is a global api struct pointer */
147static char gPrint[32]; /* a global printf buffer, saves stack */ 146static char gPrint[32]; /* a global printf buffer, saves stack */
148 147
149 148
@@ -587,7 +586,7 @@ void Cleanup(void *fd)
587 rb->mp3_play_stop(); /* stop audio ISR */ 586 rb->mp3_play_stop(); /* stop audio ISR */
588 587
589 /* Turn on backlight timeout (revert to settings) */ 588 /* Turn on backlight timeout (revert to settings) */
590 backlight_use_settings(rb); /* backlight control in lib/helper.c */ 589 backlight_use_settings(); /* backlight control in lib/helper.c */
591 590
592 /* restore normal contrast */ 591 /* restore normal contrast */
593 rb->lcd_set_contrast(rb->global_settings->contrast); 592 rb->lcd_set_contrast(rb->global_settings->contrast);
@@ -956,7 +955,7 @@ int main(char* filename)
956 { 955 {
957 gPlay.bHasVideo = true; 956 gPlay.bHasVideo = true;
958 /* Turn off backlight timeout */ 957 /* Turn off backlight timeout */
959 backlight_force_on(rb); /* backlight control in lib/helper.c */ 958 backlight_force_on(); /* backlight control in lib/helper.c */
960 } 959 }
961 960
962 /* prepare audio playback, if contained */ 961 /* prepare audio playback, if contained */
@@ -1014,10 +1013,8 @@ int main(char* filename)
1014 1013
1015/***************** Plugin Entry Point *****************/ 1014/***************** Plugin Entry Point *****************/
1016 1015
1017enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 1016enum plugin_status plugin_start(const void* parameter)
1018{ 1017{
1019 rb = api; /* copy to global api pointer */
1020
1021 if (parameter == NULL) 1018 if (parameter == NULL)
1022 { 1019 {
1023 rb->splash(HZ*2, "Play .rvf file!"); 1020 rb->splash(HZ*2, "Play .rvf file!");
diff --git a/apps/plugins/viewer.c b/apps/plugins/viewer.c
index fd460e50e0..7e03c559f4 100644
--- a/apps/plugins/viewer.c
+++ b/apps/plugins/viewer.c
@@ -418,7 +418,6 @@ static unsigned char *screen_top_ptr;
418static unsigned char *next_screen_ptr; 418static unsigned char *next_screen_ptr;
419static unsigned char *next_screen_to_draw_ptr; 419static unsigned char *next_screen_to_draw_ptr;
420static unsigned char *next_line_ptr; 420static unsigned char *next_line_ptr;
421static const struct plugin_api* rb;
422#ifdef HAVE_LCD_BITMAP 421#ifdef HAVE_LCD_BITMAP
423static struct font *pf; 422static struct font *pf;
424#endif 423#endif
@@ -1451,7 +1450,7 @@ static bool viewer_options_menu(void)
1451 {"Scroll Mode", scroll_mode_setting}, 1450 {"Scroll Mode", scroll_mode_setting},
1452 {"Auto-Scroll Speed", autoscroll_speed_setting }, 1451 {"Auto-Scroll Speed", autoscroll_speed_setting },
1453 }; 1452 };
1454 m = menu_init(rb, items, sizeof(items) / sizeof(*items), 1453 m = menu_init(items, sizeof(items) / sizeof(*items),
1455 NULL, NULL, NULL, NULL); 1454 NULL, NULL, NULL, NULL);
1456 1455
1457 result = menu_run(m); 1456 result = menu_run(m);
@@ -1475,7 +1474,7 @@ static void viewer_menu(void)
1475 {"Return", NULL }, 1474 {"Return", NULL },
1476 }; 1475 };
1477 1476
1478 m = menu_init(rb, items, sizeof(items) / sizeof(*items), NULL, NULL, NULL, NULL); 1477 m = menu_init(items, sizeof(items) / sizeof(*items), NULL, NULL, NULL, NULL);
1479 result=menu_show(m); 1478 result=menu_show(m);
1480 switch (result) 1479 switch (result)
1481 { 1480 {
@@ -1488,7 +1487,7 @@ static void viewer_menu(void)
1488 done = viewer_options_menu(); 1487 done = viewer_options_menu();
1489 break; 1488 break;
1490 case 2: /* playback control */ 1489 case 2: /* playback control */
1491 playback_control(rb, NULL); 1490 playback_control(NULL);
1492 break; 1491 break;
1493 case 3: /* return */ 1492 case 3: /* return */
1494 break; 1493 break;
@@ -1497,14 +1496,13 @@ static void viewer_menu(void)
1497 viewer_draw(col); 1496 viewer_draw(col);
1498} 1497}
1499 1498
1500enum plugin_status plugin_start(const struct plugin_api* api, const void* file) 1499enum plugin_status plugin_start(const void* file)
1501{ 1500{
1502 int button, i, ok; 1501 int button, i, ok;
1503 int lastbutton = BUTTON_NONE; 1502 int lastbutton = BUTTON_NONE;
1504 bool autoscroll = false; 1503 bool autoscroll = false;
1505 long old_tick; 1504 long old_tick;
1506 1505
1507 rb = api;
1508 old_tick = *rb->current_tick; 1506 old_tick = *rb->current_tick;
1509 1507
1510 /* get the plugin buffer */ 1508 /* get the plugin buffer */
diff --git a/apps/plugins/vu_meter.c b/apps/plugins/vu_meter.c
index bedf0ddc35..007be361b2 100644
--- a/apps/plugins/vu_meter.c
+++ b/apps/plugins/vu_meter.c
@@ -293,8 +293,6 @@ PLUGIN_HEADER
293#endif 293#endif
294#endif 294#endif
295 295
296const struct plugin_api* rb;
297
298#if defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC) 296#if defined(SIMULATOR) && (CONFIG_CODEC != SWCODEC)
299#define mas_codec_readreg(x) rand()%MAX_PEAK 297#define mas_codec_readreg(x) rand()%MAX_PEAK
300#endif 298#endif
@@ -727,12 +725,11 @@ void digital_meter(void) {
727 rb->lcd_hline(0,LCD_WIDTH-1,half_height+3); 725 rb->lcd_hline(0,LCD_WIDTH-1,half_height+3);
728} 726}
729 727
730enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) { 728enum plugin_status plugin_start(const void* parameter) {
731 int button; 729 int button;
732 int lastbutton = BUTTON_NONE; 730 int lastbutton = BUTTON_NONE;
733 731
734 (void) parameter; 732 (void) parameter;
735 rb = api;
736 733
737 calc_scales(); 734 calc_scales();
738 735
diff --git a/apps/plugins/wav2wv.c b/apps/plugins/wav2wv.c
index 1a37ee22ec..a1d4e630b8 100644
--- a/apps/plugins/wav2wv.c
+++ b/apps/plugins/wav2wv.c
@@ -29,8 +29,6 @@ PLUGIN_HEADER
29 29
30#define SAMPLES_PER_BLOCK 22050 30#define SAMPLES_PER_BLOCK 22050
31 31
32static const struct plugin_api* rb;
33
34void *memset(void *s, int c, size_t n) { 32void *memset(void *s, int c, size_t n) {
35 return(rb->memset(s,c,n)); 33 return(rb->memset(s,c,n));
36} 34}
@@ -287,19 +285,8 @@ static int wav2wv(const char *infile)
287 return error; 285 return error;
288} 286}
289 287
290enum plugin_status plugin_start(const struct plugin_api* api, const void *parameter) 288enum plugin_status plugin_start(const void *parameter)
291{ 289{
292#ifdef RB_PROFILE
293 /* This doesn't start profiling or anything, it just gives the
294 * profiling functions that are compiled in someplace to call,
295 * this is needed here to let this compile with profiling support
296 * since it calls code from a codec that is compiled with profiling
297 * support */
298 profile_init(api);
299#endif
300
301 rb = api;
302
303 if (!parameter) 290 if (!parameter)
304 return PLUGIN_ERROR; 291 return PLUGIN_ERROR;
305 292
diff --git a/apps/plugins/wavplay.c b/apps/plugins/wavplay.c
index dc0992abac..50b671f52c 100644
--- a/apps/plugins/wavplay.c
+++ b/apps/plugins/wavplay.c
@@ -3137,8 +3137,6 @@ void dma_end_isr(void) __attribute__((interrupt_handler));
3137 3137
3138/* variables */ 3138/* variables */
3139 3139
3140static const struct plugin_api *rb;
3141
3142static unsigned char *aud_buf; 3140static unsigned char *aud_buf;
3143static ssize_t aud_size; 3141static ssize_t aud_size;
3144static unsigned char *plug_buf; 3142static unsigned char *plug_buf;
@@ -3649,12 +3647,10 @@ int play_file(char* filename)
3649} 3647}
3650 3648
3651/* plugin entry point */ 3649/* plugin entry point */
3652enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 3650enum plugin_status plugin_start(const void* parameter)
3653{ 3651{
3654 ssize_t buf_size; 3652 ssize_t buf_size;
3655 3653
3656 rb = api;
3657
3658 if (!parameter) 3654 if (!parameter)
3659 { 3655 {
3660 rb->splash(HZ, "Play WAV file!"); 3656 rb->splash(HZ, "Play WAV file!");
diff --git a/apps/plugins/wavrecord.c b/apps/plugins/wavrecord.c
index c26e2c4973..69d243e12b 100644
--- a/apps/plugins/wavrecord.c
+++ b/apps/plugins/wavrecord.c
@@ -3172,10 +3172,6 @@ enum {
3172 3172
3173void rec_tick(void) __attribute__((interrupt_handler)); 3173void rec_tick(void) __attribute__((interrupt_handler));
3174 3174
3175/* variables */
3176
3177static const struct plugin_api *rb;
3178
3179/* settings */ 3175/* settings */
3180struct rec_config { 3176struct rec_config {
3181 int samplerate; /* index */ 3177 int samplerate; /* index */
@@ -3749,7 +3745,7 @@ static int recording_menu(void)
3749} 3745}
3750 3746
3751/* plugin entry point */ 3747/* plugin entry point */
3752enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 3748enum plugin_status plugin_start(const void* parameter)
3753{ 3749{
3754 ssize_t buf_size; 3750 ssize_t buf_size;
3755 int align; 3751 int align;
@@ -3757,7 +3753,6 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
3757 const char *recbasedir; 3753 const char *recbasedir;
3758 3754
3759 (void)parameter; 3755 (void)parameter;
3760 rb = api;
3761 3756
3762 plug_buf = rb->plugin_get_buffer(&buf_size); 3757 plug_buf = rb->plugin_get_buffer(&buf_size);
3763 if (buf_size < 6700) /* needed for i2c transfer */ 3758 if (buf_size < 6700) /* needed for i2c transfer */
@@ -3784,7 +3779,6 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
3784 aud_size -= align; 3779 aud_size -= align;
3785 aud_size &= ~3; 3780 aud_size &= ~3;
3786 3781
3787 configfile_init(rb);
3788 configfile_load(cfg_filename, disk_config, 3782 configfile_load(cfg_filename, disk_config,
3789 sizeof(disk_config) / sizeof(disk_config[0]), 3783 sizeof(disk_config) / sizeof(disk_config[0]),
3790 CFGFILE_MINVERSION); 3784 CFGFILE_MINVERSION);
diff --git a/apps/plugins/wavview.c b/apps/plugins/wavview.c
index 7a26a3911f..9de59a2525 100644
--- a/apps/plugins/wavview.c
+++ b/apps/plugins/wavview.c
@@ -22,8 +22,6 @@
22 22
23PLUGIN_HEADER 23PLUGIN_HEADER
24 24
25static const struct plugin_api* rb;
26
27/* temp byte buffer */ 25/* temp byte buffer */
28uint8_t samples[10 * 1024]; /* read 10KB at the time */ 26uint8_t samples[10 * 1024]; /* read 10KB at the time */
29 27
@@ -354,12 +352,11 @@ void show_help(void)
354 rb->lcd_update(); 352 rb->lcd_update();
355} 353}
356 354
357enum plugin_status plugin_start(const struct plugin_api* api, const void *parameter) 355enum plugin_status plugin_start(const void *parameter)
358{ 356{
359 unsigned int quit = 0; 357 unsigned int quit = 0;
360 unsigned int action = 0; 358 unsigned int action = 0;
361 unsigned int dodisplay = 1; 359 unsigned int dodisplay = 1;
362 rb = api;
363 int retval; 360 int retval;
364 361
365 if (!parameter) 362 if (!parameter)
diff --git a/apps/plugins/wormlet.c b/apps/plugins/wormlet.c
index 42b93c2f2e..abb2653501 100644
--- a/apps/plugins/wormlet.c
+++ b/apps/plugins/wormlet.c
@@ -462,9 +462,6 @@ static int player3_dir = EAST;
462 control a worm */ 462 control a worm */
463static int players = 1; 463static int players = 1;
464 464
465/* the rockbox plugin api */
466static const struct plugin_api* rb;
467
468#define SETTINGS_VERSION 1 465#define SETTINGS_VERSION 1
469#define SETTINGS_MIN_VERSION 1 466#define SETTINGS_MIN_VERSION 1
470#define SETTINGS_FILENAME "wormlet.cfg" 467#define SETTINGS_FILENAME "wormlet.cfg"
@@ -2468,7 +2465,7 @@ bool launch_wormlet(void)
2468 rb->lcd_clear_display(); 2465 rb->lcd_clear_display();
2469 2466
2470 /* Turn off backlight timeout */ 2467 /* Turn off backlight timeout */
2471 backlight_force_on(rb); /* backlight control in lib/helper.c */ 2468 backlight_force_on(); /* backlight control in lib/helper.c */
2472 2469
2473 /* start the game */ 2470 /* start the game */
2474 while (game_result == 1) 2471 while (game_result == 1)
@@ -2478,7 +2475,7 @@ bool launch_wormlet(void)
2478 { 2475 {
2479 case 2: 2476 case 2:
2480 /* Turn on backlight timeout (revert to settings) */ 2477 /* Turn on backlight timeout (revert to settings) */
2481 backlight_use_settings(rb); /* backlight control in lib/helper.c */ 2478 backlight_use_settings(); /* backlight control in lib/helper.c */
2482 return false; 2479 return false;
2483 break; 2480 break;
2484 } 2481 }
@@ -2490,17 +2487,15 @@ bool launch_wormlet(void)
2490/** 2487/**
2491 * Main entry point 2488 * Main entry point
2492 */ 2489 */
2493enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 2490enum plugin_status plugin_start(const void* parameter)
2494{ 2491{
2495 int result; 2492 int result;
2496 int menu_quit = 0; 2493 int menu_quit = 0;
2497 int new_setting; 2494 int new_setting;
2498 2495
2499 (void)(parameter); 2496 (void)(parameter);
2500 rb = api;
2501 2497
2502 default_settings(); 2498 default_settings();
2503 configfile_init(rb);
2504 if (configfile_load(SETTINGS_FILENAME, config, 2499 if (configfile_load(SETTINGS_FILENAME, config,
2505 sizeof(config)/sizeof(*config), 2500 sizeof(config)/sizeof(*config),
2506 SETTINGS_MIN_VERSION ) < 0) 2501 SETTINGS_MIN_VERSION ) < 0)
diff --git a/apps/plugins/xobox.c b/apps/plugins/xobox.c
index 3cf66637d1..260728cb63 100644
--- a/apps/plugins/xobox.c
+++ b/apps/plugins/xobox.c
@@ -297,9 +297,7 @@ static int speed = 6; /* CYCLETIME = (11-speed)*10 ms */
297static int difficulty = 75; /* Percentage of screen that needs to be filled 297static int difficulty = 75; /* Percentage of screen that needs to be filled
298 * in order to win the game */ 298 * in order to win the game */
299 299
300static const struct plugin_api *rb; 300MEM_FUNCTION_WRAPPERS;
301
302MEM_FUNCTION_WRAPPERS(rb);
303 301
304static bool quit = false; 302static bool quit = false;
305 303
@@ -1014,12 +1012,11 @@ static int xobox_loop (void)
1014} 1012}
1015 1013
1016/* plugin main procedure */ 1014/* plugin main procedure */
1017enum plugin_status plugin_start (const struct plugin_api *api, const void *parameter) 1015enum plugin_status plugin_start (const void *parameter)
1018{ 1016{
1019 int ret = PLUGIN_OK; 1017 int ret = PLUGIN_OK;
1020 1018
1021 (void) parameter; 1019 (void) parameter;
1022 rb = api;
1023 1020
1024 rb->lcd_setfont (FONT_SYSFIXED); 1021 rb->lcd_setfont (FONT_SYSFIXED);
1025#if LCD_DEPTH>=2 1022#if LCD_DEPTH>=2
@@ -1027,7 +1024,7 @@ enum plugin_status plugin_start (const struct plugin_api *api, const void *param
1027#endif 1024#endif
1028 1025
1029 /* Turn off backlight timeout */ 1026 /* Turn off backlight timeout */
1030 backlight_force_on(rb); /* backlight control in lib/helper.c */ 1027 backlight_force_on(); /* backlight control in lib/helper.c */
1031 1028
1032 quit = false; 1029 quit = false;
1033 1030
@@ -1038,7 +1035,7 @@ enum plugin_status plugin_start (const struct plugin_api *api, const void *param
1038 } 1035 }
1039 1036
1040 /* Turn on backlight timeout (revert to settings) */ 1037 /* Turn on backlight timeout (revert to settings) */
1041 backlight_use_settings(rb); /* backlight control in lib/helper.c */ 1038 backlight_use_settings(); /* backlight control in lib/helper.c */
1042 rb->lcd_setfont (FONT_UI); 1039 rb->lcd_setfont (FONT_UI);
1043 1040
1044 return ret; 1041 return ret;
diff --git a/apps/plugins/zxbox.c b/apps/plugins/zxbox.c
index 3c1c78f9d2..3edff78554 100644
--- a/apps/plugins/zxbox.c
+++ b/apps/plugins/zxbox.c
@@ -26,8 +26,8 @@
26PLUGIN_HEADER 26PLUGIN_HEADER
27 27
28/* this is the plugin entry point */ 28/* this is the plugin entry point */
29enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 29enum plugin_status plugin_start(const void* parameter)
30{ 30{
31 return run_overlay(api, parameter, VIEWERS_DIR "/zxbox.ovl", "ZXBox"); 31 return run_overlay(parameter, VIEWERS_DIR "/zxbox.ovl", "ZXBox");
32} 32}
33#endif 33#endif
diff --git a/apps/plugins/zxbox/spmain.c b/apps/plugins/zxbox/spmain.c
index bc5df48059..e304d8b52d 100644
--- a/apps/plugins/zxbox/spmain.c
+++ b/apps/plugins/zxbox/spmain.c
@@ -98,7 +98,6 @@ int spcf_read_conf_file(const char *filename)
98 settings.frameskip = 0; 98 settings.frameskip = 0;
99 99
100 100
101 configfile_init(rb);
102 if (configfile_load(filename, config, 101 if (configfile_load(filename, config,
103 sizeof(config)/sizeof(*config), 102 sizeof(config)/sizeof(*config),
104 SETTINGS_MIN_VERSION 103 SETTINGS_MIN_VERSION
@@ -143,7 +142,7 @@ static void set_keys(void){
143 { "Map Fire/Jump key", NULL }, 142 { "Map Fire/Jump key", NULL },
144 }; 143 };
145 144
146 m = menu_init(rb,items, sizeof(items) / sizeof(*items), 145 m = menu_init(items, sizeof(items) / sizeof(*items),
147 NULL, NULL, NULL, NULL); 146 NULL, NULL, NULL, NULL);
148 147
149 rb->button_clear_queue(); 148 rb->button_clear_queue();
@@ -203,7 +202,7 @@ static void select_keymap(void){
203 { "7658S", NULL }, 202 { "7658S", NULL },
204 }; 203 };
205 204
206 m = menu_init(rb,items, sizeof(items) / sizeof(*items), 205 m = menu_init(items, sizeof(items) / sizeof(*items),
207 NULL, NULL, NULL, NULL); 206 NULL, NULL, NULL, NULL);
208 207
209 rb->button_clear_queue(); 208 rb->button_clear_queue();
@@ -268,7 +267,7 @@ static void options_menu(void){
268 }; 267 };
269 268
270 269
271 m = menu_init(rb,items, sizeof(items) / sizeof(*items), 270 m = menu_init(items, sizeof(items) / sizeof(*items),
272 NULL, NULL, NULL, NULL); 271 NULL, NULL, NULL, NULL);
273 272
274 rb->button_clear_queue(); 273 rb->button_clear_queue();
@@ -362,7 +361,7 @@ static bool zxbox_menu(void)
362 { "Quit", NULL }, 361 { "Quit", NULL },
363 }; 362 };
364 363
365 m = menu_init(rb,items, sizeof(items) / sizeof(*items), 364 m = menu_init(items, sizeof(items) / sizeof(*items),
366 NULL, NULL, NULL, NULL); 365 NULL, NULL, NULL, NULL);
367 366
368 rb->button_clear_queue(); 367 rb->button_clear_queue();
diff --git a/apps/plugins/zxbox/zxbox.c b/apps/plugins/zxbox/zxbox.c
index fbb61c1352..f33b51b9f6 100644
--- a/apps/plugins/zxbox/zxbox.c
+++ b/apps/plugins/zxbox/zxbox.c
@@ -24,8 +24,6 @@
24PLUGIN_HEADER 24PLUGIN_HEADER
25PLUGIN_IRAM_DECLARE 25PLUGIN_IRAM_DECLARE
26 26
27const struct plugin_api* rb;
28
29#include "spkey_p.h" 27#include "spkey_p.h"
30 28
31spkeyboard kb_mkey; 29spkeyboard kb_mkey;
@@ -61,11 +59,10 @@ static size_t gbuf_size = 0;
61long video_frames IBSS_ATTR = 0 ; 59long video_frames IBSS_ATTR = 0 ;
62long start_time IBSS_ATTR = 0; 60long start_time IBSS_ATTR = 0;
63 61
64enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter) 62enum plugin_status plugin_start(const void* parameter)
65{ 63{
66 PLUGIN_IRAM_INIT(api) 64 PLUGIN_IRAM_INIT(rb)
67 65
68 rb = api;
69#if LCD_DEPTH > 1 66#if LCD_DEPTH > 1
70 rb->lcd_set_backdrop(NULL); 67 rb->lcd_set_backdrop(NULL);
71#endif 68#endif
@@ -78,10 +75,10 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
78 /* get the remainder of the plugin buffer */ 75 /* get the remainder of the plugin buffer */
79 gbuf = (unsigned char *) rb->plugin_get_buffer(&gbuf_size); 76 gbuf = (unsigned char *) rb->plugin_get_buffer(&gbuf_size);
80#ifdef USE_BUFFERED_GREY 77#ifdef USE_BUFFERED_GREY
81 grey_init(rb, gbuf, gbuf_size, GREY_BUFFERED|GREY_ON_COP, LCD_WIDTH, 78 grey_init(gbuf, gbuf_size, GREY_BUFFERED|GREY_ON_COP, LCD_WIDTH,
82 LCD_HEIGHT, NULL); 79 LCD_HEIGHT, NULL);
83#else 80#else
84 grey_init(rb, gbuf, gbuf_size, GREY_ON_COP, LCD_WIDTH, LCD_HEIGHT, NULL); 81 grey_init(gbuf, gbuf_size, GREY_ON_COP, LCD_WIDTH, LCD_HEIGHT, NULL);
85#endif /* USE_BUFFERED_GREY */ 82#endif /* USE_BUFFERED_GREY */
86 /* switch on greyscale overlay */ 83 /* switch on greyscale overlay */
87 grey_show(true); 84 grey_show(true);
diff --git a/apps/plugins/zxbox/zxconfig.h b/apps/plugins/zxbox/zxconfig.h
index d0a6c5a7ea..590da99f15 100644
--- a/apps/plugins/zxbox/zxconfig.h
+++ b/apps/plugins/zxbox/zxconfig.h
@@ -5,7 +5,6 @@
5extern int load_tap; 5extern int load_tap;
6extern bool clear_kbd; 6extern bool clear_kbd;
7extern bool exit_requested; 7extern bool exit_requested;
8extern const struct plugin_api* rb;
9extern void press_key(int c); 8extern void press_key(int c);
10extern long video_frames; 9extern long video_frames;
11extern long start_time; 10extern long start_time;