Browse Source

Automatic scanning of plugins added

master
waxfrenzy 22 years ago
parent
commit
043418c1b9
1 changed files with 77 additions and 27 deletions
  1. +77
    -27
      SpiralSynthModularInfo.C

+ 77
- 27
SpiralSynthModularInfo.C View File

@@ -16,14 +16,19 @@
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/

#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <dlfcn.h>

#include "SpiralSynthModularInfo.h"
#include "SpiralSynthPluginLocation.h"
#include "FL/fl_draw.h"

string SpiralInfo::LOCALE = "EN";
int SpiralInfo::BUFSIZE = 512;
int SpiralInfo::FRAGSIZE = 256;
int SpiralInfo::FRAGCOUNT = 8;
int SpiralInfo::BUFSIZE = 512;
int SpiralInfo::FRAGSIZE = 256;
int SpiralInfo::FRAGCOUNT = 8;
int SpiralInfo::SAMPLERATE = 44100;
long SpiralInfo::MAXSAMPLE = 32767;
float SpiralInfo::VALUECONV = 1.0f/MAXSAMPLE;
@@ -55,43 +60,44 @@ SpiralSynthModularInfo* SpiralSynthModularInfo::Get()
{
m_SpiralSynthModularInfo = new SpiralSynthModularInfo;
}
return m_SpiralSynthModularInfo;
}

SpiralSynthModularInfo::SpiralSynthModularInfo()
{
{
BGIMG="None";
// default plugins + path, check these before dist...
// this is one of the two plugin lists, th other is in
// the SpiralSound/Plugins/PluginList.txt for the
// the SpiralSound/Plugins/PluginList.txt for the
// configure/make/install scripts
PLUGIN_PATH = PLUGIN_PATH_LOCATION;

PLUGINVEC.push_back("OutputPlugin.so");
PLUGINVEC.push_back("DiskWriterPlugin.so");
PLUGINVEC.push_back("ScopePlugin.so");
PLUGINVEC.push_back("MidiPlugin.so");
PLUGINVEC.push_back("KeyboardPlugin.so");
PLUGINVEC.push_back("ControllerPlugin.so");
PLUGINVEC.push_back("MatrixPlugin.so");
PLUGINVEC.push_back("SeqSelectorPlugin.so");
PLUGINVEC.push_back("SequencerPlugin.so");
#ifdef SSM_EXPLICIT_PLUGIN_LIST
PLUGINVEC.push_back("OutputPlugin.so");
PLUGINVEC.push_back("DiskWriterPlugin.so");
PLUGINVEC.push_back("ScopePlugin.so");
PLUGINVEC.push_back("MidiPlugin.so");
PLUGINVEC.push_back("KeyboardPlugin.so");
PLUGINVEC.push_back("ControllerPlugin.so");
PLUGINVEC.push_back("MatrixPlugin.so");
PLUGINVEC.push_back("SeqSelectorPlugin.so");
PLUGINVEC.push_back("SequencerPlugin.so");
PLUGINVEC.push_back("PoshSamplerPlugin.so");
PLUGINVEC.push_back("WaveTablePlugin.so");
PLUGINVEC.push_back("OscillatorPlugin.so");
PLUGINVEC.push_back("WaveTablePlugin.so");
PLUGINVEC.push_back("OscillatorPlugin.so");
PLUGINVEC.push_back("LFOPlugin.so");
PLUGINVEC.push_back("NoisePlugin.so");
PLUGINVEC.push_back("EnvelopePlugin.so");
PLUGINVEC.push_back("EnvelopePlugin.so");
PLUGINVEC.push_back("SampleHoldPlugin.so");
PLUGINVEC.push_back("NoteSnapPlugin.so");
PLUGINVEC.push_back("MixerPlugin.so");
PLUGINVEC.push_back("StereoMixerPlugin.so");
PLUGINVEC.push_back("AmpPlugin.so");
PLUGINVEC.push_back("RingModPlugin.so");
PLUGINVEC.push_back("FilterPlugin.so");
PLUGINVEC.push_back("NoteSnapPlugin.so");
PLUGINVEC.push_back("MixerPlugin.so");
PLUGINVEC.push_back("StereoMixerPlugin.so");
PLUGINVEC.push_back("AmpPlugin.so");
PLUGINVEC.push_back("RingModPlugin.so");
PLUGINVEC.push_back("FilterPlugin.so");
PLUGINVEC.push_back("SVFilterPlugin.so");
PLUGINVEC.push_back("MoogFilterPlugin.so");
PLUGINVEC.push_back("FormantPlugin.so");
@@ -111,13 +117,57 @@ SpiralSynthModularInfo::SpiralSynthModularInfo()
PLUGINVEC.push_back("SwitchPlugin.so");
PLUGINVEC.push_back("BeatMatchPlugin.so");
PLUGINVEC.push_back("LogicPlugin.so");
#else
// Scan plugin path for plugins.
DIR *dp;
struct dirent *ep;
struct stat sb;
void *handle;
string fullpath;
const char *path = PLUGIN_PATH.c_str();

dp = opendir(path);
if (!dp) {
cerr << "WARNING: Could not open path " << path << endl;
} else {
while ((ep = readdir(dp))) {

// Need full path
fullpath = path;
fullpath.append(ep->d_name);

// Stat file to get type
if (!stat(fullpath.c_str(), &sb)) {

// We only want regular files
if (S_ISREG(sb.st_mode)) {

// We're not fussed about resolving symbols yet, since we are just
// checking if it's a DLL.
handle = dlopen(fullpath.c_str(), RTLD_LAZY);

if (!handle) {
cerr << "WARNING: File " << path << ep->d_name
<< " could not be examined" << endl;
cerr << "dlerror() output:" << endl;
cerr << dlerror() << endl;
} else {

// It's a DLL. Add name to list
PLUGINVEC.push_back(ep->d_name);
}
}
}
}
}
#endif
}

void SpiralSynthModularInfo::StreamInPrefs(istream &s)
{
// call base class
SpiralInfo::StreamInPrefs(s);
char temp[256];
s>>temp>>temp;
s>>temp>>temp>>GUICOL_Tool;


Loading…
Cancel
Save