#include "plugin.h" #define FAVORITES_FILE "/favorites.m3u" /* welcome to the example rockbox plugin */ /* 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 in the plugin */ static struct plugin_api* rb; /* this is the plugin entry point */ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) { struct mp3entry* id3; char track_path[MAX_PATH+1]; int fd, seek, 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); /* if you don't use the parameter, you can do like this to avoid the compiler warning about it */ (void)parameter; /* if you are using a global api pointer, don't forget to copy it! otherwise you will get lovely "I04: IllInstr" errors... :-) */ rb = api; id3 = rb->mpeg_current_track(); if (!id3) return PLUGIN_ERROR; fd = rb->open(FAVORITES_FILE, O_WRONLY); // creat the file if it does not return on open. if (fd < 0) fd = rb->creat(FAVORITES_FILE, 0); if (fd > 0) { rb->strcpy(track_path, id3->path); len = rb->strlen(track_path); // seek to the end of file seek = rb->lseek(fd, 0, SEEK_END); // append the current mp3 path track_path[len] = '\n'; result = rb->write(fd, track_path, len + 1); track_path[len] = '\0'; rb->close(fd); } rb->splash(HZ*2, 0, true, "Saved Favorite"); return PLUGIN_OK; }