New plugin loader. Solves the crashes introduced with the .bss changes while keeping the small binary size. The model & api version check is now part of the plugin loader. Codecs are not yet adapted, but the old method still works for them. Simulator plugins are not (yet) version-checked. API version numbering restarted, as this is an all-new system. Uses the target ID from configure, so don't change that too often.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@8349 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Jens Arnold 2006-01-15 18:20:18 +00:00
parent c7c9069ed4
commit a36b1d4083
70 changed files with 270 additions and 310 deletions

View file

@ -34,7 +34,7 @@ ifdef APPEXTRA
INCLUDES += $(patsubst %,-I%,$(subst :, ,$(APPEXTRA))) INCLUDES += $(patsubst %,-I%,$(subst :, ,$(APPEXTRA)))
endif endif
CFLAGS = $(GCCOPTS) $(INCLUDES) $(TARGET) $(DEFINES) \ CFLAGS = $(GCCOPTS) $(INCLUDES) $(TARGET) $(DEFINES) -DTARGET_ID=$(TARGET_ID) \
-DAPPSVERSION=\"$(VERSION)\" $(EXTRA_DEFINES) -DMEM=${MEMORYSIZE} -DAPPSVERSION=\"$(VERSION)\" $(EXTRA_DEFINES) -DMEM=${MEMORYSIZE}
OBJS := $(OBJDIR)/lang.o $(SRC:%.c=$(OBJDIR)/%.o) OBJS := $(OBJDIR)/lang.o $(SRC:%.c=$(OBJDIR)/%.o)

View file

