bool_t iface_plugin_set_current (PluginHandle * plugin) { hook_call ("config save", NULL); /* tell interface to save layout */ if (current_plugin != NULL) { AUDDBG ("Unloading plugin widgets.\n"); general_cleanup (); AUDDBG ("Unloading visualizers.\n"); vis_cleanup (); AUDDBG ("Unloading %s.\n", plugin_get_name (current_plugin)); interface_unload (); current_plugin = NULL; } if (plugin != NULL) { AUDDBG ("Loading %s.\n", plugin_get_name (plugin)); if (! interface_load (plugin)) return FALSE; current_plugin = plugin; AUDDBG ("Loading visualizers.\n"); vis_init (); AUDDBG ("Loading plugin widgets.\n"); general_init (); } return TRUE; }
static struct TVisualBase * vis_modopen(struct TVisualBase *mod, TTAGITEM *tags) { struct TExecBase *TExecBase = TGetExecBase(mod); struct TVisualBase *inst = TNULL; TBOOL success = TTRUE; TLock(mod->vis_Lock); if (mod->vis_RefCount == 0) success = vis_init(mod); if (success) mod->vis_RefCount++; TUnlock(mod->vis_Lock); if (success) { struct TVisualBase *base = (struct TVisualBase *) TGetTag(tags, TVisual_Attach, TNULL); if (TGetTag(tags, TVisual_NewInstance, TFALSE)) base = mod; if (base) { inst = (struct TVisualBase *) TNewInstance((struct TModule *) base, base->vis_Module.tmd_PosSize, base->vis_Module.tmd_NegSize); if (inst) { TInitList(&inst->vis_ReqPool); TInitList(&inst->vis_WaitList); inst->vis_IMsgPort = (struct TMsgPort *) TGetTag(tags, TVisual_IMsgPort, TNULL); if (inst->vis_IMsgPort == TNULL) { inst->vis_IMsgPort = TCreatePort(TNULL); inst->vis_Flags |= TVISFL_IMSGPORT_OWNER; } inst->vis_CmdRPort = (struct TMsgPort *) TGetTag(tags, TVisual_CmdRPort, TNULL); if (inst->vis_CmdRPort == TNULL) { inst->vis_CmdRPort = TCreatePort(TNULL); inst->vis_Flags |= TVISFL_CMDRPORT_OWNER; } if (inst->vis_IMsgPort == TNULL || inst->vis_CmdRPort == TNULL) { vis_destroyports(inst); TFreeInstance(&inst->vis_Module); inst = TNULL; } } if (inst == TNULL) vis_modclose(mod); } else inst = mod; } return inst; }