| @@ -14,7 +14,7 @@ CXXFLAGS= @CXXFLAGS@ | |||
| INCPATH = -I/usr/X11R6/include | |||
| LINK = g++ -shared | |||
| LFLAGS = | |||
| LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -lm -ldl -pthread | |||
| LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -ldl -pthread | |||
| MOC = moc | |||
| UIC = | |||
| @@ -1,4 +1,3 @@ | |||
| # Generated automatically from Makefile.in by configure. | |||
| ############################################################################# | |||
| # Makefile for building LFOPlugin.so | |||
| # Generated by tmake at 22:13, 2001/09/17 | |||
| @@ -15,7 +14,7 @@ CXXFLAGS= -pipe -Wall -O3 -ffast-math -DNO_DEBUG -Wno-unused -fPIC -fPIC | |||
| INCPATH = -I/usr/X11R6/include | |||
| LINK = g++ -shared | |||
| LFLAGS = | |||
| LIBS = -L/usr/X11R6/lib -lfltk -lGL -lXext -lX11 -lm -ldl | |||
| LIBS = -L/usr/X11R6/lib -L/usr/X11R6/lib -lfltk -lGL -lGL -lXext -lX11 -ldl | |||
| MOC = moc | |||
| UIC = | |||
| @@ -1,4 +1,3 @@ | |||
| # Generated automatically from Makefile.in by configure. | |||
| ############################################################################# | |||
| # Makefile for building MeterPlugin.so | |||
| ############################################################################# | |||
| @@ -12,7 +11,7 @@ CXXFLAGS= -pipe -Wall -O3 -ffast-math -DNO_DEBUG -Wno-unused -fPIC -fPIC | |||
| INCPATH = -I/usr/X11R6/include | |||
| LINK = g++ -shared | |||
| LFLAGS = | |||
| LIBS = -L/usr/X11R6/lib -lfltk -lGL -lXext -lX11 -lm -ldl | |||
| LIBS = -L/usr/X11R6/lib -L/usr/X11R6/lib -lfltk -lGL -lGL -lXext -lX11 -ldl | |||
| MOC = moc | |||
| UIC = | |||
| @@ -14,7 +14,7 @@ CXXFLAGS= @CXXFLAGS@ | |||
| INCPATH = -I/usr/X11R6/include | |||
| LINK = g++ -shared | |||
| LFLAGS = | |||
| LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -lm -ldl | |||
| LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -ldl | |||
| MOC = moc | |||
| UIC = | |||
| @@ -14,7 +14,7 @@ CXXFLAGS= @CXXFLAGS@ | |||
| INCPATH = -I/usr/X11R6/include | |||
| LINK = g++ -shared | |||
| LFLAGS = | |||
| LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -lm -ldl | |||
| LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -ldl | |||
| MOC = moc | |||
| UIC = | |||
| @@ -14,7 +14,7 @@ CXXFLAGS= @CXXFLAGS@ | |||
| INCPATH = -I/usr/X11R6/include | |||
| LINK = g++ -shared | |||
| LFLAGS = | |||
| LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -lm -ldl | |||
| LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -ldl | |||
| MOC = moc | |||
| UIC = | |||
| @@ -14,7 +14,7 @@ CXXFLAGS= @CXXFLAGS@ | |||
| INCPATH = -I/usr/X11R6/include | |||
| LINK = g++ -shared | |||
| LFLAGS = | |||
| LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -lm -ldl | |||
| LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -ldl | |||
| MOC = moc | |||
| UIC = | |||
| @@ -15,7 +15,7 @@ CXXFLAGS= @CXXFLAGS@ | |||
| INCPATH = -I/usr/X11R6/include | |||
| LINK = g++ -shared | |||
| LFLAGS = | |||
| LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -lm -ldl | |||
| LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -ldl | |||
| MOC = moc | |||
| UIC = | |||
| @@ -14,7 +14,7 @@ CXXFLAGS= @CXXFLAGS@ | |||
| INCPATH = -I/usr/X11R6/include | |||
| LINK = g++ -shared | |||
| LFLAGS = | |||
| LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -lm -ldl | |||
| LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -ldl | |||
| MOC = moc | |||
| UIC = | |||
| @@ -14,7 +14,7 @@ CXXFLAGS= @CXXFLAGS@ | |||
| INCPATH = -I/usr/X11R6/include | |||
| LINK = g++ -shared | |||
| LFLAGS = | |||
| LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -lm -ldl | |||
| LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -ldl | |||
| MOC = moc | |||
| UIC = | |||
| @@ -70,10 +70,17 @@ m_Mode(PLAYM) | |||
| m_StreamDesc.TriggerUp = true; | |||
| m_StreamDesc.SampleRate = 44100; | |||
| m_StreamDesc.Stereo = false; | |||
| m_AudioCH->Register("Volume",&m_StreamDesc.Volume); | |||
| m_AudioCH->Register("Pitch",&m_StreamDesc.PitchMod,ChannelHandler::INPUT); | |||
| m_AudioCH->RegisterData("FileName",ChannelHandler::INPUT,&m_FileNameArg,sizeof(m_FileNameArg)); | |||
| m_AudioCH->Register("Time",&m_TimeArg); | |||
| m_AudioCH->Register("TimeOut",&m_TimeOut,ChannelHandler::OUTPUT); | |||
| } | |||
| StreamPlugin::~StreamPlugin() | |||
| { | |||
| cerr << "I'm deleted" << endl; | |||
| } | |||
| PluginInfo &StreamPlugin::Initialise(const HostInfo *Host) | |||
| @@ -84,11 +91,9 @@ PluginInfo &StreamPlugin::Initialise(const HostInfo *Host) | |||
| SpiralGUIType *StreamPlugin::CreateGUI() | |||
| { | |||
| m_GUI = new StreamPluginGUI(m_PluginInfo.Width, | |||
| m_PluginInfo.Height, | |||
| this,m_HostInfo); | |||
| m_GUI->hide(); | |||
| return m_GUI; | |||
| return new StreamPluginGUI(m_PluginInfo.Width, | |||
| m_PluginInfo.Height, | |||
| this,m_AudioCH,m_HostInfo); | |||
| } | |||
| void StreamPlugin::Execute() | |||
| @@ -137,8 +142,29 @@ void StreamPlugin::Execute() | |||
| m_GlobalPos+=m_StreamDesc.PitchMod+CVPitch; | |||
| } | |||
| if (((StreamPluginGUI*)m_GUI)->visible()) | |||
| ((StreamPluginGUI*)m_GUI)->SetTime(GetTime()); | |||
| //if (((StreamPluginGUI*)m_GUI)->visible()) | |||
| // ((StreamPluginGUI*)m_GUI)->SetTime(GetTime()); | |||
| //Joe must fix this. | |||
| m_TimeOut=GetTime(); | |||
| } | |||
| } | |||
| void StreamPlugin::ExecuteCommands() | |||
| { | |||
| if (m_AudioCH->IsCommandWaiting()) | |||
| { | |||
| switch(m_AudioCH->GetCommand()) | |||
| { | |||
| case (LOAD) : OpenStream(m_FileNameArg); break; | |||
| case (RESTART) : Restart(); break; | |||
| case (STOP) : Stop(); break; | |||
| case (PLAY) : Play(); break; | |||
| case (HALF) : m_StreamDesc.PitchMod/=2; break; | |||
| case (RESET) : m_StreamDesc.PitchMod=1; break; | |||
| case (DOUBLE) : m_StreamDesc.PitchMod*=2; break; | |||
| case (NUDGE) : Nudge(); break; | |||
| case (SET_TIME) : SetTime(m_TimeArg); break; | |||
| } | |||
| } | |||
| } | |||
| @@ -195,9 +221,10 @@ void StreamPlugin::OpenStream(const string &Name) | |||
| if (m_StreamDesc.Stereo) | |||
| { | |||
| m_StreamDesc.Pitch*=2; | |||
| ((StreamPluginGUI*)m_GUI)->SetMaxTime(GetLength()); | |||
| //((StreamPluginGUI*)m_GUI)->SetMaxTime(GetLength()); | |||
| } | |||
| else ((StreamPluginGUI*)m_GUI)->SetMaxTime(GetLength()/2); | |||
| //else ((StreamPluginGUI*)m_GUI)->SetMaxTime(GetLength()/2); | |||
| //Joe this must use the chanel handler | |||
| } | |||
| @@ -44,12 +44,15 @@ class StreamPlugin : public SpiralPlugin | |||
| public: | |||
| enum Mode{PLAYM,STOPM}; | |||
| enum GUICommands{LOAD,RESTART,STOP,PLAY,HALF,RESET,DOUBLE,NUDGE,SET_TIME}; | |||
| StreamPlugin(); | |||
| virtual ~StreamPlugin(); | |||
| virtual PluginInfo &Initialise(const HostInfo *Host); | |||
| virtual SpiralGUIType *CreateGUI(); | |||
| virtual void Execute(); | |||
| virtual void ExecuteCommands(); | |||
| virtual void StreamOut(ostream &s); | |||
| virtual void StreamIn(istream &s); | |||
| @@ -85,6 +88,10 @@ private: | |||
| float m_GlobalPos; | |||
| float m_Pitch; | |||
| Mode m_Mode; | |||
| char m_FileNameArg[256]; | |||
| float m_TimeArg; | |||
| float m_TimeOut; | |||
| }; | |||
| #endif | |||
| @@ -26,15 +26,21 @@ static const int GUIBG_COLOUR = 144; | |||
| static const int GUIBG2_COLOUR = 145; | |||
| char PitchLabel[256]; | |||
| bool StreamPluginGUI::TimerSet=false; | |||
| vector<StreamPluginGUI*> StreamPluginGUI::PluginList; | |||
| //////////////////////////////////////////// | |||
| StreamPluginGUI::StreamPluginGUI(int w, int h,StreamPlugin *o,const HostInfo *Info) : | |||
| SpiralPluginGUI(w,h,o) | |||
| StreamPluginGUI::StreamPluginGUI(int w, int h,StreamPlugin *o,ChannelHandler *ch,const HostInfo *Info) : | |||
| SpiralPluginGUI(w,h,o,ch) | |||
| { | |||
| m_Plugin=o; | |||
| StartTimer(this); | |||
| int Width=20; | |||
| int Height=100; | |||
| //What are Width and Height for. | |||
| m_PitchValue=1.0f; | |||
| m_Load = new Fl_Button(2, 130, 30, 30, "Load"); | |||
| m_Load->labelsize(9); | |||
| @@ -158,8 +164,17 @@ SpiralPluginGUI(w,h,o) | |||
| end(); | |||
| } | |||
| void StreamPluginGUI::SetTime(float t) | |||
| StreamPluginGUI::~StreamPluginGUI() | |||
| { | |||
| cerr << "~StreamPluginGUI" << endl; | |||
| StopTimer(this); | |||
| } | |||
| void StreamPluginGUI::SetTime() | |||
| { | |||
| cerr << "foo" << endl; | |||
| float t=m_GUICH->GetFloat("TimeOut"); | |||
| m_Pos->value(t); | |||
| m_Display[5]->value((int)(t*100)%10); | |||
| @@ -174,11 +189,13 @@ void StreamPluginGUI::SetTime(float t) | |||
| } | |||
| void StreamPluginGUI::UpdateValues() | |||
| void StreamPluginGUI::UpdateValues(SpiralPlugin *o) | |||
| { | |||
| m_Volume->value(m_Plugin->GetVolume()); | |||
| m_Pitch->value(m_Plugin->GetPitch()+10); | |||
| m_Loop->value(m_Plugin->GetLoop()); | |||
| StreamPlugin *Plugin = (StreamPlugin*)o; | |||
| m_Volume->value(Plugin->GetVolume()); | |||
| m_Pitch->value(Plugin->GetPitch()+10); | |||
| m_Loop->value(Plugin->GetLoop()); | |||
| } | |||
| inline void StreamPluginGUI::cb_Load_i(Fl_Button* o, void* v) | |||
| @@ -187,33 +204,36 @@ inline void StreamPluginGUI::cb_Load_i(Fl_Button* o, void* v) | |||
| if (fn && fn!='\0') | |||
| { | |||
| m_Plugin->OpenStream(fn); | |||
| strcpy(m_TextBuf,fn); | |||
| m_GUICH->Set("FileName",m_TextBuf); | |||
| m_GUICH->SetCommand(StreamPlugin::LOAD); | |||
| } | |||
| } | |||
| void StreamPluginGUI::cb_Load(Fl_Button* o, void* v) | |||
| { ((StreamPluginGUI*)(o->parent()))->cb_Load_i(o,v);} | |||
| inline void StreamPluginGUI::cb_Volume_i(Fl_Knob* o, void* v) | |||
| { m_Plugin->SetVolume(o->value()); } | |||
| { m_GUICH->Set("Volume",(float)o->value()); } | |||
| void StreamPluginGUI::cb_Volume(Fl_Knob* o, void* v) | |||
| { ((StreamPluginGUI*)(o->parent()))->cb_Volume_i(o,v);} | |||
| inline void StreamPluginGUI::cb_Pitch_i(Fl_Slider* o, void* v) | |||
| { | |||
| m_Plugin->SetPitch(o->value()-10); | |||
| m_GUICH->Set("Pitch",(float)o->value()-10); | |||
| sprintf(PitchLabel,"%1.3f ",o->value()-10); | |||
| m_Pitch->label(PitchLabel); | |||
| m_PitchValue=o->value()-10; | |||
| } | |||
| void StreamPluginGUI::cb_Pitch(Fl_Slider* o, void* v) | |||
| { ((StreamPluginGUI*)(o->parent()))->cb_Pitch_i(o,v);} | |||
| inline void StreamPluginGUI::cb_Loop_i(Fl_Button* o, void* v) | |||
| inline void StreamPluginGUI::cb_Loop_i(Fl_Button* o, void* v) //Why is this function named so. | |||
| { | |||
| float p=m_Plugin->GetPitch()*2; | |||
| m_Plugin->SetPitch(p); | |||
| sprintf(PitchLabel,"%1.3f ",p); | |||
| m_PitchValue*=2.0f; | |||
| m_GUICH->SetCommand(StreamPlugin::DOUBLE); | |||
| sprintf(PitchLabel,"%1.3f ",m_PitchValue); | |||
| m_Pitch->label(PitchLabel); | |||
| m_Pitch->value(p+10); | |||
| m_Pitch->value(m_PitchValue+10); | |||
| redraw(); | |||
| } | |||
| void StreamPluginGUI::cb_Loop(Fl_Button* o, void* v) | |||
| @@ -221,37 +241,38 @@ void StreamPluginGUI::cb_Loop(Fl_Button* o, void* v) | |||
| inline void StreamPluginGUI::cb_Div_i(Fl_Button* o, void* v) | |||
| { | |||
| float p=m_Plugin->GetPitch()/2.0f; | |||
| m_Plugin->SetPitch(p); | |||
| sprintf(PitchLabel,"%1.3f ",p); | |||
| m_PitchValue/=2.0f; | |||
| m_GUICH->SetCommand(StreamPlugin::HALF); | |||
| sprintf(PitchLabel,"%1.3f ",m_PitchValue); | |||
| m_Pitch->label(PitchLabel); | |||
| m_Pitch->value(p+10); | |||
| m_Pitch->value(m_PitchValue+10); | |||
| redraw(); | |||
| } | |||
| void StreamPluginGUI::cb_Div(Fl_Button* o, void* v) | |||
| { ((StreamPluginGUI*)(o->parent()))->cb_Div_i(o,v);} | |||
| inline void StreamPluginGUI::cb_ToStart_i(Fl_Button* o, void* v) | |||
| { m_Plugin->Restart(); } | |||
| { m_GUICH->SetCommand(StreamPlugin::RESTART); } | |||
| void StreamPluginGUI::cb_ToStart(Fl_Button* o, void* v) | |||
| { ((StreamPluginGUI*)(o->parent()))->cb_ToStart_i(o,v);} | |||
| inline void StreamPluginGUI::cb_Stop_i(Fl_Button* o, void* v) | |||
| { m_Plugin->Stop(); } | |||
| { m_GUICH->SetCommand(StreamPlugin::STOP); } | |||
| void StreamPluginGUI::cb_Stop(Fl_Button* o, void* v) | |||
| { ((StreamPluginGUI*)(o->parent()))->cb_Stop_i(o,v);} | |||
| inline void StreamPluginGUI::cb_Play_i(Fl_Button* o, void* v) | |||
| { m_Plugin->Play(); } | |||
| { m_GUICH->SetCommand(StreamPlugin::PLAY); } | |||
| void StreamPluginGUI::cb_Play(Fl_Button* o, void* v) | |||
| { ((StreamPluginGUI*)(o->parent()))->cb_Play_i(o,v);} | |||
| inline void StreamPluginGUI::cb_Reset_i(Fl_Button* o, void* v) | |||
| { | |||
| m_Plugin->SetPitch(1); | |||
| m_GUICH->SetCommand(StreamPlugin::RESET); | |||
| sprintf(PitchLabel,"%1.3f ",1.0); | |||
| m_Pitch->label(PitchLabel); | |||
| m_Pitch->value(11); | |||
| m_PitchValue=1.0f; | |||
| redraw(); | |||
| } | |||
| void StreamPluginGUI::cb_Reset(Fl_Button* o, void* v) | |||
| @@ -259,13 +280,50 @@ void StreamPluginGUI::cb_Reset(Fl_Button* o, void* v) | |||
| inline void StreamPluginGUI::cb_Nudge_i(Fl_Button* o, void* v) | |||
| { | |||
| m_Plugin->Nudge(); | |||
| m_GUICH->SetCommand(StreamPlugin::NUDGE); | |||
| } | |||
| void StreamPluginGUI::cb_Nudge(Fl_Button* o, void* v) | |||
| { ((StreamPluginGUI*)(o->parent()))->cb_Nudge_i(o,v);} | |||
| inline void StreamPluginGUI::cb_Pos_i(Fl_Slider* o, void* v) | |||
| { m_Plugin->SetTime(o->value()); } | |||
| { | |||
| m_GUICH->Set("Time",(float)o->value()); | |||
| m_GUICH->SetCommand(StreamPlugin::SET_TIME); | |||
| } | |||
| void StreamPluginGUI::cb_Pos(Fl_Slider* o, void* v) | |||
| { ((StreamPluginGUI*)(o->parent()))->cb_Pos_i(o,v);} | |||
| //The timer stuff | |||
| #define TIME_OUT_DURATION 0.01 | |||
| //This is temparary, should use a variable, and let it be set from the command line ore something. | |||
| void StreamPluginGUI::StartTimer(StreamPluginGUI* p) | |||
| { | |||
| if (!TimerSet) | |||
| { | |||
| Fl::add_timeout(TIME_OUT_DURATION,&StreamPluginGUI::TimerCallBack); | |||
| TimerSet=True; | |||
| } | |||
| PluginList.push_back(p); | |||
| } | |||
| void StreamPluginGUI::StopTimer(StreamPluginGUI* p) | |||
| { | |||
| cerr << "StopTimer" << endl; | |||
| for (vector<StreamPluginGUI*>::iterator i=PluginList.begin();i!=PluginList.end();i++) | |||
| if ((*i)==p) | |||
| i=PluginList.erase(i); | |||
| } | |||
| //If Spiral synth modular unloaded the .so file this is in, the timeout | |||
| //would probably cause a problem | |||
| void StreamPluginGUI::TimerCallBack(void* x) | |||
| { | |||
| /*for(vector<const StreamPluginGUI*>::iterator i=PluginList.begin(); | |||
| i!=PluginList.end();i++) | |||
| {*/ | |||
| for (vector<StreamPluginGUI*>::iterator i=PluginList.begin();i!=PluginList.end();i++) | |||
| (*i)->SetTime(); | |||
| Fl::add_timeout(TIME_OUT_DURATION,&StreamPluginGUI::TimerCallBack); | |||
| } | |||
| @@ -32,18 +32,40 @@ | |||
| #ifndef MixerGUI | |||
| #define MixerGUI | |||
| class StreamPluginGUI; | |||
| /*struct Compare_thingy | |||
| { | |||
| bool operator() (const StreamPluginGUI* s1,const StreamPluginGUI* s2) const | |||
| { | |||
| return s1<s2; | |||
| } | |||
| };*/ | |||
| class StreamPluginGUI : public SpiralPluginGUI | |||
| { | |||
| public: | |||
| StreamPluginGUI(int w, int h, StreamPlugin *o,const HostInfo *Info); | |||
| StreamPluginGUI(int w, int h, StreamPlugin *o,ChannelHandler *ch,const HostInfo *Info); | |||
| virtual ~StreamPluginGUI(); | |||
| virtual void UpdateValues(); | |||
| virtual SpiralPlugin* GetPlugin() { return m_Plugin; } | |||
| void SetTime(float t); | |||
| virtual void UpdateValues(SpiralPlugin *o); | |||
| void SetTime(); | |||
| void SetMaxTime(float t) { m_Pos->maximum(t); } | |||
| StreamPlugin *m_Plugin; | |||
| //Stuff for the timer | |||
| static bool TimerSet; | |||
| /*static struct Compare_thingy | |||
| { | |||
| bool operator() (const StreamPluginGUI* s1,const StreamPluginGUI* s2) const | |||
| { | |||
| return s1<s2; | |||
| } | |||
| };*/ | |||
| //static set<const StreamPluginGUI*,Compare_thingy> PluginList; | |||
| static vector<StreamPluginGUI*> PluginList; | |||
| static void StartTimer(StreamPluginGUI* p); | |||
| static void StopTimer(StreamPluginGUI* p); | |||
| static void TimerCallBack(void* x); | |||
| private: | |||
| Fl_Button* m_Load; | |||
| @@ -62,6 +84,10 @@ private: | |||
| Fl_SevenSeg* m_Display[6]; | |||
| Fl_Slider* m_Pos; | |||
| char m_TextBuf[256]; | |||
| float m_PitchValue; | |||
| //// Callbacks //// | |||
| inline void cb_Load_i(Fl_Button* o, void* v); | |||
| @@ -14,7 +14,7 @@ CXXFLAGS= @CXXFLAGS@ | |||
| INCPATH = -I/usr/X11R6/include | |||
| LINK = g++ -shared | |||
| LFLAGS = | |||
| LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -lm -ldl | |||
| LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -ldl | |||
| MOC = moc | |||
| UIC = | |||
| @@ -14,7 +14,7 @@ CXXFLAGS= @CXXFLAGS@ | |||
| INCPATH = -I/usr/X11R6/include | |||
| LINK = g++ -shared | |||
| LFLAGS = | |||
| LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -lm -ldl | |||
| LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -ldl | |||
| MOC = moc | |||
| UIC = | |||
| @@ -14,7 +14,7 @@ CXXFLAGS= @CXXFLAGS@ | |||
| INCPATH = -I/usr/X11R6/include | |||
| LINK = g++ -shared | |||
| LFLAGS = | |||
| LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -lm -ldl | |||
| LIBS = -L/usr/X11R6/lib @FLTK_LIBS@ -lGL -lXext -lX11 -ldl | |||
| MOC = moc | |||
| UIC = | |||