@ -78,12 +78,7 @@ static bool plugin_loaded = false;
static int plugin_size = 0; static int plugin_size = 0;
static void (*pfn_tsr_exit)(void) = NULL; /* TSR exit callback */ static void (*pfn_tsr_exit)(void) = NULL; /* TSR exit callback */
static int plugin_test(int api_version, int model, int memsize);
static const struct plugin_api rockbox_api = { static const struct plugin_api rockbox_api = {
PLUGIN_API_VERSION,
plugin_test,
/* lcd */ /* lcd */
lcd_set_contrast, lcd_set_contrast,
@ -135,6 +130,7 @@ static const struct plugin_api rockbox_api = {
checkbox, checkbox,
font_get, font_get,
font_getstringsize, font_getstringsize,
font_get_width,
#endif #endif
backlight_on, backlight_on,
backlight_off, backlight_off,
@ -243,9 +239,18 @@ static const struct plugin_api rockbox_api = {
strcat, strcat,
memcmp, memcmp,
strcasestr, strcasestr,
/* unicode stuff */
utf8decode,
iso_decode,
utf16LEdecode,
utf16BEdecode,
utf8encode,
utf8length,
/* sound */ /* sound */
sound_set, sound_set,
sound_min,
sound_max,
#ifndef SIMULATOR #ifndef SIMULATOR
mp3_play_data, mp3_play_data,
mp3_play_pause, mp3_play_pause,
@ -307,6 +312,21 @@ static const struct plugin_api rockbox_api = {
&rundb_fd, &rundb_fd,
&rundb_initialized, &rundb_initialized,
/* menu */
menu_init,
menu_exit,
menu_show,
menu_run,
menu_cursor,
menu_description,
menu_delete,
menu_count,
menu_moveup,
menu_movedown,
menu_draw,
menu_insert,
menu_set_cursor,
/* misc */ /* misc */
srand, srand,
rand, rand,
@ -337,39 +357,13 @@ static const struct plugin_api rockbox_api = {
#endif #endif
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
read_bmp_file, read_bmp_file,
screen_dump_set_hook,
#endif #endif
show_logo, show_logo,
/* new stuff at the end, sort into place next time /* new stuff at the end, sort into place next time
the API gets incompatible */ the API gets incompatible */
menu_init,
menu_exit,
menu_show,
menu_run,
menu_cursor,
menu_description,
menu_delete,
menu_count,
menu_moveup,
menu_movedown,
menu_draw,
menu_insert,
menu_set_cursor,
#ifdef HAVE_LCD_BITMAP
screen_dump_set_hook,
font_get_width,
#endif
utf8decode,
iso_decode,
utf16LEdecode,
utf16BEdecode,
utf8encode,
utf8length,
sound_min,
sound_max,
}; };
int plugin_load(const char* plugin, void* parameter) int plugin_load(const char* plugin, void* parameter)
@ -377,7 +371,8 @@ int plugin_load(const char* plugin, void* parameter)
enum plugin_status (*plugin_start)(struct plugin_api* api, void* param); enum plugin_status (*plugin_start)(struct plugin_api* api, void* param);
int rc; int rc;
#ifndef SIMULATOR #ifndef SIMULATOR
char buf[64]; struct plugin_header header;
ssize_t readsize;
#endif #endif
int fd; int fd;
@ -408,28 +403,50 @@ int plugin_load(const char* plugin, void* parameter)
#else #else
fd = open(plugin, O_RDONLY); fd = open(plugin, O_RDONLY);
if (fd < 0) { if (fd < 0) {
snprintf(buf, sizeof buf, str(LANG_PLUGIN_CANT_OPEN), plugin); gui_syncsplash(HZ*2, true, str(LANG_PLUGIN_CANT_OPEN), plugin);
gui_syncsplash(HZ*2, true, buf);
return fd; return fd;
} }
/* zero out plugin buffer to ensure a properly zeroed bss area */ readsize = read(fd, &header, sizeof(header));
memset(pluginbuf, 0, PLUGIN_BUFFER_SIZE);
plugin_start = (void*)&pluginbuf;
plugin_size = read(fd, plugin_start, PLUGIN_BUFFER_SIZE);
close(fd); close(fd);
if (plugin_size < 0) { /* Close for now. Less code than doing it in all error checks.
/* read error */ * Would need to seek back anyway. */
snprintf(buf, sizeof buf, str(LANG_READ_FAILED), plugin);
gui_syncsplash(HZ*2, true, buf); if (readsize != sizeof(header)) {
gui_syncsplash(HZ*2, true, str(LANG_READ_FAILED), plugin);
return -1; return -1;
} }
if (plugin_size == 0) { if (header.magic != PLUGIN_MAGIC
/* loaded a 0-byte plugin, implying it's not for this model */ || header.target_id != TARGET_ID
|| header.load_addr != pluginbuf
|| header.end_addr > pluginbuf + PLUGIN_BUFFER_SIZE) {
gui_syncsplash(HZ*2, true, str(LANG_PLUGIN_WRONG_MODEL)); gui_syncsplash(HZ*2, true, str(LANG_PLUGIN_WRONG_MODEL));
return -1; return -1;
} }
if (header.api_version > PLUGIN_API_VERSION
|| header.api_version < PLUGIN_MIN_API_VERSION) {
gui_syncsplash(HZ*2, true, str(LANG_PLUGIN_WRONG_VERSION));
return -1;
}
/* zero out plugin buffer to ensure a properly zeroed bss area */
memset(pluginbuf, 0, header.end_addr - pluginbuf);
fd = open(plugin, O_RDONLY);
if (fd < 0) {
gui_syncsplash(HZ*2, true, str(LANG_PLUGIN_CANT_OPEN), plugin);
return fd;
}
readsize = read(fd, pluginbuf, PLUGIN_BUFFER_SIZE);
close(fd);
if (readsize < 0) {
/* read error */
gui_syncsplash(HZ*2, true, str(LANG_READ_FAILED), plugin);
return -1;
}
plugin_start = header.entry_point;
plugin_size = header.end_addr - header.load_addr;
#endif #endif
plugin_loaded = true; plugin_loaded = true;
@ -458,14 +475,6 @@ int plugin_load(const char* plugin, void* parameter)
case PLUGIN_USB_CONNECTED: case PLUGIN_USB_CONNECTED:
return PLUGIN_USB_CONNECTED; return PLUGIN_USB_CONNECTED;
case PLUGIN_WRONG_API_VERSION:
gui_syncsplash(HZ*2, true, str(LANG_PLUGIN_WRONG_VERSION));
break;
case PLUGIN_WRONG_MODEL:
gui_syncsplash(HZ*2, true, str(LANG_PLUGIN_WRONG_MODEL));
break;
default: default:
gui_syncsplash(HZ*2, true, str(LANG_PLUGIN_ERROR)); gui_syncsplash(HZ*2, true, str(LANG_PLUGIN_ERROR));
break; break;
@ -521,19 +530,3 @@ void plugin_tsr(void (*exit_callback)(void))
{ {
pfn_tsr_exit = exit_callback; /* remember the callback for later */ pfn_tsr_exit = exit_callback; /* remember the callback for later */
} }
static int plugin_test(int api_version, int model, int memsize)
{
if (api_version < PLUGIN_MIN_API_VERSION ||
api_version > PLUGIN_API_VERSION)
return PLUGIN_WRONG_API_VERSION;
if (model != MODEL)
return PLUGIN_WRONG_MODEL;
if (memsize != MEM)
return PLUGIN_WRONG_MODEL;
return PLUGIN_OK;
}

View file

@ -90,44 +90,23 @@
#define PREFIX(_x_) _x_ #define PREFIX(_x_) _x_
#endif #endif
#define PLUGIN_MAGIC 0x526F634B /* RocK */
/* increase this every time the api struct changes */ /* increase this every time the api struct changes */
#define PLUGIN_API_VERSION 54 #define PLUGIN_API_VERSION 1
/* update this to latest version if a change to the api struct breaks /* update this to latest version if a change to the api struct breaks
backwards compatibility (and please take the opportunity to sort in any backwards compatibility (and please take the opportunity to sort in any
new function which are "waiting" at the end of the function table) */ new function which are "waiting" at the end of the function table) */
#define PLUGIN_MIN_API_VERSION 51 #define PLUGIN_MIN_API_VERSION 1
/* plugin return codes */ /* plugin return codes */
enum plugin_status { enum plugin_status {
PLUGIN_OK = 0, PLUGIN_OK = 0,
PLUGIN_USB_CONNECTED, PLUGIN_USB_CONNECTED,
PLUGIN_ERROR = -1,
PLUGIN_WRONG_API_VERSION = -1,
PLUGIN_WRONG_MODEL = -2,
PLUGIN_ERROR = -3,
}; };
/* different (incompatible) plugin models */
enum model {
PLAYER,
RECORDER
};
#ifdef HAVE_LCD_CHARCELLS
#define MODEL PLAYER
#else
#define MODEL RECORDER
#endif
/* compatibility test macro */
#define TEST_PLUGIN_API(_api_) \
do { \
int _rc_ = _api_->plugin_test(PLUGIN_API_VERSION, MODEL, MEM); \
if (_rc_<0) \
return _rc_; \
} while(0)
/* NOTE: To support backwards compatibility, only add new functions at /* NOTE: To support backwards compatibility, only add new functions at
the end of the structure. Every time you add a new function, the end of the structure. Every time you add a new function,
remember to increase PLUGIN_API_VERSION. If you make changes to the remember to increase PLUGIN_API_VERSION. If you make changes to the
@ -135,10 +114,6 @@ do { \
version version
*/ */
struct plugin_api { struct plugin_api {
/* these two fields must always be first, to ensure
TEST_PLUGIN_API will always work */
int version;
int (*plugin_test)(int api_version, int model, int memsize);
/* lcd */ /* lcd */
void (*lcd_set_contrast)(int x); void (*lcd_set_contrast)(int x);
@ -198,6 +173,7 @@ struct plugin_api {
struct font* (*font_get)(int font); struct font* (*font_get)(int font);
int (*font_getstringsize)(const unsigned char *str, int *w, int *h, int (*font_getstringsize)(const unsigned char *str, int *w, int *h,
int fontnumber); int fontnumber);
int (*font_get_width)(struct font* pf, unsigned short char_code);
#endif #endif
void (*backlight_on)(void); void (*backlight_on)(void);
void (*backlight_off)(void); void (*backlight_off)(void);
@ -314,9 +290,18 @@ struct plugin_api {
char *(*strcat)(char *s1, const char *s2); char *(*strcat)(char *s1, const char *s2);
int (*memcmp)(const void *s1, const void *s2, size_t n); int (*memcmp)(const void *s1, const void *s2, size_t n);
char *(*strcasestr) (const char* phaystack, const char* pneedle); char *(*strcasestr) (const char* phaystack, const char* pneedle);
/* unicode stuff */
const unsigned char* (*utf8decode)(const unsigned char *utf8, unsigned short *ucs);
unsigned char* (*iso_decode)(const unsigned char *iso, unsigned char *utf8, int cp, int count);
unsigned char* (*utf16LEdecode)(const unsigned char *utf16, unsigned char *utf8, unsigned int count);
unsigned char* (*utf16BEdecode)(const unsigned char *utf16, unsigned char *utf8, unsigned int count);
unsigned char* (*utf8encode)(unsigned long ucs, unsigned char *utf8);
unsigned long (*utf8length)(const unsigned char *utf8);
/* sound */ /* sound */
void (*sound_set)(int setting, int value); void (*sound_set)(int setting, int value);
int (*sound_min)(int setting);
int (*sound_max)(int setting);
#ifndef SIMULATOR #ifndef SIMULATOR
void (*mp3_play_data)(const unsigned char* start, int size, void (*get_more)(unsigned char** start, int* size)); void (*mp3_play_data)(const unsigned char* start, int size, void (*get_more)(unsigned char** start, int* size));
void (*mp3_play_pause)(bool play); void (*mp3_play_pause)(bool play);
@ -378,6 +363,23 @@ struct plugin_api {
int *rundb_fd; int *rundb_fd;
int *rundb_initialized; int *rundb_initialized;
/* menu */
int (*menu_init)(const struct menu_item* mitems, int count,
int (*callback)(int, int),
const char *button1, const char *button2, const char *button3);
void (*menu_exit)(int menu);
int (*menu_show)(int m);
bool (*menu_run)(int menu);
int (*menu_cursor)(int menu);
char* (*menu_description)(int menu, int position);
void (*menu_delete)(int menu, int position);
int (*menu_count)(int menu);
bool (*menu_moveup)(int menu);
bool (*menu_movedown)(int menu);
void (*menu_draw)(int menu);
void (*menu_insert)(int menu, int position, char *desc, bool (*function) (void));
void (*menu_set_cursor)(int menu, int position);
/* misc */ /* misc */
void (*srand)(unsigned int seed); void (*srand)(unsigned int seed);
int (*rand)(void); int (*rand)(void);
@ -416,43 +418,38 @@ struct plugin_api {
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
int (*read_bmp_file)(char* filename, int *get_width, int *get_height, int (*read_bmp_file)(char* filename, int *get_width, int *get_height,
char *bitmap, int maxsize); char *bitmap, int maxsize);
void (*screen_dump_set_hook)(void (*hook)(int fh));
#endif #endif
int (*show_logo)(void); int (*show_logo)(void);
/* new stuff at the end, sort into place next time /* new stuff at the end, sort into place next time
the API gets incompatible */ the API gets incompatible */
int (*menu_init)(const struct menu_item* mitems, int count,
int (*callback)(int, int),
const char *button1, const char *button2, const char *button3);
void (*menu_exit)(int menu);
int (*menu_show)(int m);
bool (*menu_run)(int menu);
int (*menu_cursor)(int menu);
char* (*menu_description)(int menu, int position);
void (*menu_delete)(int menu, int position);
int (*menu_count)(int menu);
bool (*menu_moveup)(int menu);
bool (*menu_movedown)(int menu);
void (*menu_draw)(int menu);
void (*menu_insert)(int menu, int position, char *desc, bool (*function) (void));
void (*menu_set_cursor)(int menu, int position);
#ifdef HAVE_LCD_BITMAP
void (*screen_dump_set_hook)(void (*hook)(int fh));
int (*font_get_width)(struct font* pf, unsigned short char_code);
#endif
const unsigned char* (*utf8decode)(const unsigned char *utf8, unsigned short *ucs);
unsigned char* (*iso_decode)(const unsigned char *iso, unsigned char *utf8, int cp, int count);
unsigned char* (*utf16LEdecode)(const unsigned char *utf16, unsigned char *utf8, unsigned int count);
unsigned char* (*utf16BEdecode)(const unsigned char *utf16, unsigned char *utf8, unsigned int count);
unsigned char* (*utf8encode)(unsigned long ucs, unsigned char *utf8);
unsigned long (*utf8length)(const unsigned char *utf8);
int (*sound_min)(int setting);
int (*sound_max)(int setting);
}; };
#ifndef SIMULATOR
/* plugin header */
struct plugin_header {
unsigned long magic;
unsigned short target_id;
unsigned short api_version;
unsigned char *load_addr;
unsigned char *end_addr;
enum plugin_status(*entry_point)(struct plugin_api*, void*);
};
#ifdef PLUGIN
extern unsigned char plugin_start_addr[];
extern unsigned char plugin_end_addr[];
#define PLUGIN_HEADER \
const struct plugin_header __header \
__attribute__ ((section (".header")))= { \
PLUGIN_MAGIC, TARGET_ID, PLUGIN_API_VERSION, \
plugin_start_addr, plugin_end_addr, plugin_start };
#endif
#else /* SIMULATOR */
#define PLUGIN_HEADER
#endif
int plugin_load(const char* plugin, void* parameter); int plugin_load(const char* plugin, void* parameter);
void* plugin_get_buffer(int *buffer_size); void* plugin_get_buffer(int *buffer_size);
void* plugin_get_audio_buffer(int *buffer_size); void* plugin_get_audio_buffer(int *buffer_size);

View file

@ -10,7 +10,7 @@
INCLUDES = -I$(FIRMDIR)/include -I$(FIRMDIR)/export -I$(FIRMDIR)/common \ INCLUDES = -I$(FIRMDIR)/include -I$(FIRMDIR)/export -I$(FIRMDIR)/common \
-I$(FIRMDIR)/drivers -I$(APPSDIR) -Ilib -I$(BUILDDIR) -I$(FIRMDIR)/drivers -I$(APPSDIR) -Ilib -I$(BUILDDIR)
CFLAGS = $(GCCOPTS) $(INCLUDES) $(TARGET) $(EXTRA_DEFINES) \ CFLAGS = $(GCCOPTS) $(INCLUDES) $(TARGET) $(EXTRA_DEFINES) \
-DMEM=${MEMORYSIZE} -DPLUGIN -DTARGET_ID=$(TARGET_ID) -DMEM=${MEMORYSIZE} -DPLUGIN
ifdef APPEXTRA ifdef APPEXTRA
INCLUDES += $(patsubst %,-I$(APPSDIR)/%,$(subst :, ,$(APPEXTRA))) INCLUDES += $(patsubst %,-I$(APPSDIR)/%,$(subst :, ,$(APPEXTRA)))

View file

@ -34,6 +34,8 @@
/* Only build for (correct) target */ /* Only build for (correct) target */
#if !defined(SIMULATOR) && CONFIG_CPU==SH7034 && !defined(HAVE_MMC) #if !defined(SIMULATOR) && CONFIG_CPU==SH7034 && !defined(HAVE_MMC)
PLUGIN_HEADER
#ifdef HAVE_LCD_CHARCELLS /* player model */ #ifdef HAVE_LCD_CHARCELLS /* player model */
#define LINES 2 #define LINES 2
#define COLUMNS 11 #define COLUMNS 11
@ -1192,10 +1194,6 @@ int main(void* parameter)
enum plugin_status plugin_start(struct plugin_api* api, void* parameter) enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{ {
/* this macro should be called as the first thing you do in the plugin.
it test that the api version and model the plugin was compiled for
matches the machine it is running on */
TEST_PLUGIN_API(api);
rb = api; /* copy to global api pointer */ rb = api; /* copy to global api pointer */
/* now go ahead and have fun! */ /* now go ahead and have fun! */

View file

@ -29,6 +29,8 @@
to watch. to watch.
*/ */
PLUGIN_HEADER
/* variable button definitions */ /* variable button definitions */
#if CONFIG_KEYPAD == RECORDER_PAD #if CONFIG_KEYPAD == RECORDER_PAD
#define BATTERY_TEST_QUIT BUTTON_OFF #define BATTERY_TEST_QUIT BUTTON_OFF
@ -136,7 +138,6 @@ enum plugin_status loop(void)
enum plugin_status plugin_start(struct plugin_api* api, void* parameter) enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{ {
TEST_PLUGIN_API(api);
(void)parameter; (void)parameter;
rb = api; rb = api;

View file

@ -21,6 +21,8 @@
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
PLUGIN_HEADER
#define SS_TITLE "Bouncer" #define SS_TITLE "Bouncer"
#define SS_TITLE_FONT 2 #define SS_TITLE_FONT 2
@ -443,7 +445,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
char *off = "[Off] to stop"; char *off = "[Off] to stop";
int len; int len;
TEST_PLUGIN_API(api);
(void)(parameter); (void)(parameter);
rb = api; rb = api;

View file

@ -76,6 +76,8 @@ F3: equal to "="
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
#include "math.h" #include "math.h"
PLUGIN_HEADER
#define REC_HEIGHT 10 /* blank height = 9 */ #define REC_HEIGHT 10 /* blank height = 9 */
#define REC_WIDTH 22 /* blank width = 21 */ #define REC_WIDTH 22 /* blank width = 21 */
@ -1324,7 +1326,6 @@ Main();
----------------------------------------------------------------------- */ ----------------------------------------------------------------------- */
enum plugin_status plugin_start(struct plugin_api* api, void* parameter) enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{ {
TEST_PLUGIN_API(api);
(void)parameter; (void)parameter;
rb = api; rb = api;

View file

@ -23,6 +23,8 @@
#include <timefuncs.h> #include <timefuncs.h>
PLUGIN_HEADER
static struct plugin_api* rb; static struct plugin_api* rb;
static bool leap_year; static bool leap_year;
@ -664,7 +666,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
bool exit = false; bool exit = false;
int button; int button;
TEST_PLUGIN_API(api);
(void)(parameter); (void)(parameter);
rb = api; rb = api;

View file

@ -18,6 +18,8 @@
****************************************************************************/ ****************************************************************************/
#include "plugin.h" #include "plugin.h"
PLUGIN_HEADER
/* variable button definitions */ /* variable button definitions */
#if CONFIG_KEYPAD == RECORDER_PAD #if CONFIG_KEYPAD == RECORDER_PAD
#define CHC_QUIT BUTTON_OFF #define CHC_QUIT BUTTON_OFF
@ -136,8 +138,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
bool done; bool done;
int nr; int nr;
TEST_PLUGIN_API(api);
(void)parameter; (void)parameter;
rb=api; rb=api;

View file

@ -22,6 +22,8 @@
/* Only build for (correct) target */ /* Only build for (correct) target */
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
PLUGIN_HEADER
static struct plugin_api* rb; /* here is a global api struct pointer */ static struct plugin_api* rb; /* here is a global api struct pointer */
#define EXTERN static #define EXTERN static
@ -1276,10 +1278,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{ {
char* filename; char* filename;
/* this macro should be called as the first thing you do in the plugin.
it test that the api version and model the plugin was compiled for
matches the machine it is running on */
TEST_PLUGIN_API(api);
rb = api; /* copy to global api pointer */ rb = api; /* copy to global api pointer */
if (parameter == NULL) if (parameter == NULL)

View file

@ -80,6 +80,8 @@ Original release, featuring analog / digital modes and a few options.
#if defined(HAVE_LCD_BITMAP) && defined(CONFIG_RTC) #if defined(HAVE_LCD_BITMAP) && defined(CONFIG_RTC)
PLUGIN_HEADER
#define CLOCK_VERSION "2.60" #define CLOCK_VERSION "2.60"
#define MODE_ANALOG 1 #define MODE_ANALOG 1
@ -2875,7 +2877,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
struct tm* current_time; struct tm* current_time;
TEST_PLUGIN_API(api);
(void)parameter; (void)parameter;
rb = api; rb = api;

View file

@ -18,6 +18,8 @@
****************************************************************************/ ****************************************************************************/
#include "plugin.h" #include "plugin.h"
PLUGIN_HEADER
void roll_credits(void); void roll_credits(void);
const char* const credits[] = { const char* const credits[] = {
#include "credits.raw" /* generated list of names from docs/CREDITS */ #include "credits.raw" /* generated list of names from docs/CREDITS */
@ -30,7 +32,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
int j = 0; int j = 0;
int btn; int btn;
TEST_PLUGIN_API(api);
(void)parameter; (void)parameter;
rb = api; rb = api;

View file

@ -22,6 +22,8 @@
#include "playergfx.h" #include "playergfx.h"
#include "xlcd.h" #include "xlcd.h"
PLUGIN_HEADER
/* Loops that the values are displayed */ /* Loops that the values are displayed */
#define DISP_TIME 30 #define DISP_TIME 30
@ -446,7 +448,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
bool redraw = true; bool redraw = true;
bool exit = false; bool exit = false;
TEST_PLUGIN_API(api);
(void)(parameter); (void)(parameter);
rb = api; rb = api;

View file

@ -10,7 +10,7 @@
INCLUDES = -I$(APPSDIR) -I.. -I. -I$(FIRMDIR)/include -I$(FIRMDIR)/export \ INCLUDES = -I$(APPSDIR) -I.. -I. -I$(FIRMDIR)/include -I$(FIRMDIR)/export \
-I$(FIRMDIR)/common -I$(FIRMDIR)/drivers -I$(OUTDIR) -I$(BUILDDIR) -I$(FIRMDIR)/common -I$(FIRMDIR)/drivers -I$(OUTDIR) -I$(BUILDDIR)
CFLAGS = $(GCCOPTS) -O3 $(INCLUDES) $(TARGET) $(EXTRA_DEFINES) \ CFLAGS = $(GCCOPTS) -O3 $(INCLUDES) $(TARGET) $(EXTRA_DEFINES) \
-DMEM=${MEMORYSIZE} -DPLUGIN -DTARGET_ID=$(TARGET_ID) -DMEM=${MEMORYSIZE} -DPLUGIN
ifdef APPEXTRA ifdef APPEXTRA
INCLUDES += $(patsubst %,-I$(APPSDIR)/%,$(subst :, ,$(APPEXTRA))) INCLUDES += $(patsubst %,-I$(APPSDIR)/%,$(subst :, ,$(APPEXTRA)))

View file

@ -18,6 +18,8 @@
****************************************************************************/ ****************************************************************************/
#include "databox.h" #include "databox.h"
PLUGIN_HEADER
/* variable button definitions */ /* variable button definitions */
#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \
(CONFIG_KEYPAD == IRIVER_H300_PAD) (CONFIG_KEYPAD == IRIVER_H300_PAD)
@ -233,11 +235,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{ {
int button,done=0,abort=0; int button,done=0,abort=0;
char filename[100],buf[100]; char filename[100],buf[100];
/* this macro should be called as the first thing you do in the plugin.
it test that the api version and model the plugin was compiled for
matches the machine it is running on */
TEST_PLUGIN_API(api);
/* if you don't use the parameter, you can do like /* if you don't use the parameter, you can do like
this to avoid the compiler warning about it */ this to avoid the compiler warning about it */
(void)parameter; (void)parameter;

View file

@ -23,6 +23,8 @@
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
PLUGIN_HEADER
/* Key assignement */ /* Key assignement */
#if (CONFIG_KEYPAD == IPOD_4G_PAD) #if (CONFIG_KEYPAD == IPOD_4G_PAD)
#define DEMYSTIFY_QUIT BUTTON_MENU #define DEMYSTIFY_QUIT BUTTON_MENU
@ -337,13 +339,6 @@ int plugin_main(void)
enum plugin_status plugin_start(struct plugin_api* api, void* parameter) enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{ {
int ret; int ret;
/*
* this macro should be called as the first thing you do in the plugin.
* it test that the api version and model the plugin was compiled for
* matches the machine it is running on
*/
TEST_PLUGIN_API(api);
rb = api; /* copy to global api pointer */ rb = api; /* copy to global api pointer */
(void)parameter; (void)parameter;

View file

@ -19,6 +19,8 @@
#include "plugin.h" #include "plugin.h"
PLUGIN_HEADER
/* as in hello world :) */ /* as in hello world :) */
static struct plugin_api* rb; static struct plugin_api* rb;
/* screen info */ /* screen info */
@ -127,7 +129,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
int lines, len, outputted, next; int lines, len, outputted, next;
/* plugin stuff */ /* plugin stuff */
TEST_PLUGIN_API(api);
(void)parameter; (void)parameter;
rb = api; rb = api;

View file

@ -43,6 +43,8 @@ To do:
- The Irish currency needs 6 digits after the . to have sufficient precision on big number - The Irish currency needs 6 digits after the . to have sufficient precision on big number
*/ */
PLUGIN_HEADER
/* Name and path of the config file*/ /* Name and path of the config file*/
static const char cfg_filename[] = "euroconverter.cfg"; static const char cfg_filename[] = "euroconverter.cfg";
#define CFGFILE_VERSION 0 /* Current config file version */ #define CFGFILE_VERSION 0 /* Current config file version */
@ -405,11 +407,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
longlong_t e,h,old_e,old_h; longlong_t e,h,old_e,old_h;
int button; int button;
/* this macro should be called as the first thing you do in the plugin.
it test that the api version and model the plugin was compiled for
matches the machine it is running on */
TEST_PLUGIN_API(api);
/* if you don't use the parameter, you can do like /* if you don't use the parameter, you can do like
this to avoid the compiler warning about it */ this to avoid the compiler warning about it */
(void)parameter; (void)parameter;

View file

@ -1,6 +1,8 @@
#include "plugin.h" #include "plugin.h"
#define FAVORITES_FILE "/favorites.m3u" #define FAVORITES_FILE "/favorites.m3u"
PLUGIN_HEADER
static struct plugin_api* rb; static struct plugin_api* rb;
enum plugin_status plugin_start(struct plugin_api* api, void* parameter) enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
@ -9,11 +11,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
char track_path[MAX_PATH+1]; char track_path[MAX_PATH+1];
int fd, result, len; int fd, result, len;
/* this macro should be called as the first thing you do in the plugin.
it test that the api version and model the plugin was compiled for
matches the machine it is running on */
TEST_PLUGIN_API(api);
rb = api; rb = api;
/* If we were passed a parameter, use that as the file name, /* If we were passed a parameter, use that as the file name,

View file

@ -25,6 +25,8 @@
#ifdef HAVE_LCD_BITMAP /* and also not for the Player */ #ifdef HAVE_LCD_BITMAP /* and also not for the Player */
#include "gray.h" #include "gray.h"
PLUGIN_HEADER
/******************************* Globals ***********************************/ /******************************* Globals ***********************************/
static struct plugin_api* rb; /* global api struct pointer */ static struct plugin_api* rb; /* global api struct pointer */
@ -278,13 +280,6 @@ int main(void)
enum plugin_status plugin_start(struct plugin_api* api, void* parameter) enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{ {
int ret; int ret;
/*
* this macro should be called as the first thing you do in the plugin.
* it test that the api version and model the plugin was compiled for
* matches the machine it is running on
*/
TEST_PLUGIN_API(api);
rb = api; // copy to global api pointer rb = api; // copy to global api pointer
(void)parameter; (void)parameter;

View file

@ -79,6 +79,8 @@
#ifdef PLATFORM_ID #ifdef PLATFORM_ID
PLUGIN_HEADER
#if CONFIG_KEYPAD == ONDIO_PAD /* limited keypad */ #if CONFIG_KEYPAD == ONDIO_PAD /* limited keypad */
#define KEY1 BUTTON_LEFT #define KEY1 BUTTON_LEFT
#define KEY2 BUTTON_UP #define KEY2 BUTTON_UP
@ -1062,11 +1064,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{ {
int oldmode; int oldmode;
/* this macro should be called as the first thing you do in the plugin.
it test that the api version and model the plugin was compiled for
matches the machine it is running on */
TEST_PLUGIN_API(api);
rb = api; /* copy to global api pointer */ rb = api; /* copy to global api pointer */
/* now go ahead and have fun! */ /* now go ahead and have fun! */

View file

@ -19,6 +19,8 @@
#include "plugin.h" #include "plugin.h"
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
PLUGIN_HEADER
/* variable button definitions */ /* variable button definitions */
#if CONFIG_KEYPAD == RECORDER_PAD #if CONFIG_KEYPAD == RECORDER_PAD
#define FLIPIT_UP BUTTON_UP #define FLIPIT_UP BUTTON_UP
@ -294,7 +296,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{ {
int w, h, i; int w, h, i;
TEST_PLUGIN_API(api);
(void)parameter; (void)parameter;
rb = api; rb = api;

View file

@ -25,6 +25,8 @@
#if defined(HAVE_LCD_BITMAP) && (LCD_DEPTH < 4) #if defined(HAVE_LCD_BITMAP) && (LCD_DEPTH < 4)
#include "gray.h" #include "gray.h"
PLUGIN_HEADER
/* variable button definitions */ /* variable button definitions */
#if CONFIG_KEYPAD == RECORDER_PAD #if CONFIG_KEYPAD == RECORDER_PAD
#define GRAYSCALE_SHIFT BUTTON_ON #define GRAYSCALE_SHIFT BUTTON_ON
@ -302,11 +304,6 @@ int main(void)
enum plugin_status plugin_start(struct plugin_api* api, void* parameter) enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{ {
/* this macro should be called as the first thing you do in the plugin.
it test that the api version and model the plugin was compiled for
matches the machine it is running on */
TEST_PLUGIN_API(api);
rb = api; // copy to global api pointer rb = api; // copy to global api pointer
(void)parameter; (void)parameter;

View file

@ -20,6 +20,10 @@
/* welcome to the example rockbox plugin */ /* welcome to the example rockbox plugin */
/* This macros must always be included. Should be placed at the top by
convention, although the actual position doesn't matter */
PLUGIN_HEADER
/* here is a global api struct pointer. while not strictly necessary, /* here is a global api struct pointer. while not strictly necessary,
it's nice not to have to pass the api pointer in all function calls it's nice not to have to pass the api pointer in all function calls
in the plugin */ in the plugin */
@ -28,11 +32,6 @@ static struct plugin_api* rb;
/* this is the plugin entry point */ /* this is the plugin entry point */
enum plugin_status plugin_start(struct plugin_api* api, void* parameter) enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{ {
/* this macro should be called as the first thing you do in the plugin.
it test that the api version and model the plugin was compiled for
matches the machine it is running on */
TEST_PLUGIN_API(api);
/* if you don't use the parameter, you can do like /* if you don't use the parameter, you can do like
this to avoid the compiler warning about it */ this to avoid the compiler warning about it */
(void)parameter; (void)parameter;

View file

@ -23,6 +23,7 @@
****************************************************************************/ ****************************************************************************/
#include "plugin.h" #include "plugin.h"
PLUGIN_HEADER
static struct plugin_api* rb; static struct plugin_api* rb;
@ -133,7 +134,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{ {
char *buf; char *buf;
int rc; int rc;
TEST_PLUGIN_API(api);
filename = (char *)parameter; filename = (char *)parameter;

View file

@ -29,6 +29,8 @@ History:
#ifdef HAVE_LCD_CHARCELLS #ifdef HAVE_LCD_CHARCELLS
PLUGIN_HEADER
/* Jackpot game for the player */ /* Jackpot game for the player */
static unsigned char pattern[]={ static unsigned char pattern[]={
@ -89,11 +91,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
bool exit=false; bool exit=false;
bool go; bool go;
/* this macro should be called as the first thing you do in the plugin.
it test that the api version and model the plugin was compiled for
matches the machine it is running on */
TEST_PLUGIN_API(api);
/* if you don't use the parameter, you can do like /* if you don't use the parameter, you can do like
this to avoid the compiler warning about it */ this to avoid the compiler warning about it */
(void)parameter; (void)parameter;

View file

@ -20,11 +20,11 @@
****************************************************************************/ ****************************************************************************/
#include "plugin.h" #include "plugin.h"
#include "button.h"
#include "lcd.h"
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
PLUGIN_HEADER
/* save files */ /* save files */
#define SCORE_FILE PLUGIN_DIR "/bejeweled.score" #define SCORE_FILE PLUGIN_DIR "/bejeweled.score"
#define SAVE_FILE PLUGIN_DIR "/bejeweled.save" #define SAVE_FILE PLUGIN_DIR "/bejeweled.save"
@ -2466,7 +2466,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) {
char str[19]; char str[19];
/* plugin init */ /* plugin init */
TEST_PLUGIN_API(api);
(void)parameter; (void)parameter;
rb = api; rb = api;
/* end of plugin init */ /* end of plugin init */

View file

@ -29,6 +29,8 @@
#if defined(HAVE_LCD_BITMAP) && (LCD_DEPTH < 4) #if defined(HAVE_LCD_BITMAP) && (LCD_DEPTH < 4)
#include "gray.h" #include "gray.h"
PLUGIN_HEADER
/* variable button definitions */ /* variable button definitions */
#if CONFIG_KEYPAD == RECORDER_PAD #if CONFIG_KEYPAD == RECORDER_PAD
#define JPEG_ZOOM_IN BUTTON_PLAY #define JPEG_ZOOM_IN BUTTON_PLAY
@ -1959,11 +1961,6 @@ int main(char* filename)
enum plugin_status plugin_start(struct plugin_api* api, void* parameter) enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{ {
/* this macro should be called as the first thing you do in the plugin.
it test that the api version and model the plugin was compiled for
matches the machine it is running on */
TEST_PLUGIN_API(api);
rb = api; /* copy to global api pointer */ rb = api; /* copy to global api pointer */
return main((char*)parameter); return main((char*)parameter);

View file

@ -19,6 +19,8 @@
#include "plugin.h" #include "plugin.h"
#include "playergfx.h" #include "playergfx.h"
PLUGIN_HEADER
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
#define DISPLAY_WIDTH LCD_WIDTH #define DISPLAY_WIDTH LCD_WIDTH
#define DISPLAY_HEIGHT LCD_HEIGHT #define DISPLAY_HEIGHT LCD_HEIGHT
@ -226,7 +228,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) {
int old_cpos = -1; int old_cpos = -1;
#endif #endif
TEST_PLUGIN_API(api);
(void)parameter; (void)parameter;
#ifdef HAVE_LCD_CHARCELLS #ifdef HAVE_LCD_CHARCELLS

View file

@ -24,6 +24,8 @@
#if defined(HAVE_LCD_BITMAP) && (LCD_DEPTH < 4) #if defined(HAVE_LCD_BITMAP) && (LCD_DEPTH < 4)
#include "gray.h" #include "gray.h"
PLUGIN_HEADER
/* variable button definitions */ /* variable button definitions */
#if CONFIG_KEYPAD == RECORDER_PAD #if CONFIG_KEYPAD == RECORDER_PAD
#define MANDELBROT_QUIT BUTTON_OFF #define MANDELBROT_QUIT BUTTON_OFF
@ -371,7 +373,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
int grayscales; int grayscales;
int redraw = REDRAW_FULL; int redraw = REDRAW_FULL;
TEST_PLUGIN_API(api);
rb = api; rb = api;
(void)parameter; (void)parameter;

View file

@ -20,6 +20,8 @@
#if !defined(SIMULATOR) #if !defined(SIMULATOR)
PLUGIN_HEADER
/* variable button definitions */ /* variable button definitions */
#if CONFIG_KEYPAD == RECORDER_PAD #if CONFIG_KEYPAD == RECORDER_PAD
#define METRONOME_QUIT BUTTON_OFF #define METRONOME_QUIT BUTTON_OFF
@ -907,7 +909,6 @@ void tap(void)
enum plugin_status plugin_start(struct plugin_api* api, void* parameter){ enum plugin_status plugin_start(struct plugin_api* api, void* parameter){
int button; int button;
TEST_PLUGIN_API(api);
(void)parameter; (void)parameter;
rb = api; rb = api;

View file

@ -41,6 +41,8 @@
//#include "../codecs/lib/xxx2wav.h" //#include "../codecs/lib/xxx2wav.h"
PLUGIN_HEADER
int numberOfSamples IDATA_ATTR; int numberOfSamples IDATA_ATTR;
long bpm; long bpm;
@ -67,9 +69,6 @@ struct plugin_api * rb;
enum plugin_status plugin_start(struct plugin_api* api, void* parameter) enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{ {
TEST_PLUGIN_API(api);
rb = api;
TEST_PLUGIN_API(api);
(void)parameter; (void)parameter;
rb = api; rb = api;

View file

@ -28,11 +28,11 @@ use F3 to see how many mines are left (supposing all your flags are correct)
*****************************************************************************/ *****************************************************************************/
#include "plugin.h" #include "plugin.h"
#include "button.h"
#include "lcd.h"
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
PLUGIN_HEADER
//what the minesweeper() function can return //what the minesweeper() function can return
#define MINESWEEPER_USB 3 #define MINESWEEPER_USB 3
#define MINESWEEPER_QUIT 2 #define MINESWEEPER_QUIT 2
@ -521,7 +521,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{ {
bool exit = false; bool exit = false;
/* plugin init */ /* plugin init */
TEST_PLUGIN_API(api);
(void)parameter; (void)parameter;
rb = api; rb = api;
/* end of plugin init */ /* end of plugin init */

View file

@ -19,6 +19,8 @@
#include "plugin.h" #include "plugin.h"
#include "playergfx.h" #include "playergfx.h"
PLUGIN_HEADER
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
#define LARGE ((LCD_WIDTH - 2) / 2) #define LARGE ((LCD_WIDTH - 2) / 2)
#define HAUT ((LCD_HEIGHT - 2) / 2) #define HAUT ((LCD_HEIGHT - 2) / 2)
@ -72,7 +74,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
int sx = 3; int sx = 3;
int sy = 3; int sy = 3;
struct plugin_api* rb = api; struct plugin_api* rb = api;
TEST_PLUGIN_API(api);
(void)parameter; (void)parameter;
#ifdef HAVE_LCD_CHARCELLS #ifdef HAVE_LCD_CHARCELLS

View file

@ -38,6 +38,8 @@ enum e_byte_order { order_unknown, order_bigEndian, order_littleEndian };
#define memcpy rb->memcpy #define memcpy rb->memcpy
#define memset rb->memset #define memset rb->memset
PLUGIN_HEADER
static struct plugin_api* rb; static struct plugin_api* rb;
extern char iramcopy[]; extern char iramcopy[];
extern char iramstart[]; extern char iramstart[];
@ -1892,8 +1894,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
char *bitratename[] = { "64","80","96","112","128","160","192","224","256","320" }; char *bitratename[] = { "64","80","96","112","128","160","192","224","256","320" };
int brate[] = { 64,80,96,112,128,160,192,224,256,320 }; int brate[] = { 64,80,96,112,128,160,192,224,256,320 };
TEST_PLUGIN_API(api);
(void)parameter; (void)parameter;
rb = api; rb = api;

View file

@ -46,6 +46,7 @@ V1.2 : 2003-07-30
take a match. Later you are obliged to take at least one.) take a match. Later you are obliged to take at least one.)
*/ */
PLUGIN_HEADER
/*Pattern for the game*/ /*Pattern for the game*/
static unsigned char smile[]={0x00, 0x11, 0x04, 0x04, 0x00, 0x11, 0x0E}; /* :-) */ static unsigned char smile[]={0x00, 0x11, 0x04, 0x04, 0x00, 0x11, 0x0E}; /* :-) */
@ -140,11 +141,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
bool ok; bool ok;
bool go; bool go;
/* this macro should be called as the first thing you do in the plugin.
it test that the api version and model the plugin was compiled for
matches the machine it is running on */
TEST_PLUGIN_API(api);
/* if you don't use the parameter, you can do like /* if you don't use the parameter, you can do like
this to avoid the compiler warning about it */ this to avoid the compiler warning about it */
(void)parameter; (void)parameter;

View file

@ -22,6 +22,8 @@
#ifndef SIMULATOR /* don't want this code in the simulator */ #ifndef SIMULATOR /* don't want this code in the simulator */
#if CONFIG_CODEC != SWCODEC /* only for MAS-targets */ #if CONFIG_CODEC != SWCODEC /* only for MAS-targets */
PLUGIN_HEADER
/* The different drawing modes */ /* The different drawing modes */
#define DRAW_MODE_FILLED 0 #define DRAW_MODE_FILLED 0
#define DRAW_MODE_OUTLINE 1 #define DRAW_MODE_OUTLINE 1
@ -93,7 +95,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
bool exit = false; bool exit = false;
TEST_PLUGIN_API(api);
(void)parameter; (void)parameter;
rb = api; rb = api;

View file

@ -25,6 +25,8 @@
#ifdef HAVE_LCD_BITMAP /* and also not for the Player */ #ifdef HAVE_LCD_BITMAP /* and also not for the Player */
#if CONFIG_CODEC != SWCODEC /* only for MAS-targets */ #if CONFIG_CODEC != SWCODEC /* only for MAS-targets */
PLUGIN_HEADER
/* The different drawing modes */ /* The different drawing modes */
#define DRAW_MODE_FILLED 0 #define DRAW_MODE_FILLED 0
#define DRAW_MODE_OUTLINE 1 #define DRAW_MODE_OUTLINE 1
@ -201,7 +203,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
bool exit = false; bool exit = false;
bool paused = false; bool paused = false;
TEST_PLUGIN_API(api);
(void)parameter; (void)parameter;
rb = api; rb = api;

View file

@ -28,6 +28,8 @@
#ifdef HAVE_LCD_BITMAP /* and also not for the Player */ #ifdef HAVE_LCD_BITMAP /* and also not for the Player */
#include "gray.h" #include "gray.h"
PLUGIN_HEADER
/******************************* Globals ***********************************/ /******************************* Globals ***********************************/
static struct plugin_api* rb; /* global api struct pointer */ static struct plugin_api* rb; /* global api struct pointer */
@ -241,13 +243,6 @@ int main(void)
enum plugin_status plugin_start(struct plugin_api* api, void* parameter) enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{ {
int ret; int ret;
/*
* this macro should be called as the first thing you do in the plugin.
* it test that the api version and model the plugin was compiled for
* matches the machine it is running on
*/
TEST_PLUGIN_API(api);
rb = api; // copy to global api pointer rb = api; // copy to global api pointer
(void)parameter; (void)parameter;

View file

@ -64,6 +64,12 @@ MEMORY
SECTIONS SECTIONS
{ {
.header : {
_plugin_start_addr = .;
plugin_start_addr = .;
KEEP(*(.header))
} > PLUGIN_RAM
.text : .text :
{ {
KEEP(*(.entry)) KEEP(*(.entry))
@ -118,6 +124,9 @@ SECTIONS
{ {
*(.bss*) *(.bss*)
*(COMMON) *(COMMON)
. = ALIGN(0x4);
_plugin_end_addr = .;
plugin_end_addr = .;
} > PLUGIN_RAM } > PLUGIN_RAM
/* Special trick to avoid a linker error when no other sections are /* Special trick to avoid a linker error when no other sections are

View file

@ -20,6 +20,8 @@
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
PLUGIN_HEADER
#define PAD_HEIGHT LCD_HEIGHT / 6 /* Recorder: 10 iRiver: 21 */ #define PAD_HEIGHT LCD_HEIGHT / 6 /* Recorder: 10 iRiver: 21 */
#define PAD_WIDTH LCD_WIDTH / 50 /* Recorder: 2 iRiver: 2 */ #define PAD_WIDTH LCD_WIDTH / 50 /* Recorder: 2 iRiver: 2 */
@ -337,8 +339,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
this to avoid the compiler warning about it */ this to avoid the compiler warning about it */
(void)parameter; (void)parameter;
TEST_PLUGIN_API(api);
rb = api; /* use the "standard" rb pointer */ rb = api; /* use the "standard" rb pointer */
/* Clear screen */ /* Clear screen */

View file

@ -22,6 +22,8 @@
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
PLUGIN_HEADER
#if (CONFIG_KEYPAD == IPOD_4G_PAD) #if (CONFIG_KEYPAD == IPOD_4G_PAD)
#define ROCKBLOX_OFF BUTTON_MENU #define ROCKBLOX_OFF BUTTON_MENU
#define ROCKBLOX_UP BUTTON_SCROLL_BACK #define ROCKBLOX_UP BUTTON_SCROLL_BACK
@ -420,8 +422,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{ {
int ret; int ret;
TEST_PLUGIN_API(api);
(void)parameter; (void)parameter;
rb = api; rb = api;

View file

@ -23,6 +23,8 @@
#if !defined(SIMULATOR) && (CONFIG_CPU == SH7034) /* Only for SH targets */ #if !defined(SIMULATOR) && (CONFIG_CPU == SH7034) /* Only for SH targets */
PLUGIN_HEADER
/* define DUMMY if you only want to "play" with the UI, does no harm */ /* define DUMMY if you only want to "play" with the UI, does no harm */
/* #define DUMMY */ /* #define DUMMY */
@ -1010,10 +1012,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{ {
int oldmode; int oldmode;
/* this macro should be called as the first thing you do in the plugin.
it test that the api version and model the plugin was compiled for
matches the machine it is running on */
TEST_PLUGIN_API(api);
rb = api; /* copy to global api pointer */ rb = api; /* copy to global api pointer */
if (parameter == NULL) if (parameter == NULL)

View file

@ -22,6 +22,8 @@
#if MEM <= 8 && !defined(SIMULATOR) #if MEM <= 8 && !defined(SIMULATOR)
PLUGIN_HEADER
#define OVL_NAME "/.rockbox/viewers/rockboy.ovl" #define OVL_NAME "/.rockbox/viewers/rockboy.ovl"
#define OVL_DISPLAYNAME "RockBoy" #define OVL_DISPLAYNAME "RockBoy"
@ -40,10 +42,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
enum plugin_status(*entry_point)(struct plugin_api*, void*); enum plugin_status(*entry_point)(struct plugin_api*, void*);
} header; } header;
/* this macro should be called as the first thing you do in the plugin.
it test that the api version and model the plugin was compiled for
matches the machine it is running on */
TEST_PLUGIN_API(api);
rb = api; rb = api;
fh = rb->open(OVL_NAME, O_RDONLY); fh = rb->open(OVL_NAME, O_RDONLY);

View file

@ -10,7 +10,7 @@
INCLUDES = -I$(APPSDIR) -I.. -I. -I$(FIRMDIR)/include -I$(FIRMDIR)/export \ INCLUDES = -I$(APPSDIR) -I.. -I. -I$(FIRMDIR)/include -I$(FIRMDIR)/export \
-I$(FIRMDIR)/common -I$(FIRMDIR)/drivers -I$(OUTDIR) -I$(BUILDDIR) -I$(FIRMDIR)/common -I$(FIRMDIR)/drivers -I$(OUTDIR) -I$(BUILDDIR)
CFLAGS = $(GCCOPTS) -O3 $(INCLUDES) $(TARGET) $(EXTRA_DEFINES) \ CFLAGS = $(GCCOPTS) -O3 $(INCLUDES) $(TARGET) $(EXTRA_DEFINES) \
-DMEM=${MEMORYSIZE} -DPLUGIN -DTARGET_ID=$(TARGET_ID) -DMEM=${MEMORYSIZE} -DPLUGIN
ifdef APPEXTRA ifdef APPEXTRA
INCLUDES += $(patsubst %,-I$(APPSDIR)/%,$(subst :, ,$(APPEXTRA))) INCLUDES += $(patsubst %,-I$(APPSDIR)/%,$(subst :, ,$(APPEXTRA)))

View file

@ -36,6 +36,8 @@ const struct {
0x524f564c, /* ROVL */ 0x524f564c, /* ROVL */
ovl_start_addr, ovl_end_addr, plugin_start ovl_start_addr, ovl_end_addr, plugin_start
}; };
#else
PLUGIN_HEADER
#endif #endif
#ifdef USE_IRAM #ifdef USE_IRAM
@ -93,11 +95,6 @@ void setmallocpos(void *pointer)
/* this is the plugin entry point */ /* this is the plugin entry point */
enum plugin_status plugin_start(struct plugin_api* api, void* parameter) enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{ {
/* this macro should be called as the first thing you do in the plugin.
it test that the api version and model the plugin was compiled for
matches the machine it is running on */
TEST_PLUGIN_API(api);
/* if you are using a global api pointer, don't forget to copy it! /* if you are using a global api pointer, don't forget to copy it!
otherwise you will get lovely "I04: IllInstr" errors... :-) */ otherwise you will get lovely "I04: IllInstr" errors... :-) */
rb = api; rb = api;

View file

@ -20,6 +20,8 @@
#include "plugin.h" #include "plugin.h"
#include "ctype.h" #include "ctype.h"
PLUGIN_HEADER
static struct plugin_api* rb; static struct plugin_api* rb;
#define BUFFER_SIZE 16384 #define BUFFER_SIZE 16384
@ -150,8 +152,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
char *filename = parameter; char *filename = parameter;
char *p; char *p;
TEST_PLUGIN_API(api);
rb = api; rb = api;
DEBUGF("%s - %s\n", parameter, &filename[rb->strlen(filename)-4]); DEBUGF("%s - %s\n", parameter, &filename[rb->strlen(filename)-4]);

View file

@ -10,7 +10,7 @@
INCLUDES = -I$(APPSDIR) -I.. -I. -I$(FIRMDIR)/include -I$(FIRMDIR)/export \ INCLUDES = -I$(APPSDIR) -I.. -I. -I$(FIRMDIR)/include -I$(FIRMDIR)/export \
-I$(FIRMDIR)/common -I$(FIRMDIR)/drivers -I$(OUTDIR) -I$(BUILDDIR) -I$(FIRMDIR)/common -I$(FIRMDIR)/drivers -I$(OUTDIR) -I$(BUILDDIR)
CFLAGS = $(GCCOPTS) -O3 $(INCLUDES) $(TARGET) $(EXTRA_DEFINES) \ CFLAGS = $(GCCOPTS) -O3 $(INCLUDES) $(TARGET) $(EXTRA_DEFINES) \
-DMEM=${MEMORYSIZE} -DPLUGIN -DTARGET_ID=$(TARGET_ID) -DMEM=${MEMORYSIZE} -DPLUGIN
ifdef APPEXTRA ifdef APPEXTRA
INCLUDES += $(patsubst %,-I$(APPSDIR)/%,$(subst :, ,$(APPEXTRA))) INCLUDES += $(patsubst %,-I$(APPSDIR)/%,$(subst :, ,$(APPEXTRA)))

View file

@ -21,6 +21,8 @@
#include "token.h" #include "token.h"
#include "dbinterface.h" #include "dbinterface.h"
PLUGIN_HEADER
void *audio_bufferbase; void *audio_bufferbase;
void *audio_bufferpointer; void *audio_bufferpointer;
unsigned int audio_buffer_free; unsigned int audio_buffer_free;
@ -58,11 +60,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{ {
unsigned char *result,buf[500]; unsigned char *result,buf[500];
int parsefd,hits; int parsefd,hits;
/* this macro should be called as the first thing you do in the plugin.
it test that the api version and model the plugin was compiled for
matches the machine it is running on */
TEST_PLUGIN_API(api);
/* if you are using a global api pointer, don't forget to copy it! /* if you are using a global api pointer, don't forget to copy it!
otherwise you will get lovely "I04: IllInstr" errors... :-) */ otherwise you will get lovely "I04: IllInstr" errors... :-) */
rb = api; rb = api;

View file

@ -19,6 +19,8 @@
#include "plugin.h" #include "plugin.h"
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
PLUGIN_HEADER
/* variable button definitions */ /* variable button definitions */
#if CONFIG_KEYPAD == RECORDER_PAD #if CONFIG_KEYPAD == RECORDER_PAD
#define PUZZLE_QUIT BUTTON_OFF #define PUZZLE_QUIT BUTTON_OFF
@ -333,7 +335,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{ {
int i, w, h; int i, w, h;
TEST_PLUGIN_API(api);
(void)parameter; (void)parameter;
rb = api; rb = api;

View file

@ -33,6 +33,8 @@ dir is the current direction of the snake - 0=up, 1=right, 2=down, 3=left;
#include "plugin.h" #include "plugin.h"
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
PLUGIN_HEADER
/* variable button definitions */ /* variable button definitions */
#if CONFIG_KEYPAD == RECORDER_PAD #if CONFIG_KEYPAD == RECORDER_PAD
#define SNAKE_QUIT BUTTON_OFF #define SNAKE_QUIT BUTTON_OFF
@ -344,7 +346,6 @@ void game_init(void) {
enum plugin_status plugin_start(struct plugin_api* api, void* parameter) enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{ {
TEST_PLUGIN_API(api);
(void)(parameter); (void)(parameter);
rb = api; rb = api;

View file

@ -30,6 +30,8 @@ Head and Tail are stored
#include "plugin.h" #include "plugin.h"
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
PLUGIN_HEADER
#define WIDTH 28 #define WIDTH 28
#define HEIGHT 16 #define HEIGHT 16
@ -1425,7 +1427,6 @@ void game_init(void)
enum plugin_status plugin_start(struct plugin_api* api, void* parameter) enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{ {
TEST_PLUGIN_API(api);
(void)(parameter); (void)(parameter);
rb = api; rb = api;

View file

@ -19,6 +19,8 @@
#include "plugin.h" #include "plugin.h"
#include "playergfx.h" #include "playergfx.h"
PLUGIN_HEADER
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
#define NUM_PARTICLES (LCD_WIDTH * LCD_HEIGHT / 72) #define NUM_PARTICLES (LCD_WIDTH * LCD_HEIGHT / 72)
#define SNOW_HEIGHT LCD_HEIGHT #define SNOW_HEIGHT LCD_HEIGHT
@ -161,7 +163,6 @@ static void snow_init(void)
enum plugin_status plugin_start(struct plugin_api* api, void* parameter) enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{ {
int button; int button;
TEST_PLUGIN_API(api);
(void)(parameter); (void)(parameter);
rb = api; rb = api;

View file

@ -22,6 +22,8 @@
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
PLUGIN_HEADER
#define SOKOBAN_TITLE "Sokoban" #define SOKOBAN_TITLE "Sokoban"
#define SOKOBAN_TITLE_FONT 2 #define SOKOBAN_TITLE_FONT 2
@ -896,7 +898,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
int w, h; int w, h;
int len; int len;
TEST_PLUGIN_API(api);
(void)(parameter); (void)(parameter);
rb = api; rb = api;

View file

@ -39,6 +39,8 @@ use F3 to put card on top of the remains' stack on one of the 4 final stacks
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
PLUGIN_HEADER
/* here is a global api struct pointer. while not strictly necessary, /* here is a global api struct pointer. while not strictly necessary,
it's nice not to have to pass the api pointer in all function calls it's nice not to have to pass the api pointer in all function calls
in the plugin */ in the plugin */
@ -1541,7 +1543,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
int result; int result;
/* plugin init */ /* plugin init */
TEST_PLUGIN_API(api);
(void)parameter; (void)parameter;
rb = api; rb = api;
/* end of plugin init */ /* end of plugin init */

View file

@ -55,6 +55,8 @@
* TODO: Implement a merge sort for files larger than the buffer * TODO: Implement a merge sort for files larger than the buffer
****************************************************************************/ ****************************************************************************/
PLUGIN_HEADER
static struct plugin_api* rb; static struct plugin_api* rb;
int buf_size; int buf_size;
@ -178,7 +180,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{ {
char *buf; char *buf;
int rc; int rc;
TEST_PLUGIN_API(api);
filename = (char *)parameter; filename = (char *)parameter;

View file

@ -22,6 +22,8 @@
#ifndef SIMULATOR #ifndef SIMULATOR
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
PLUGIN_HEADER
/* variable button definitions */ /* variable button definitions */
#if CONFIG_KEYPAD == RECORDER_PAD #if CONFIG_KEYPAD == RECORDER_PAD
#define SPLITEDIT_QUIT BUTTON_OFF #define SPLITEDIT_QUIT BUTTON_OFF

View file

@ -19,6 +19,8 @@
#include "plugin.h" #include "plugin.h"
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
PLUGIN_HEADER
/* file which contains the levels */ /* file which contains the levels */
#define STAR_LEVELS_FILE "/.rockbox/star/levels.txt" #define STAR_LEVELS_FILE "/.rockbox/star/levels.txt"
@ -877,7 +879,6 @@ static int star_menu(void)
*/ */
enum plugin_status plugin_start(struct plugin_api* api, void* parameter) enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{ {
TEST_PLUGIN_API(api);
(void)parameter; (void)parameter;
rb = api; rb = api;

View file

@ -19,6 +19,8 @@
#ifdef HAVE_LCD_BITMAP /* and also not for the Player */ #ifdef HAVE_LCD_BITMAP /* and also not for the Player */
PLUGIN_HEADER
/******************************* Globals ***********************************/ /******************************* Globals ***********************************/
static struct plugin_api* rb; /* global api struct pointer */ static struct plugin_api* rb; /* global api struct pointer */
@ -251,13 +253,6 @@ int plugin_main(void)
enum plugin_status plugin_start(struct plugin_api* api, void* parameter) enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{ {
int ret; int ret;
/*
* this macro should be called as the first thing you do in the plugin.
* it test that the api version and model the plugin was compiled for
* matches the machine it is running on
*/
TEST_PLUGIN_API(api);
rb = api; // copy to global api pointer rb = api; // copy to global api pointer
(void)parameter; (void)parameter;

View file

@ -18,6 +18,8 @@
****************************************************************************/ ****************************************************************************/
#include "plugin.h" #include "plugin.h"
PLUGIN_HEADER
static struct plugin_api* rb; static struct plugin_api* rb;
static int files, dirs; static int files, dirs;
static int lasttick; static int lasttick;
@ -100,7 +102,6 @@ void traversedir(char* location, char* name)
enum plugin_status plugin_start(struct plugin_api* api, void* parameter) enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{ {
int button; int button;
TEST_PLUGIN_API(api);
(void)parameter; (void)parameter;

View file

@ -19,6 +19,8 @@
#include "plugin.h" #include "plugin.h"
PLUGIN_HEADER
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
#define LAP_LINES 6 #define LAP_LINES 6
#define TIMER_Y 1 #define TIMER_Y 1
@ -121,7 +123,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
int done = false; int done = false;
bool update_lap = true; bool update_lap = true;
TEST_PLUGIN_API(api);
(void)parameter; (void)parameter;
rb = api; rb = api;

View file

@ -57,11 +57,11 @@ Example ".ss" file, and one with a saved state:
*/ */
#include "plugin.h" #include "plugin.h"
#include "button.h"
#include "lcd.h"
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
PLUGIN_HEADER
#define STATE_FILE PLUGIN_DIR "/sudoku.state" #define STATE_FILE PLUGIN_DIR "/sudoku.state"
#define GAMES_FILE PLUGIN_DIR "/sudoku.levels" #define GAMES_FILE PLUGIN_DIR "/sudoku.levels"
@ -2429,7 +2429,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
struct sudoku_state_t state; struct sudoku_state_t state;
/* plugin init */ /* plugin init */
TEST_PLUGIN_API(api);
rb = api; rb = api;
/* end of plugin init */ /* end of plugin init */

View file

@ -18,6 +18,8 @@
****************************************************************************/ ****************************************************************************/
#include "plugin.h" #include "plugin.h"
PLUGIN_HEADER
static struct plugin_api* rb; static struct plugin_api* rb;
static char *audiobuf; static char *audiobuf;
@ -265,8 +267,6 @@ static bool vbr_fix(char *selected_file)
enum plugin_status plugin_start(struct plugin_api* api, void *parameter) enum plugin_status plugin_start(struct plugin_api* api, void *parameter)
{ {
TEST_PLUGIN_API(api);
rb = api; rb = api;
if (!parameter) if (!parameter)

View file

@ -32,6 +32,8 @@
#ifndef SIMULATOR // not for simulator by now #ifndef SIMULATOR // not for simulator by now
#ifdef HAVE_LCD_BITMAP // and definitely not for the Player, haha #ifdef HAVE_LCD_BITMAP // and definitely not for the Player, haha
PLUGIN_HEADER
/* variable button definitions */ /* variable button definitions */
#if CONFIG_KEYPAD == RECORDER_PAD #if CONFIG_KEYPAD == RECORDER_PAD
#define VIDEO_STOP_SEEK BUTTON_PLAY #define VIDEO_STOP_SEEK BUTTON_PLAY
@ -984,11 +986,6 @@ int main(char* filename)
enum plugin_status plugin_start(struct plugin_api* api, void* parameter) enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
{ {
/* this macro should be called as the first thing you do in the plugin.
it test that the api version and model the plugin was compiled for
matches the machine it is running on */
TEST_PLUGIN_API(api);
rb = api; // copy to global api pointer rb = api; // copy to global api pointer
if (parameter == NULL) if (parameter == NULL)

View file

@ -20,9 +20,7 @@
#include "plugin.h" #include "plugin.h"
#include <ctype.h> #include <ctype.h>
#if PLUGIN_API_VERSION < 3 PLUGIN_HEADER
#error Scrollbar function requires PLUGIN_API_VERSION 3 at least
#endif
#define SETTINGS_FILE "/.rockbox/viewers/viewer.dat" #define SETTINGS_FILE "/.rockbox/viewers/viewer.dat"
@ -1022,7 +1020,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* file)
int i; int i;
int ok; int ok;
TEST_PLUGIN_API(api);
rb = api; rb = api;
if (!file) if (!file)

View file

@ -19,6 +19,8 @@
#if defined(HAVE_LCD_BITMAP) && (CONFIG_CODEC != SWCODEC) #if defined(HAVE_LCD_BITMAP) && (CONFIG_CODEC != SWCODEC)
PLUGIN_HEADER
/* variable button definitions */ /* variable button definitions */
#if CONFIG_KEYPAD == RECORDER_PAD #if CONFIG_KEYPAD == RECORDER_PAD
#define VUMETER_QUIT BUTTON_OFF #define VUMETER_QUIT BUTTON_OFF
@ -427,7 +429,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) {
int button; int button;
int lastbutton = BUTTON_NONE; int lastbutton = BUTTON_NONE;
TEST_PLUGIN_API(api);
(void) parameter; (void) parameter;
rb = api; rb = api;

View file

@ -20,6 +20,8 @@
#include <codecs/libwavpack/wavpack.h> #include <codecs/libwavpack/wavpack.h>
PLUGIN_HEADER
#define SAMPLES_PER_BLOCK 22050 #define SAMPLES_PER_BLOCK 22050
static struct plugin_api* rb; static struct plugin_api* rb;
@ -287,8 +289,6 @@ static int wav2wv (char *filename)
enum plugin_status plugin_start(struct plugin_api* api, void *parameter) enum plugin_status plugin_start(struct plugin_api* api, void *parameter)
{ {
TEST_PLUGIN_API(api);
rb = api; rb = api;
if (!parameter) if (!parameter)

View file

@ -20,6 +20,8 @@
#if defined(HAVE_LCD_BITMAP) && (CONFIG_KEYPAD == RECORDER_PAD) #if defined(HAVE_LCD_BITMAP) && (CONFIG_KEYPAD == RECORDER_PAD)
PLUGIN_HEADER
/* size of the field the worm lives in */ /* size of the field the worm lives in */
#define FIELD_RECT_X 1 #define FIELD_RECT_X 1
#define FIELD_RECT_Y 1 #define FIELD_RECT_Y 1
@ -1891,7 +1893,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
bool worm_dead = false; bool worm_dead = false;
int button; int button;
TEST_PLUGIN_API(api);
(void)(parameter); (void)(parameter);
rb = api; rb = api;

6
tools/configure vendored
View file

@ -427,7 +427,7 @@ appsdir='\$(ROOTDIR)/apps'
echo "15 - iPod Video" echo "15 - iPod Video"
echo "16 - iriver iFP-790" echo "16 - iriver iFP-790"
getit=`input`; target_id=`input`;
# Set of tools built for all target platforms: # Set of tools built for all target platforms:
toolset="rdf2binary convbdf" toolset="rdf2binary convbdf"
@ -437,7 +437,7 @@ appsdir='\$(ROOTDIR)/apps'
iriverbitmaptools="$toolset scramble descramble mkboot bmp2rb codepages" iriverbitmaptools="$toolset scramble descramble mkboot bmp2rb codepages"
ipodbitmaptools="$toolset scramble ipod_fw bmp2rb codepages" ipodbitmaptools="$toolset scramble ipod_fw bmp2rb codepages"
case $getit in case $target_id in
1) 1)
archos="player" archos="player"
@ -881,6 +881,7 @@ sed > Makefile \
-e "s,@ROOTDIR@,${rootdir},g" \ -e "s,@ROOTDIR@,${rootdir},g" \
-e "s,@DEBUG@,${debug},g" \ -e "s,@DEBUG@,${debug},g" \
-e "s,@MEMORY@,${memory},g" \ -e "s,@MEMORY@,${memory},g" \
-e "s,@TARGET_ID@,${target_id},g" \
-e "s,@TARGET@,${target},g" \ -e "s,@TARGET@,${target},g" \
-e "s,@ARCHOS@,${archos},g" \ -e "s,@ARCHOS@,${archos},g" \
-e "s,@LANGUAGE@,${language},g" \ -e "s,@LANGUAGE@,${language},g" \
@ -927,6 +928,7 @@ export DEBUG=@DEBUG@
export ARCHOS=@ARCHOS@ export ARCHOS=@ARCHOS@
export ARCHOSROM=@ARCHOSROM@ export ARCHOSROM=@ARCHOSROM@
export FLASHFILE=@FLASHFILE@ export FLASHFILE=@FLASHFILE@
export TARGET_ID=@TARGET_ID@
export TARGET=@TARGET@ export TARGET=@TARGET@
export OBJDIR=@PWD@ export OBJDIR=@PWD@
export BUILDDIR=@PWD@ export BUILDDIR=@PWD@