static CDList * init_dynamic_plugins_dir (RemixEnv * env, char * dirname) { CDList * plugins = cd_list_new (env); DIR * dir; struct dirent * dirent; char * name; static char buf[BUFLEN]; struct stat statbuf; dir = opendir (dirname); if (!dir) { /* fail silently */ return CD_EMPTY_LIST; } while ((dirent = readdir (dir)) != NULL) { name = dirent->d_name; remix_dprintf ("[init_dynamic_plugins_dir] trying %s ... ", name); snprintf (buf, BUFLEN, "%s/%s", dirname, name); if (stat (buf, &statbuf) == -1) { remix_set_error (env, REMIX_ERROR_SYSTEM); } else if (remix_stat_regular (statbuf.st_mode)) { plugins = cd_list_join (env, plugins, remix_plugin_init (env, buf)); } } closedir (dir); return plugins; }
static RemixBase * remix_track_init (RemixEnv * env, RemixBase * base) { RemixTrack * track = (RemixTrack *)base; track->gain = 1.0; track->layers = cd_list_new (env); track->_mixstream_a = track->_mixstream_b = RemixNone; remix_track_replace_mixstreams (env, track); remix_track_optimise (env, track); return (RemixBase *)track; }
void remix_plugin_defaults_initialise (RemixEnv * env) { CDList * plugins = cd_list_new (env); plugins = cd_list_join (env, plugins, remix_plugin_initialise_static (env)); plugins = cd_list_join (env, plugins, remix_plugin_initialise_dynamic (env)); cd_list_apply (env, plugins, (CDFunc)_remix_register_plugin); cd_list_free (env, plugins); }
CDList * cd_list_copy (void * ctx, CDList * list) { CDList * new_list = cd_list_new (ctx); CDList * l; for (l = list; l; l = l->next) { new_list = cd_list_append (ctx, new_list, l->data); } return new_list; }
/* module init function */ CDList * __sndfile_init (RemixEnv * env) { CDList * plugins = cd_list_new (env); int i, count; SF_FORMAT_INFO info; RemixNamedParameter * param; sndfile_reader_plugin.init_scheme = cd_set_insert (env, sndfile_reader_plugin.init_scheme, PATH_KEY, CD_POINTER(&path_scheme)); plugins = cd_list_prepend (env, plugins, CD_POINTER(&sndfile_reader_plugin)); format_scheme.constraint.list = cd_list_new (env); sf_command (NULL, SFC_GET_FORMAT_MAJOR_COUNT, &count, sizeof (int)) ; for (i = 0; i < count ; i++) { info.format = i ; sf_command (NULL, SFC_GET_FORMAT_MAJOR, &info, sizeof (info)) ; param = remix_malloc (sizeof(RemixNamedParameter)); param->name = strdup (info.name); param->parameter = CD_INT(info.format); format_scheme.constraint.list = cd_list_append (env, format_scheme.constraint.list, CD_POINTER(param)); } sndfile_writer_plugin.init_scheme = cd_set_insert (env, sndfile_writer_plugin.init_scheme, PATH_KEY, CD_POINTER(&path_scheme)); plugins = cd_list_prepend (env, plugins, CD_POINTER(&sndfile_writer_plugin)); return plugins; }
/* module init function */ CDList * __gain_init (RemixEnv * env) { CDList * plugins = cd_list_new (env); gain_plugin.process_scheme = cd_set_insert (env, gain_plugin.process_scheme, GAIN_ENVELOPE_KEY, CD_POINTER(&gain_envelope_scheme)); plugins = cd_list_prepend (env, plugins, CD_POINTER(&gain_plugin)); return plugins; }
static CDList * remix_plugin_initialise_static (RemixEnv * env) { CDList * plugins = cd_list_new (env); plugins = cd_list_join (env, plugins, __gain_init (env)); #ifdef HAVE_LIBSNDFILE1 plugins = cd_list_join (env, plugins, __sndfile_init (env)); #endif return plugins; }
CDList * cd_list_clone (void * ctx, CDList * list, CDCloneFunc clone) { CDList * new_list = cd_list_new (ctx); CDList * l; CDScalar new_data; for (l = list; l; l = l->next) { new_data = CD_POINTER (clone (ctx, l->data.s_pointer)); new_list = cd_list_append (ctx, new_list, new_data); } return new_list; }
int main (int argc, char ** argv) { CDList * list, * list2; void * ctx; int a=1, b=2, d=4, f=6, g=7, k=11; int v=22, w=23; int z=26; ctx = NULL; printf ("creating new list\n"); list = cd_list_new (ctx); ildump (ctx, list); printf ("appending %d\n", f); list = cd_list_append (ctx, list, (CDScalar)(void *)(&f)); ildump (ctx, list); printf ("appending %d\n", k); list = cd_list_append (ctx, list, CD_POINTER(&k)); ildump (ctx, list); printf ("inserting %d\n", g); list = cd_list_insert (ctx, list, CD_TYPE_POINTER, CD_POINTER(&g), int_gt); ildump (ctx, list); printf ("inserting %d\n", w); list = cd_list_insert (ctx, list, CD_TYPE_POINTER, CD_POINTER(&w), int_gt); ildump (ctx, list); printf ("inserting %d\n", z); list = cd_list_insert (ctx, list, CD_TYPE_POINTER, CD_POINTER(&z), int_gt); ildump (ctx, list); printf ("inserting %d\n", b); list = cd_list_insert (ctx, list, CD_TYPE_POINTER, CD_POINTER(&b), int_gt); ildump (ctx, list); printf ("prepending %d\n", a); list = cd_list_prepend (ctx, list, CD_POINTER(&a)); ildump (ctx, list); printf ("removing %d\n", g); list = cd_list_remove (ctx, list, CD_TYPE_POINTER, CD_POINTER(&g)); ildump (ctx, list); printf ("adding %d after %d\n", d, b); list = cd_list_add_after (ctx, list, CD_TYPE_POINTER, CD_POINTER(&d), CD_POINTER(&b)); ildump (ctx, list); printf ("adding %d before %d\n", v, w); list = cd_list_add_before (ctx, list, CD_TYPE_POINTER, CD_POINTER(&v), CD_POINTER(&w)); ildump (ctx, list); printf ("cloning list\n"); list2 = cd_list_clone (ctx, list, int_clone); ildump (ctx, list2); printf ("freeing cloned list\n"); list2 = cd_list_free_all (ctx, list2); ildump (ctx, list2); exit (0); }