[Demudi-commits] r6 - in ams/trunk: . debian debian/patches

Free Ekanayaka free-guest@haydn.debian.org
Sat, 30 Oct 2004 05:18:17 -0600


Author: free-guest
Date: 2004-10-30 05:18:02 -0600 (Sat, 30 Oct 2004)
New Revision: 6

Added:
   ams/trunk/.#Makefile.1.3
   ams/trunk/.#configdialog.h.1.2
   ams/trunk/.#modularsynth.cpp.1.2
   ams/trunk/.#modularsynth.cpp.1.4
   ams/trunk/debian/
   ams/trunk/debian/.#changelog.1.3
   ams/trunk/debian/ams.1
   ams/trunk/debian/changelog
   ams/trunk/debian/control
   ams/trunk/debian/copyright
   ams/trunk/debian/dirs
   ams/trunk/debian/docs
   ams/trunk/debian/manpages
   ams/trunk/debian/menu
   ams/trunk/debian/patches/
   ams/trunk/debian/patches/00list
   ams/trunk/debian/patches/10makefile.dpatch
   ams/trunk/debian/patches/11ams_launch_script.dpatch
   ams/trunk/debian/patches/12default_patch_dir.dpatch
   ams/trunk/debian/rules
   ams/trunk/debian/watch
Log:
Load newtrunk into ams/trunk.


Added: ams/trunk/.#Makefile.1.3
===================================================================
--- ams/trunk/.#Makefile.1.3	2004-10-30 11:15:34 UTC (rev 5)
+++ ams/trunk/.#Makefile.1.3	2004-10-30 11:18:02 UTC (rev 6)
@@ -0,0 +1,404 @@
+####### Configuration
+                                                                                
+BINARY  = ams.real
+DESTDIR =
+BIN     = $(DESTDIR)/usr/share/ams
+
+
+QT_BASE_DIR=/usr/share/qt3
+QT_LIB_DIR=$(QT_BASE_DIR)/lib
+QT_BIN_DIR=$(QT_BASE_DIR)/bin
+QT_INCLUDE_DIR=$(QT_BASE_DIR)/include
+X11_LIB_DIR=/usr/X11R6/lib
+
+$(BINARY): synth.o capture.o synthdata.o \
+	module.o module.moc.o \
+	configdialog.o configdialog.moc.o \
+	port.o port.moc.o \
+	midiguicomponent.o midiguicomponent.moc.o \
+	midislider.o midislider.moc.o \
+	intmidislider.o intmidislider.moc.o \
+	floatintmidislider.o floatintmidislider.moc.o \
+	midicombobox.o midicombobox.moc.o \
+	midicheckbox.o midicheckbox.moc.o \
+	midipushbutton.o midipushbutton.moc.o \
+	midicontroller.o midicontroller.moc.o \
+	midicontrollerlist.o midicontrollerlist.moc.o \
+	midiwidget.o midiwidget.moc.o \
+	guiwidget.o guiwidget.moc.o \
+	ladspadialog.o ladspadialog.moc.o \
+	envelope.o envelope.moc.o \
+	multi_envelope.o multi_envelope.moc.o \
+	scopescreen.o scopescreen.moc.o \
+	spectrumscreen.o spectrumscreen.moc.o \
+	m_sh.o m_sh.moc.o \
+	m_vcswitch.o m_vcswitch.moc.o \
+	m_vcorgan.o m_vcorgan.moc.o \
+	m_dynamicwaves.o m_dynamicwaves.moc.o \
+	m_vco.o m_vco.moc.o \
+	m_vca.o m_vca.moc.o \
+	m_vcf.o m_vcf.moc.o \
+        m_lfo.o m_lfo.moc.o \
+        m_noise.o m_noise.moc.o \
+	m_delay.o m_delay.moc.o \
+	m_seq.o m_seq.moc.o \
+	m_mcv.o m_mcv.moc.o \
+	m_advmcv.o m_advmcv.moc.o \
+	m_scmcv.o m_scmcv.moc.o \
+	m_env.o m_env.moc.o \
+	m_vcenv.o m_vcenv.moc.o \
+	m_advenv.o m_advenv.moc.o \
+	m_ringmod.o m_ringmod.moc.o \
+	m_inv.o m_inv.moc.o \
+	m_conv.o m_conv.moc.o \
+	m_cvs.o m_cvs.moc.o \
+	m_slew.o m_slew.moc.o \
+	m_quantizer.o m_quantizer.moc.o \
+	m_scquantizer.o m_scquantizer.moc.o \
+	m_mix.o m_mix.moc.o \
+	m_stereomix.o m_stereomix.moc.o \
+	m_ladspa.o m_ladspa.moc.o \
+	m_out.o m_out.moc.o \
+	m_jackout.o m_jackout.moc.o \
+	m_jackin.o m_jackin.moc.o \
+	m_wavout.o m_wavout.moc.o \
+	m_midiout.o m_midiout.moc.o \
+	m_scope.o m_scope.moc.o \
+	m_spectrum.o m_spectrum.moc.o \
+	m_in.o m_in.moc.o \
+	textedit.o textedit.moc.o \
+	modularsynth.o modularsynth.moc.o \
+	main.o
+	gcc -g -o $(BINARY) \
+	synth.o capture.o synthdata.o \
+        module.o module.moc.o \
+        configdialog.o configdialog.moc.o \
+        port.o port.moc.o \
+	midiguicomponent.o midiguicomponent.moc.o \
+	midislider.o midislider.moc.o \
+	intmidislider.o intmidislider.moc.o \
+	floatintmidislider.o floatintmidislider.moc.o \
+	midicombobox.o midicombobox.moc.o \
+	midicheckbox.o midicheckbox.moc.o \
+	midipushbutton.o midipushbutton.moc.o \
+	midicontroller.o midicontroller.moc.o \
+	midicontrollerlist.o midicontrollerlist.moc.o \
+	midiwidget.o midiwidget.moc.o \
+	guiwidget.o guiwidget.moc.o \
+	ladspadialog.o ladspadialog.moc.o \
+	envelope.o envelope.moc.o \
+	multi_envelope.o multi_envelope.moc.o \
+	scopescreen.o scopescreen.moc.o \
+	spectrumscreen.o spectrumscreen.moc.o \
+	m_sh.o m_sh.moc.o \
+	m_vcswitch.o m_vcswitch.moc.o \
+	m_vcorgan.o m_vcorgan.moc.o \
+	m_dynamicwaves.o m_dynamicwaves.moc.o \
+        m_vco.o m_vco.moc.o \
+	m_vca.o m_vca.moc.o \
+	m_vcf.o m_vcf.moc.o \
+        m_lfo.o m_lfo.moc.o \
+        m_noise.o m_noise.moc.o \
+	m_delay.o m_delay.moc.o \
+	m_seq.o m_seq.moc.o \
+	m_mcv.o m_mcv.moc.o \
+	m_advmcv.o m_advmcv.moc.o \
+	m_scmcv.o m_scmcv.moc.o \
+	m_env.o m_env.moc.o \
+	m_vcenv.o m_vcenv.moc.o \
+	m_advenv.o m_advenv.moc.o \
+	m_ringmod.o m_ringmod.moc.o \
+	m_inv.o m_inv.moc.o \
+	m_conv.o m_conv.moc.o \
+	m_cvs.o m_cvs.moc.o \
+	m_slew.o m_slew.moc.o \
+	m_quantizer.o m_quantizer.moc.o \
+	m_scquantizer.o m_scquantizer.moc.o \
+	m_mix.o m_mix.moc.o \
+	m_stereomix.o m_stereomix.moc.o \
+	m_ladspa.o m_ladspa.moc.o \
+	m_out.o m_out.moc.o \
+	m_jackout.o m_jackout.moc.o \
+	m_jackin.o m_jackin.moc.o \
+	m_wavout.o m_wavout.moc.o \
+	m_midiout.o m_midiout.moc.o \
+	m_scope.o m_scope.moc.o \
+	m_spectrum.o m_spectrum.moc.o \
+	m_in.o m_in.moc.o \
+	textedit.o textedit.moc.o \
+        modularsynth.o modularsynth.moc.o \
+	main.o \
+	-L$(QT_LIB_DIR) -L$(X11_LIB_DIR) \
+	-lqt-mt -ljack -lasound -lsrfftw -lsfftw -lm 
+
+CXXFLAGS=-DQT_THREAD_SUPPORT -I$(QT_INCLUDE_DIR) -I/usr/X11R6/include -I. -O2 -g -Wall
+
+synth.o: synth.cpp synth.h synthdata.h module.h m_out.h m_wavout.h m_scope.h m_spectrum.h m_midiout.h
+capture.o: capture.cpp capture.h synthdata.h m_in.h m_jackout.h m_jackin.h
+synthdata.o: synthdata.cpp synthdata.h module.h port.h m_env.h m_advenv.h m_vcenv.h
+modularsynth.o: modularsynth.cpp modularsynth.h synth.h module.h port.h textedit.h \
+	synthdata.h midicontroller.h midicontrollerlist.h midiwidget.h guiwidget.h m_vcf.h m_sh.h \
+	m_vco.h m_vca.h m_lfo.h m_delay.h m_ringmod.h m_inv.h m_mix.h \
+	m_stereomix.h m_ladspa.h m_out.h m_wavout.h m_conv.h \
+	m_mcv.h m_advmcv.h m_seq.h m_env.h m_slew.h m_quantizer.h m_in.h ladspadialog.h m_cvs.h m_midiout.h m_vcenv.h \
+	m_vcorgan.h m_dynamicwaves.h m_advenv.h m_scope.h m_spectrum.h m_vcswitch.h m_jackout.h m_jackin.h \
+	m_scmcv.h m_scquantizer.h       
+modularsynth.moc.o: modularsynth.moc.cpp modularsynth.h module.h port.h textedit.h \
+	synth.h synthdata.h midicontroller.h midicontrollerlist.h midiwidget.h guiwidget.h m_vcf.h m_sh.h \
+	m_vco.h m_vca.h m_lfo.h m_delay.h m_ringmod.h m_inv.h m_mix.h \
+	m_stereomix.h m_ladspa.h m_out.h m_wavout.h m_conv.h \
+	m_mcv.h m_advmcv.h m_seq.h m_env.h m_slew.h m_quantizer.h m_in.h ladspadialog.h m_cvs.h m_midiout.h m_vcenv.h \
+	m_vcorgan.h m_dynamicwaves.h m_advenv.h m_scope.h m_spectrum.h m_vcswitch.h m_jackout.h m_jackin.h \
+	m_scmcv.h m_scquantizer.h       
+modularsynth.moc.cpp: modularsynth.h modularsynth.cpp
+	$(QT_BIN_DIR)/moc modularsynth.h -o modularsynth.moc.cpp
+main.o: main.cpp modularsynth.h
+configdialog.o: configdialog.cpp configdialog.h midicontroller.h envelope.h multi_envelope.h \
+	midicontrollerlist.h midiwidget.h guiwidget.h midislider.h intmidislider.h floatintmidislider.h midicombobox.h midicheckbox.h synthdata.h \
+	scopescreen.h spectrumscreen.h midipushbutton.h
+configdialog.moc.o: configdialog.moc.cpp configdialog.h midicontroller.h envelope.h multi_envelope.h \
+	midicontrollerlist.h midiwidget.h guiwidget.h midislider.h intmidislider.h floatintmidislider.h midicombobox.h midicheckbox.h synthdata.h \
+	scopescreen.h spectrumscreen.h midipushbutton.h
+configdialog.moc.cpp: configdialog.h configdialog.cpp
+	$(QT_BIN_DIR)/moc configdialog.h -o configdialog.moc.cpp
+module.o: module.cpp module.h synthdata.h configdialog.h port.h
+module.moc.o: module.moc.cpp module.h synthdata.h configdialog.h port.h
+module.moc.cpp: module.h module.cpp
+	$(QT_BIN_DIR)/moc module.h -o module.moc.cpp
+port.o: port.cpp port.h synthdata.h
+port.moc.o: port.moc.cpp port.h synthdata.h
+port.moc.cpp: port.h port.cpp
+	$(QT_BIN_DIR)/moc port.h -o port.moc.cpp
+midiguicomponent.o: midiguicomponent.cpp midiguicomponent.h midicontroller.h midicontrollerlist.h
+midiguicomponent.moc.o: midiguicomponent.moc.cpp midiguicomponent.h midicontroller.h midicontrollerlist.h
+midiguicomponent.moc.cpp: midiguicomponent.h midiguicomponent.cpp
+	$(QT_BIN_DIR)/moc midiguicomponent.h -o midiguicomponent.moc.cpp
+midislider.o: midislider.cpp midislider.h intmidislider.h synthdata.h midiwidget.h guiwidget.h \
+              midicontroller.h midiguicomponent.h
+midislider.moc.o: midislider.moc.cpp midislider.h intmidislider.h synthdata.h midiwidget.h guiwidget.h \
+              midicontroller.h midiguicomponent.h
+midislider.moc.cpp: midislider.h midislider.cpp
+	$(QT_BIN_DIR)/moc midislider.h -o midislider.moc.cpp
+intmidislider.o: intmidislider.cpp intmidislider.h synthdata.h midiwidget.h guiwidget.h \
+                 midicontroller.h midiguicomponent.h
+intmidislider.moc.o: intmidislider.moc.cpp intmidislider.h synthdata.h midiwidget.h guiwidget.h \
+                 midicontroller.h midiguicomponent.h
+intmidislider.moc.cpp: intmidislider.h intmidislider.cpp
+	$(QT_BIN_DIR)/moc intmidislider.h -o intmidislider.moc.cpp
+floatintmidislider.o: floatintmidislider.cpp floatintmidislider.h synthdata.h midiwidget.h guiwidget.h \
+                 midicontroller.h midiguicomponent.h
+floatintmidislider.moc.o: floatintmidislider.moc.cpp floatintmidislider.h synthdata.h midiwidget.h guiwidget.h \
+                 midicontroller.h midiguicomponent.h
+floatintmidislider.moc.cpp: floatintmidislider.h floatintmidislider.cpp
+	$(QT_BIN_DIR)/moc floatintmidislider.h -o floatintmidislider.moc.cpp
+midicombobox.o: midicombobox.cpp midicombobox.h synthdata.h midiwidget.h guiwidget.h \
+                midicontroller.h midiguicomponent.h
+midicombobox.moc.o: midicombobox.moc.cpp midicombobox.h synthdata.h midiwidget.h guiwidget.h \
+                midicontroller.h midiguicomponent.h
+midicombobox.moc.cpp: midicombobox.h midicombobox.cpp
+	$(QT_BIN_DIR)/moc midicombobox.h -o midicombobox.moc.cpp
+midicheckbox.o: midicheckbox.cpp midicheckbox.h synthdata.h midiwidget.h guiwidget.h \
+                midicontroller.h midiguicomponent.h
+midicheckbox.moc.o: midicheckbox.moc.cpp midicheckbox.h synthdata.h midiwidget.h guiwidget.h midicontroller.h
+midicheckbox.moc.cpp: midicheckbox.h midicheckbox.cpp
+	$(QT_BIN_DIR)/moc midicheckbox.h -o midicheckbox.moc.cpp
+midipushbutton.o: midipushbutton.cpp midipushbutton.h synthdata.h midiwidget.h guiwidget.h \
+                midicontroller.h midiguicomponent.h
+midipushbutton.moc.o: midipushbutton.moc.cpp midipushbutton.h synthdata.h midiwidget.h midicontroller.h guiwidget.h
+midipushbutton.moc.cpp: midipushbutton.h midipushbutton.cpp
+	$(QT_BIN_DIR)/moc midipushbutton.h -o midipushbutton.moc.cpp
+envelope.o: envelope.cpp envelope.h synthdata.h 
+envelope.moc.o: envelope.moc.cpp envelope.h synthdata.h 
+envelope.moc.cpp: envelope.h envelope.cpp
+	$(QT_BIN_DIR)/moc envelope.h -o envelope.moc.cpp
+multi_envelope.o: multi_envelope.cpp multi_envelope.h synthdata.h 
+multi_envelope.moc.o: multi_envelope.moc.cpp multi_envelope.h synthdata.h 
+multi_envelope.moc.cpp: multi_envelope.h multi_envelope.cpp
+	$(QT_BIN_DIR)/moc multi_envelope.h -o multi_envelope.moc.cpp
+scopescreen.o: scopescreen.cpp scopescreen.h synthdata.h 
+scopescreen.moc.o: scopescreen.moc.cpp scopescreen.h synthdata.h 
+scopescreen.moc.cpp: scopescreen.h scopescreen.cpp
+	$(QT_BIN_DIR)/moc scopescreen.h -o scopescreen.moc.cpp
+spectrumscreen.o: spectrumscreen.cpp spectrumscreen.h synthdata.h 
+spectrumscreen.moc.o: spectrumscreen.moc.cpp spectrumscreen.h synthdata.h 
+spectrumscreen.moc.cpp: spectrumscreen.h spectrumscreen.cpp
+	$(QT_BIN_DIR)/moc spectrumscreen.h -o spectrumscreen.moc.cpp
+midicontroller.o: midicontroller.cpp midicontroller.h
+midicontroller.moc.o: midicontroller.moc.cpp midicontroller.h
+midicontroller.moc.cpp: midicontroller.h midicontroller.cpp
+	$(QT_BIN_DIR)/moc midicontroller.h -o midicontroller.moc.cpp
+midicontrollerlist.o: midicontrollerlist.cpp midicontrollerlist.h midicontroller.h
+midicontrollerlist.moc.o: midicontrollerlist.moc.cpp midicontrollerlist.h midicontroller.h
+midicontrollerlist.moc.cpp: midicontrollerlist.h midicontrollerlist.cpp  
+	$(QT_BIN_DIR)/moc midicontrollerlist.h -o midicontrollerlist.moc.cpp
+midiwidget.o: midiwidget.cpp midiwidget.h midicontroller.h midicontrollerlist.h synthdata.h guiwidget.h \
+	midislider.h intmidislider.h floatintmidislider.h midicombobox.h midicheckbox.h midipushbutton.h
+midiwidget.moc.o: midiwidget.moc.cpp midiwidget.h midicontroller.h midicontrollerlist.h synthdata.h guiwidget.h \
+	midislider.h intmidislider.h floatintmidislider.h midicombobox.h midicheckbox.h midipushbutton.h
+midiwidget.moc.cpp: midiwidget.h midiwidget.cpp
+	$(QT_BIN_DIR)/moc midiwidget.h -o midiwidget.moc.cpp
+guiwidget.o: guiwidget.cpp guiwidget.h midicontroller.h midicontrollerlist.h synthdata.h \
+	midislider.h intmidislider.h floatintmidislider.h midicombobox.h midicheckbox.h midipushbutton.h
+guiwidget.moc.o: guiwidget.moc.cpp guiwidget.h midicontroller.h midicontrollerlist.h synthdata.h \
+	midislider.h intmidislider.h floatintmidislider.h midicombobox.h midicheckbox.h midipushbutton.h
+guiwidget.moc.cpp: guiwidget.h guiwidget.cpp
+	$(QT_BIN_DIR)/moc guiwidget.h -o guiwidget.moc.cpp
+ladspadialog.o: ladspadialog.cpp ladspadialog.h synthdata.h 
+ladspadialog.moc.o: ladspadialog.moc.cpp ladspadialog.h synthdata.h 
+ladspadialog.moc.cpp: ladspadialog.h ladspadialog.cpp
+	$(QT_BIN_DIR)/moc ladspadialog.h -o ladspadialog.moc.cpp
+m_vco.o: m_vco.cpp m_vco.h synthdata.h module.h port.h
+m_vco.moc.o: m_vco.moc.cpp m_vco.h synthdata.h module.h port.h 
+m_vco.moc.cpp: m_vco.h m_vco.cpp
+	$(QT_BIN_DIR)/moc m_vco.h -o m_vco.moc.cpp
+m_vca.o: m_vca.cpp m_vca.h synthdata.h module.h port.h
+m_vca.moc.o: m_vca.moc.cpp m_vca.h synthdata.h module.h port.h 
+m_vca.moc.cpp: m_vca.h m_vca.cpp
+	$(QT_BIN_DIR)/moc m_vca.h -o m_vca.moc.cpp
+m_vcf.o: m_vcf.cpp m_vcf.h synthdata.h module.h port.h
+m_vcf.moc.o: m_vcf.moc.cpp m_vcf.h synthdata.h module.h port.h 
+m_vcf.moc.cpp: m_vcf.h m_vcf.cpp
+	$(QT_BIN_DIR)/moc m_vcf.h -o m_vcf.moc.cpp
+m_lfo.o: m_lfo.cpp m_lfo.h synthdata.h module.h port.h
+m_lfo.moc.o: m_lfo.moc.cpp m_lfo.h synthdata.h module.h port.h 
+m_lfo.moc.cpp: m_lfo.h m_lfo.cpp
+	$(QT_BIN_DIR)/moc m_lfo.h -o m_lfo.moc.cpp
+m_noise.o: m_noise.cpp m_noise.h synthdata.h module.h port.h
+m_noise.moc.o: m_noise.moc.cpp m_noise.h synthdata.h module.h port.h 
+m_noise.moc.cpp: m_noise.h m_noise.cpp
+	$(QT_BIN_DIR)/moc m_noise.h -o m_noise.moc.cpp
+m_delay.o: m_delay.cpp m_delay.h synthdata.h module.h port.h
+m_delay.moc.o: m_delay.moc.cpp m_delay.h synthdata.h module.h port.h 
+m_delay.moc.cpp: m_delay.h m_delay.cpp
+	$(QT_BIN_DIR)/moc m_delay.h -o m_delay.moc.cpp
+m_env.o: m_env.cpp m_env.h synthdata.h module.h port.h
+m_env.moc.o: m_env.moc.cpp m_env.h synthdata.h module.h port.h 
+m_env.moc.cpp: m_env.h m_env.cpp
+	$(QT_BIN_DIR)/moc m_env.h -o m_env.moc.cpp
+m_vcenv.o: m_vcenv.cpp m_vcenv.h synthdata.h module.h port.h
+m_vcenv.moc.o: m_vcenv.moc.cpp m_vcenv.h synthdata.h module.h port.h 
+m_vcenv.moc.cpp: m_vcenv.h m_vcenv.cpp
+	$(QT_BIN_DIR)/moc m_vcenv.h -o m_vcenv.moc.cpp
+m_advenv.o: m_advenv.cpp m_advenv.h synthdata.h module.h port.h
+m_advenv.moc.o: m_advenv.moc.cpp m_advenv.h synthdata.h module.h port.h 
+m_advenv.moc.cpp: m_advenv.h m_advenv.cpp
+	$(QT_BIN_DIR)/moc m_advenv.h -o m_advenv.moc.cpp
+m_mcv.o: m_mcv.cpp m_mcv.h synthdata.h module.h port.h
+m_mcv.moc.o: m_mcv.moc.cpp m_mcv.h synthdata.h module.h port.h 
+m_mcv.moc.cpp: m_mcv.h m_mcv.cpp
+	$(QT_BIN_DIR)/moc m_mcv.h -o m_mcv.moc.cpp
+m_advmcv.o: m_advmcv.cpp m_advmcv.h synthdata.h module.h port.h
+m_advmcv.moc.o: m_advmcv.moc.cpp m_advmcv.h synthdata.h module.h port.h 
+m_advmcv.moc.cpp: m_advmcv.h m_advmcv.cpp
+	$(QT_BIN_DIR)/moc m_advmcv.h -o m_advmcv.moc.cpp
+m_scmcv.o: m_scmcv.cpp m_scmcv.h synthdata.h module.h port.h
+m_scmcv.moc.o: m_scmcv.moc.cpp m_scmcv.h synthdata.h module.h port.h 
+m_scmcv.moc.cpp: m_scmcv.h m_scmcv.cpp
+	$(QT_BIN_DIR)/moc m_scmcv.h -o m_scmcv.moc.cpp
+m_seq.o: m_seq.cpp m_seq.h synthdata.h module.h port.h
+m_seq.moc.o: m_seq.moc.cpp m_seq.h synthdata.h module.h port.h 
+m_seq.moc.cpp: m_seq.h m_seq.cpp
+	$(QT_BIN_DIR)/moc m_seq.h -o m_seq.moc.cpp
+m_ringmod.o: m_ringmod.cpp m_ringmod.h synthdata.h module.h port.h
+m_ringmod.moc.o: m_ringmod.moc.cpp m_ringmod.h synthdata.h module.h port.h 
+m_ringmod.moc.cpp: m_ringmod.h m_ringmod.cpp
+	$(QT_BIN_DIR)/moc m_ringmod.h -o m_ringmod.moc.cpp
+m_inv.o: m_inv.cpp m_inv.h synthdata.h module.h port.h
+m_inv.moc.o: m_inv.moc.cpp m_inv.h synthdata.h module.h port.h 
+m_inv.moc.cpp: m_inv.h m_inv.cpp
+	$(QT_BIN_DIR)/moc m_inv.h -o m_inv.moc.cpp
+m_conv.o: m_conv.cpp m_conv.h synthdata.h module.h port.h
+m_conv.moc.o: m_conv.moc.cpp m_conv.h synthdata.h module.h port.h 
+m_conv.moc.cpp: m_conv.h m_conv.cpp
+	$(QT_BIN_DIR)/moc m_conv.h -o m_conv.moc.cpp
+m_cvs.o: m_cvs.cpp m_cvs.h synthdata.h module.h port.h
+m_cvs.moc.o: m_cvs.moc.cpp m_cvs.h synthdata.h module.h port.h 
+m_cvs.moc.cpp: m_cvs.h m_cvs.cpp
+	$(QT_BIN_DIR)/moc m_cvs.h -o m_cvs.moc.cpp
+m_sh.o: m_sh.cpp m_sh.h synthdata.h module.h port.h
+m_sh.moc.o: m_sh.moc.cpp m_sh.h synthdata.h module.h port.h 
+m_sh.moc.cpp: m_sh.h m_sh.cpp
+	$(QT_BIN_DIR)/moc m_sh.h -o m_sh.moc.cpp
+m_vcswitch.o: m_vcswitch.cpp m_vcswitch.h synthdata.h module.h port.h
+m_vcswitch.moc.o: m_vcswitch.moc.cpp m_vcswitch.h synthdata.h module.h port.h 
+m_vcswitch.moc.cpp: m_vcswitch.h m_vcswitch.cpp
+	$(QT_BIN_DIR)/moc m_vcswitch.h -o m_vcswitch.moc.cpp
+m_vcorgan.o: m_vcorgan.cpp m_vcorgan.h synthdata.h module.h port.h
+m_vcorgan.moc.o: m_vcorgan.moc.cpp m_vcorgan.h synthdata.h module.h port.h 
+m_vcorgan.moc.cpp: m_vcorgan.h m_vcorgan.cpp
+	$(QT_BIN_DIR)/moc m_vcorgan.h -o m_vcorgan.moc.cpp
+m_dynamicwaves.o: m_dynamicwaves.cpp m_dynamicwaves.h synthdata.h module.h port.h
+m_dynamicwaves.moc.o: m_dynamicwaves.moc.cpp m_dynamicwaves.h synthdata.h module.h port.h 
+m_dynamicwaves.moc.cpp: m_dynamicwaves.h m_dynamicwaves.cpp
+	$(QT_BIN_DIR)/moc m_dynamicwaves.h -o m_dynamicwaves.moc.cpp
+m_slew.o: m_slew.cpp m_slew.h synthdata.h module.h port.h
+m_slew.moc.o: m_slew.moc.cpp m_slew.h synthdata.h module.h port.h 
+m_slew.moc.cpp: m_slew.h m_slew.cpp
+	$(QT_BIN_DIR)/moc m_slew.h -o m_slew.moc.cpp
+m_quantizer.o: m_quantizer.cpp m_quantizer.h synthdata.h module.h port.h
+m_quantizer.moc.o: m_quantizer.moc.cpp m_quantizer.h synthdata.h module.h port.h 
+m_quantizer.moc.cpp: m_quantizer.h m_quantizer.cpp
+	$(QT_BIN_DIR)/moc m_quantizer.h -o m_quantizer.moc.cpp
+m_scquantizer.o: m_scquantizer.cpp m_scquantizer.h synthdata.h module.h port.h
+m_scquantizer.moc.o: m_scquantizer.moc.cpp m_scquantizer.h synthdata.h module.h port.h 
+m_scquantizer.moc.cpp: m_scquantizer.h m_scquantizer.cpp
+	$(QT_BIN_DIR)/moc m_scquantizer.h -o m_scquantizer.moc.cpp
+m_mix.o: m_mix.cpp m_mix.h synthdata.h module.h port.h
+m_mix.moc.o: m_mix.moc.cpp m_mix.h synthdata.h module.h port.h 
+m_mix.moc.cpp: m_mix.h m_mix.cpp
+	$(QT_BIN_DIR)/moc m_mix.h -o m_mix.moc.cpp
+m_stereomix.o: m_stereomix.cpp m_stereomix.h synthdata.h module.h port.h
+m_stereomix.moc.o: m_stereomix.moc.cpp m_stereomix.h synthdata.h module.h port.h 
+m_stereomix.moc.cpp: m_stereomix.h m_stereomix.cpp
+	$(QT_BIN_DIR)/moc m_stereomix.h -o m_stereomix.moc.cpp
+m_ladspa.o: m_ladspa.cpp m_ladspa.h synthdata.h module.h port.h 
+m_ladspa.moc.o: m_ladspa.moc.cpp m_ladspa.h synthdata.h module.h port.h 
+m_ladspa.moc.cpp: m_ladspa.h m_ladspa.cpp
+	$(QT_BIN_DIR)/moc m_ladspa.h -o m_ladspa.moc.cpp
+m_out.o: m_out.cpp m_out.h synthdata.h module.h port.h
+m_out.moc.o: m_out.moc.cpp m_out.h synthdata.h module.h port.h 
+m_out.moc.cpp: m_out.h m_out.cpp
+	$(QT_BIN_DIR)/moc m_out.h -o m_out.moc.cpp
+m_jackout.o: m_jackout.cpp m_jackout.h synthdata.h module.h port.h
+m_jackout.moc.o: m_jackout.moc.cpp m_jackout.h synthdata.h module.h port.h 
+m_jackout.moc.cpp: m_jackout.h m_jackout.cpp
+	$(QT_BIN_DIR)/moc m_jackout.h -o m_jackout.moc.cpp
+m_jackin.o: m_jackin.cpp m_jackin.h synthdata.h module.h port.h
+m_jackin.moc.o: m_jackin.moc.cpp m_jackin.h synthdata.h module.h port.h 
+m_jackin.moc.cpp: m_jackin.h m_jackin.cpp
+	$(QT_BIN_DIR)/moc m_jackin.h -o m_jackin.moc.cpp
+m_wavout.o: m_wavout.cpp m_wavout.h synthdata.h module.h port.h
+m_wavout.moc.o: m_wavout.moc.cpp m_wavout.h synthdata.h module.h port.h 
+m_wavout.moc.cpp: m_wavout.h m_wavout.cpp
+	$(QT_BIN_DIR)/moc m_wavout.h -o m_wavout.moc.cpp
+m_midiout.o: m_midiout.cpp m_midiout.h synthdata.h module.h port.h
+m_midiout.moc.o: m_midiout.moc.cpp m_midiout.h synthdata.h module.h port.h 
+m_midiout.moc.cpp: m_midiout.h m_midiout.cpp
+	$(QT_BIN_DIR)/moc m_midiout.h -o m_midiout.moc.cpp
+m_scope.o: m_scope.cpp m_scope.h synthdata.h module.h port.h
+m_scope.moc.o: m_scope.moc.cpp m_scope.h synthdata.h module.h port.h 
+m_scope.moc.cpp: m_scope.h m_scope.cpp
+	$(QT_BIN_DIR)/moc m_scope.h -o m_scope.moc.cpp
+m_spectrum.o: m_spectrum.cpp m_spectrum.h synthdata.h module.h port.h
+m_spectrum.moc.o: m_spectrum.moc.cpp m_spectrum.h synthdata.h module.h port.h 
+m_spectrum.moc.cpp: m_spectrum.h m_spectrum.cpp
+	$(QT_BIN_DIR)/moc m_spectrum.h -o m_spectrum.moc.cpp
+m_in.o: m_in.cpp m_in.h synthdata.h module.h port.h
+m_in.moc.o: m_in.moc.cpp m_in.h synthdata.h module.h port.h 
+m_in.moc.cpp: m_in.h m_in.cpp
+	$(QT_BIN_DIR)/moc m_in.h -o m_in.moc.cpp
+textedit.o: textedit.cpp textedit.h synthdata.h 
+textedit.moc.o: textedit.moc.cpp textedit.h synthdata.h  
+textedit.moc.cpp: textedit.h textedit.cpp
+	$(QT_BIN_DIR)/moc textedit.h -o textedit.moc.cpp
+
+####### Install
+                                                                                
+install: $(BINARY)
+	install -d $(BIN)
+	install $(BINARY) $(BIN)
+                                                                                
+####### Clean
+clean:
+	rm *.o *.moc.cpp $(BINARY)
+

Added: ams/trunk/.#configdialog.h.1.2
===================================================================
--- ams/trunk/.#configdialog.h.1.2	2004-10-30 11:15:34 UTC (rev 5)
+++ ams/trunk/.#configdialog.h.1.2	2004-10-30 11:18:02 UTC (rev 6)
@@ -0,0 +1,95 @@
+#ifndef CONFIGDIALOG_H
+#define CONFIGDIALOG_H
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <qwidget.h>
+#include <qstring.h>
+#include <qslider.h>   
+#include <qcheckbox.h>  
+#include <qlabel.h>
+#include <qvbox.h>
+#include <qhbox.h>
+#include <qspinbox.h>
+#include <qradiobutton.h>
+#include <qpushbutton.h>
+#include <qdialog.h>
+#include <qstrlist.h>
+#include <qscrollview.h>
+#include <qtabwidget.h>
+#include <qlineedit.h>
+#include <alsa/asoundlib.h>
+#include "synthdata.h"
+#include "midislider.h"
+#include "intmidislider.h"
+#include "floatintmidislider.h"
+#include "midicombobox.h"
+#include "midicheckbox.h"
+#include "midipushbutton.h"
+#include "midiguicomponent.h"
+#include "envelope.h"
+#include "multi_envelope.h"
+#include "scopescreen.h"
+#include "spectrumscreen.h"
+
+class ConfigDialog : public QVBox
+{
+  Q_OBJECT
+
+  private:
+    SynthData *synthdata;
+    QVBox *configBox;
+    QScrollView *scroll;
+    
+  public: 
+    QList<MidiSlider> midiSliderList; 
+    QList<IntMidiSlider> intMidiSliderList; 
+    QList<FloatIntMidiSlider> floatIntMidiSliderList; 
+    QList<MidiComboBox> midiComboBoxList;
+    QList<MidiCheckBox> midiCheckBoxList;
+    QList<MidiPushButton> midiPushButtonList;
+    QList<Envelope> envelopeList;
+    QList<ScopeScreen> scopeScreenList;
+    QList<SpectrumScreen> spectrumScreenList;
+    QList<MultiEnvelope> multiEnvelopeList;
+    QList<MidiGUIcomponent> midiGUIcomponentList;
+    QList<QLineEdit> lineEditList;
+    QList<QHBox> hboxList;
+    QList<QVBox> vboxList;
+    QList<QLabel> labelList;
+    QPushButton *removeButton;
+    QObject *parentModule;
+    QTabWidget *tabWidget;
+            
+  public:
+    ConfigDialog(QObject *p_parentModule, QWidget* parent=0, const char *name=0, SynthData *p_synthdata=0);
+    ~ConfigDialog();
+    int addSlider(float minValue, float maxValue, float value, const char *name, float *valueRef, bool isLog=false, QWidget *parent=0);
+    int addIntSlider(int minValue, int maxValue, int value, const char *name, int *valueRef, QWidget *parent=0);
+    int addFloatIntSlider(float minValue, float maxValue, float value, const char *name, float *valueRef, QWidget *parent=0);
+    int addComboBox(int value, const char * name, int *valueRef, int itemCount, QStrList *itemNames, QWidget *parent=0);
+    int addCheckBox(float value, const char * name, float *valueRef, QWidget *parent=0);
+    int addPushButton(const char * name, QWidget *parent=0);
+    int addEnvelope(float *delayRef, float *attackRef, float *holdRef, 
+                    float *decayRef, float *sustainRef, float *releaseRef, QWidget *parent=0);
+    int addMultiEnvelope(int envCount, float *timeScaleRef, float *attackRef, float *sustainRef, float *releaseRef, QWidget *parent=0);
+    int addLabel(QString label, QWidget *parent=0);
+    int addScopeScreen(float *timeScaleRef, int *modeRef, int *edgeRef, int *triggerModeRef, 
+                       float *triggerThrsRef, float *zoomRef, QWidget *parent=0);
+    int addSpectrumScreen(QWidget *parent=0);
+    int addTab(QWidget *tabPage, QString tabLabel);
+    QHBox *addHBox(QWidget *parent=0);
+    QVBox *addVBox(QWidget *parent=0);
+    int addLineEdit(QString lineName, QWidget *parent=0);
+    int initTabWidget();
+    
+  signals:
+    void removeModuleClicked();
+                
+  public slots: 
+    void removeButtonClicked();
+};
+  
+#endif
+    

Added: ams/trunk/.#modularsynth.cpp.1.2
===================================================================
--- ams/trunk/.#modularsynth.cpp.1.2	2004-10-30 11:15:34 UTC (rev 5)
+++ ams/trunk/.#modularsynth.cpp.1.2	2004-10-30 11:18:02 UTC (rev 6)
@@ -0,0 +1,2027 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <glob.h>
+#include <dlfcn.h>
+#include <qregexp.h>
+#include <qthread.h>
+#include <qwidget.h>
+#include <qstring.h>
+#include <qslider.h>
+#include <qcheckbox.h>
+#include <qlabel.h>
+#include <qpainter.h>
+#include <qpixmap.h>
+#include <qvbox.h>
+#include <qpopupmenu.h>
+#include <qpointarray.h>
+#include <qmessagebox.h>
+#include <qsocketnotifier.h>
+#include <qfiledialog.h>
+#include <qmainwindow.h>
+#include <qimage.h>
+#include <qpen.h>
+#include <qscrollview.h>
+#include <qlistview.h>
+#include <alsa/asoundlib.h>
+#include <ladspa.h>
+#include <jack/jack.h>
+#include "modularsynth.h"
+#include "port.h"
+#include "midiwidget.h"
+#include "guiwidget.h"
+#include "midicontroller.h"
+#include "ladspadialog.h"
+
+ModularSynth::ModularSynth(int poly, int periodsize, QWidget *parent, const char *name) 
+                          : QScrollView(parent, name, Qt::WResizeNoErase | Qt::WRepaintNoErase | Qt::WStaticContents) {
+  
+  firstPort = true;
+  connectingPort[0] = NULL;
+  connectingPort[1] = NULL;
+  connectorStyle = CONNECTOR_BEZIER;
+  aboutWidget = new QMessageBox(this); 
+  mainWindow = (QMainWindow *)parent;
+  clientid = 0;
+  portid = 0;
+  jack_in_ports = 2;
+  jack_out_ports = 2;
+  synthdata = new SynthData(poly, periodsize);
+  midiWidget = new MidiWidget(synthdata, NULL);
+  midiWidget->setCaption("AlsaModularSynth Control Center");
+  synthdata->midiWidget = (QObject *)midiWidget;
+  guiWidget = new GuiWidget(synthdata, NULL);
+  guiWidget->setCaption("AlsaModularSynth Parameter View");
+  synthdata->guiWidget = (QObject *)guiWidget;
+  PCMname = DEFAULT_PCMNAME;
+  presetPath = "";
+  ladspaDialog = new LadspaDialog(synthdata, NULL);
+  QObject::connect(ladspaDialog, SIGNAL(createLadspaModule(int, int, bool, bool)),
+                   this, SLOT(newM_ladspa(int, int, bool, bool)));
+  setPalette(QPalette(QColor(117, 67, 21), QColor(117, 67, 21)));
+  loadingPatch = false;
+}
+
+ModularSynth::~ModularSynth()
+{
+  delete synthdata;
+}
+
+void ModularSynth::viewportPaintEvent(QPaintEvent *pe) {
+  
+  QPixmap pm(visibleWidth(), visibleHeight());
+  QPainter p(&pm);
+  QPen *pen;
+  QPointArray qpa(4);
+  int l1, l2;
+  Port *port[2];
+  int port_x[2], port_y[2];
+  QPoint port_pos[2];
+  int moduleX[2], moduleY[2];
+
+  pm.fill(QColor(130, 90, 25));
+  p.setPen(QColor(220, 216, 216));
+  pen = new QPen(QColor(220, 216, 216), 3);
+  for (l1 = 0; l1 < listModule.count(); l1++) {
+    for (l2 = 0; l2 < listModule.at(l1)->portList.count(); l2++) {
+      port[0] = listModule.at(l1)->portList.at(l2);
+      if ((port[0]->dir == PORT_IN) && port[0]->connectedPortList.count()) {
+        port[1] = port[0]->connectedPortList.at(0);
+        port_pos[0] = port[0]->pos();
+        port_pos[1] = port[1]->pos();
+        contentsToViewport(childX(port[0]->parentModule), childY(port[0]->parentModule), moduleX[0], moduleY[0]);
+        contentsToViewport(childX(port[1]->parentModule), childY(port[1]->parentModule), moduleX[1], moduleY[1]);
+        port_x[0] = port_pos[0].x() + moduleX[0];
+        port_x[1] = port_pos[1].x() + port[1]->width() + moduleX[1];
+        port_y[0] = port_pos[0].y() + moduleY[0] + port[0]->height()/2;
+        port_y[1] = port_pos[1].y() + moduleY[1] + port[1]->height()/2;
+        if (connectorStyle == CONNECTOR_BEZIER) {
+          qpa.setPoint(0, port_x[0], port_y[0]);
+          qpa.setPoint(1, (port_x[1] - port_x[0]) / 2 + port_x[0], 
+                          (port_y[1] - port_y[0]) / 2 + port_y[0] + 50);
+          qpa.setPoint(2, port_x[1], port_y[1]);
+          qpa.setPoint(3, port_x[1], port_y[1]);
+          pen->setWidth(5);
+          pen->setColor(QColor(150, 140, 140));
+          p.setPen(*pen);
+          p.drawCubicBezier(qpa);
+          pen->setWidth(3);
+          pen->setColor(QColor(180, 170, 170));
+          p.setPen(*pen);
+          p.drawCubicBezier(qpa);
+          pen->setWidth(1);
+          pen->setColor(QColor(220, 216, 216));
+          p.setPen(*pen);          
+          p.drawCubicBezier(qpa);
+        }
+        if (connectorStyle == CONNECTOR_STRAIGHT) {
+          p.drawLine(port_x[0], port_y[0], port_x[1], port_y[1]);
+        }
+        if (port[0]->parentModule->x() < port[1]->parentModule->x()) {
+          pen->setWidth(5);
+          pen->setColor(QColor(150, 140, 140));
+          p.setPen(*pen);
+          p.drawLine(port_x[0], port_y[0], port_x[0] - 5, port_y[0]);
+          pen->setWidth(3);
+          pen->setColor(QColor(180, 170, 170));
+          p.setPen(*pen);
+          p.drawLine(port_x[0], port_y[0], port_x[0] - 6, port_y[0]);
+          pen->setWidth(1);
+          pen->setColor(QColor(220, 216, 216));
+          p.setPen(*pen);
+          p.drawLine(port_x[0], port_y[0], port_x[0] - 7, port_y[0]);
+        }
+        if (port[1]->parentModule->x() > port[0]->parentModule->x()) {
+          pen->setWidth(5);
+          pen->setColor(QColor(150, 140, 140));
+          p.setPen(*pen);
+          p.drawLine(port_x[1], port_y[1], port_x[1] + 5, port_y[1]);
+          pen->setWidth(3);
+          pen->setColor(QColor(180, 170, 170));
+          p.setPen(*pen);
+          p.drawLine(port_x[1], port_y[1], port_x[1] + 6, port_y[1]);
+          pen->setWidth(1);
+          pen->setColor(QColor(220, 216, 216));
+          p.setPen(*pen);
+          p.drawLine(port_x[1], port_y[1], port_x[1] + 7, port_y[1]);
+        }
+      }
+    }
+  }
+  bitBlt(viewport(), 0, 0, &pm);
+  delete pen;
+}
+ 
+void ModularSynth::mousePressEvent(QMouseEvent *ev) {
+  
+  switch (ev->button()) {
+  case Qt::LeftButton:  
+    break;
+  case Qt::RightButton:
+    break;
+  case Qt::MidButton:
+    break;
+  default:
+    break;
+  }
+}  
+   
+void ModularSynth::mouseReleaseEvent(QMouseEvent *ev) {
+  
+  switch (ev->button()) {
+  case Qt::LeftButton:   
+    break;
+  case Qt::RightButton:
+    break;
+  case Qt::MidButton:
+    if (connectorStyle == CONNECTOR_STRAIGHT) {
+      connectorStyle = CONNECTOR_BEZIER;
+    } else {
+      connectorStyle = CONNECTOR_STRAIGHT;
+    }
+    repaintContents(false);
+    break;
+  default:
+    break;
+  }
+}  
+   
+QSize ModularSynth::sizeHint() const {
+
+  return QSize(SYNTH_MINIMUM_WIDTH, SYNTH_MINIMUM_HEIGHT);
+}
+
+QSizePolicy ModularSynth::sizePolicy() const {
+
+  return QSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
+}
+
+
+int ModularSynth::go(bool withJack) {
+
+  synthdata->seq_handle = open_seq();
+  initSeqNotifier();
+  if (withJack) {
+    synthdata->initJack(jack_in_ports, jack_out_ports);
+    synthdata->doSynthesis = true;
+  } else {
+    synth = new Synth(synthdata);
+    capture = new Capture(synthdata);
+    synthdata->doSynthesis = true;
+    synthdata->doCapture = false;
+    synth->start();
+  }
+  return(0);
+}
+
+void ModularSynth::displayAbout() {
+ 
+    aboutWidget->about(this, "About AlsaModularSynth", "AlsaModularSynth 1.6.0\n"
+                     "by Matthias Nagorni\n"
+                     "(c)2002-2003 SuSE AG Nuremberg\n\n"
+                     "Documentation and examples can be found in\n"
+                     "/usr/share/doc/packages/kalsatools\n\n"
+                     "More presets and updates are available from\n"
+                     "http://alsamodular.sourceforge.net"
+    "\n\nAcknowledgements\n"
+    "----------------------\n\n"
+    "The VCF Module uses the resonant low-pass filter by Paul Kellett\n" 
+    "and the Cookbook formulae for audio EQ biquad filter coefficients\n"
+    "by Robert Bristow-Johnson. The experimental 24 dB Lowpass filters have\n" 
+    "been taken from http://musicdsp.org. They are based on the CSound source\n"
+    "code, the paper by Stilson/Smith and modifications by Paul Kellett\n" 
+    "and Timo Tossavainen. The pink noise conversion formula is by Paul\n" 
+    "Kellett and has been taken from http://musicdsp.org as well.\n\n"
+    "The author is grateful to Takashi Iwai for instructions about ALSA.\n"
+    "Klaas Freitag, Helmut Herold, Stefan Hundhammer and Arvin Schnell\n"
+    "answered many questions about QT. Thanks to Jörg Arndt for valuable\n"
+    "hints regarding speed optimization. Torsten Rahn has helped to\n" 
+    "improve the color scheme of the program. Thanks to Bernhard Kaindl\n"
+    "for helpful discussion. Fons Adriaensen has contributed patches for the\n"
+    "MCV and Spectrum View modules. He has also contributed many valuable ideas.\n");
+    aboutWidget->raise();
+}
+
+void ModularSynth::displayMidiController() {
+   
+  midiWidget->show();  
+  midiWidget->raise();
+}
+
+void ModularSynth::displayParameterView() {
+
+  guiWidget->show();
+  guiWidget->raise();
+}
+
+void ModularSynth::displayLadspaPlugins() {
+   
+  ladspaDialog->show();  
+  ladspaDialog->raise();
+}
+
+int ModularSynth::setPeriodsize(int p_periodsize){
+
+  synthdata->setPeriodsize(p_periodsize);
+  synthdata->setCycleSize(synthdata->periodsize);  // TODO allow cyclesize < periodsize
+  fprintf(stderr, "Cyclesize: %d Periodsize: %d\n", synthdata->cyclesize, synthdata->periodsize); 
+  return(0);
+}
+
+int ModularSynth::setPeriods(int p_periods){
+
+  synthdata->setPeriods(p_periods);
+  return(0);
+}
+
+int ModularSynth::setRate(int p_rate){
+
+  synthdata->setRate(p_rate);
+  return(0);
+}
+
+int ModularSynth::setChannels(int p_channels){
+
+  synthdata->setChannels(p_channels);
+  return(0);
+}
+
+int ModularSynth::setPCMname(QString p_name){
+
+  PCMname = p_name;
+  return(0);
+}
+
+int ModularSynth::setPresetPath(QString name) {
+
+  presetPath = name;
+  return(0);
+}
+
+int ModularSynth::setSavePath(QString name) {
+
+  savePath = name;
+  return(0);
+}
+
+snd_pcm_t *ModularSynth::open_pcm(bool openCapture) {
+  
+  snd_pcm_t *pcm_handle;
+  snd_pcm_stream_t stream;
+  snd_pcm_hw_params_t *hwparams;
+  int buffersize_return;
+
+  stream = (openCapture) ? SND_PCM_STREAM_CAPTURE : SND_PCM_STREAM_PLAYBACK; 
+  if (snd_pcm_open(&pcm_handle, PCMname.latin1(), stream, 0) < 0) {
+    fprintf(stderr, "Error opening PCM device %s\n", PCMname.latin1());
+    exit(1);
+  }
+  snd_pcm_hw_params_alloca(&hwparams);
+  if (snd_pcm_hw_params_any(pcm_handle, hwparams) < 0) {
+    fprintf(stderr, "Can not configure this PCM device.\n");
+    exit(1);
+  }
+  if (snd_pcm_hw_params_set_access(pcm_handle, hwparams, SND_PCM_ACCESS_RW_INTERLEAVED) < 0) {
+    fprintf(stderr, "Error setting access.\n");
+    exit(1);
+  }
+  if (snd_pcm_hw_params_set_format(pcm_handle, hwparams, SND_PCM_FORMAT_S16_LE) < 0) {
+    fprintf(stderr, "Error setting format.\n");
+    exit(1);
+  }
+  if (snd_pcm_hw_params_set_rate_near(pcm_handle, hwparams, synthdata->rate, 0) < 0) {
+    fprintf(stderr, "Error setting rate.\n");
+    exit(1);
+  }
+  if (snd_pcm_hw_params_set_channels(pcm_handle, hwparams, synthdata->channels) < 0) {
+    fprintf(stderr, "Error setting channels.\n");
+    exit(1);
+  }
+  if (snd_pcm_hw_params_set_periods(pcm_handle, hwparams, synthdata->periods, 0) < 0) {
+    fprintf(stderr, "Error setting periods.\n");
+    exit(1);
+  }
+  if ((buffersize_return = snd_pcm_hw_params_set_buffer_size_near(pcm_handle, hwparams, 
+                           synthdata->periodsize * synthdata->periods)) < 0) {
+    fprintf(stderr, "Error setting buffersize.\n");
+    exit(1);
+  }
+  if (buffersize_return != synthdata->periodsize * synthdata->periods) {
+    fprintf(stderr, "Buffersize %d is not available on your hardware. Using %d instead.\n", 
+            synthdata->periodsize, buffersize_return * synthdata->periods);
+    setPeriodsize(buffersize_return / synthdata->periods);
+  }
+  if (snd_pcm_hw_params(pcm_handle, hwparams) < 0) {
+    fprintf(stderr, "Error setting HW params.\n");
+    exit(1);
+  }
+  return(pcm_handle);
+}
+
+snd_seq_t *ModularSynth::open_seq() {
+
+  snd_seq_t *seq_handle;
+  int l1;
+  QString qs;
+
+  if (snd_seq_open(&seq_handle, "hw", SND_SEQ_OPEN_DUPLEX, 0) < 0) {
+    fprintf(stderr, "Error opening ALSA sequencer.\n");
+    exit(1);
+  }
+  snd_seq_set_client_name(seq_handle, "AlsaModularSynth");
+  clientid = snd_seq_client_id(seq_handle);
+  if ((portid = snd_seq_create_simple_port(seq_handle, "ams",
+            SND_SEQ_PORT_CAP_WRITE|SND_SEQ_PORT_CAP_SUBS_WRITE,
+            SND_SEQ_PORT_TYPE_APPLICATION)) < 0) {
+    fprintf(stderr, "Error creating sequencer port.\n");
+    exit(1);
+  }
+  for (l1 = 0; l1 < 2; l1++) {
+    if ((synthdata->midi_out_port[l1] = snd_seq_create_simple_port(seq_handle, "ams",
+            SND_SEQ_PORT_CAP_READ|SND_SEQ_PORT_CAP_SUBS_READ,
+            SND_SEQ_PORT_TYPE_APPLICATION)) < 0) {
+      fprintf(stderr, "Error creating sequencer port.\n");
+      exit(1);
+    }
+  }
+  qs.sprintf("AlsaModularSynth 1.6.0 - %d:%d", clientid, portid);
+  mainWindow->setCaption(qs);
+  synthdata->jackName.sprintf("ams_%d_%d", clientid, portid);
+  return(seq_handle);
+}
+
+int ModularSynth::initSeqNotifier() {
+
+  int alsaEventFd = 0;
+
+  struct pollfd pfd[1];
+  snd_seq_poll_descriptors(synthdata->seq_handle, pfd, 1, POLLIN);
+  alsaEventFd = pfd[0].fd;
+  seqNotifier = new QSocketNotifier(alsaEventFd, QSocketNotifier::Read);
+  QObject::connect(seqNotifier, SIGNAL(activated(int)),
+                   this, SLOT(midiAction(int)));
+  return(0);
+}
+
+void ModularSynth::midiAction(int fd) {
+
+  snd_seq_event_t *ev;
+  QString qs;
+  int l1, l2, osc;
+  bool noteActive, foundOsc;
+  float min_e;
+  MidiController *midiController; 
+
+  do {
+    snd_seq_event_input(synthdata->seq_handle, &ev);
+    if (midiWidget->isVisible()) {
+      if ((ev->type == SND_SEQ_EVENT_CONTROLLER)  
+        ||(ev->type == SND_SEQ_EVENT_CONTROL14)   
+        ||(ev->type == SND_SEQ_EVENT_PITCHBEND)) {
+        MidiController *midiController = new MidiController();
+        midiController->type = ev->type;
+        midiController->ch = ev->data.control.channel;  
+        midiController->param = (ev->type==SND_SEQ_EVENT_PITCHBEND) 
+                              ? 0 : ev->data.control.param; 
+        if (!midiWidget->midiControllerList.contains(midiController)) {
+          midiWidget->addMidiController(midiController);
+        } else {
+          delete midiController;
+        } 
+      } 
+      if (midiWidget->noteControllerEnabled &&((ev->type == SND_SEQ_EVENT_NOTEON)
+        ||(ev->type == SND_SEQ_EVENT_NOTEOFF))) {
+        MidiController *midiController = new MidiController();
+        midiController->type = ev->type;
+        midiController->ch = ev->data.control.channel;
+        midiController->param = ev->data.note.note;
+        if (!midiWidget->midiControllerList.contains(midiController)) {
+          midiWidget->addMidiController(midiController);       
+        } else {
+          delete midiController;
+        } 
+      }
+    }  
+    if (midiWidget->followMidi) {
+      for(l1 = 0; l1 < midiWidget->midiControllerList.count(); l1++) {
+        midiController = midiWidget->midiControllerList.at(l1);
+        if ((midiController->type == ev->type)
+          &&(midiController->ch == ev->data.control.channel)) {
+          if (ev->type == SND_SEQ_EVENT_PITCHBEND) {
+            emit midiController->sendMidiValue((ev->data.control.value + 8192) / 128);
+            midiWidget->setSelectedController(midiController);
+          }
+          if ((ev->type == SND_SEQ_EVENT_CONTROL14)
+           && (midiController->param == ev->data.control.param)) {
+            emit midiController->sendMidiValue(ev->data.control.value / 128);
+            midiWidget->setSelectedController(midiController);
+          }
+          if ((ev->type == SND_SEQ_EVENT_CONTROLLER) 
+           && (midiController->param == ev->data.control.param)) {
+            emit midiController->sendMidiValue(ev->data.control.value);
+            midiWidget->setSelectedController(midiController);
+          }
+          if ((ev->type == SND_SEQ_EVENT_NOTEON) 
+           && (midiController->param == ev->data.note.note)) {
+            emit midiController->sendMidiValue(ev->data.note.velocity);
+            midiWidget->setSelectedController(midiController);
+          }
+          if ((ev->type == SND_SEQ_EVENT_NOTEOFF) 
+           && (midiController->param == ev->data.note.note)) {
+            emit midiController->sendMidiValue(0);
+            midiWidget->setSelectedController(midiController);
+          }
+        }    
+      }
+    } else {
+      for(l1 = 0; l1 < midiWidget->midiControllerList.count(); l1++) {
+        midiController = midiWidget->midiControllerList.at(l1);
+        if ((midiController->type == ev->type)
+          &&(midiController->ch == ev->data.control.channel)) {
+          if (ev->type == SND_SEQ_EVENT_PITCHBEND) {
+            emit midiController->sendMidiValue((ev->data.control.value + 8192) / 128);
+          }
+          if ((ev->type == SND_SEQ_EVENT_CONTROL14)
+           && (midiController->param == ev->data.control.param)) {
+            emit midiController->sendMidiValue(ev->data.control.value / 128);
+          }
+          if ((ev->type == SND_SEQ_EVENT_CONTROLLER) 
+           && (midiController->param == ev->data.control.param)) {
+            emit midiController->sendMidiValue(ev->data.control.value);
+          }
+          if ((ev->type == SND_SEQ_EVENT_NOTEON) 
+           && (midiController->param == ev->data.note.note)) {
+            emit midiController->sendMidiValue(ev->data.note.velocity);
+          }
+          if ((ev->type == SND_SEQ_EVENT_NOTEOFF) 
+           && (midiController->param == ev->data.note.note)) {
+            emit midiController->sendMidiValue(0);
+          }
+        }    
+      }
+    }   
+    if (((ev->type == SND_SEQ_EVENT_NOTEON) || (ev->type == SND_SEQ_EVENT_NOTEOFF)) 
+         && ((synthdata->midiChannel < 0) || (synthdata->midiChannel == ev->data.control.channel))) {
+      for (l2 = 0; l2 < synthdata->poly; l2++) {
+        noteActive = false; 
+        for (l1 = 0; l1 < synthdata->listM_env.count(); l1++) {
+          if (((M_env *)synthdata->listM_env.at(l1))->noteActive[l2]) {   
+            noteActive = true;
+          }
+        }  
+        for (l1 = 0; l1 < synthdata->listM_vcenv.count(); l1++) {
+          if (((M_vcenv *)synthdata->listM_vcenv.at(l1))->noteActive[l2]) {   
+            noteActive = true;
+          }
+        }  
+        for (l1 = 0; l1 < synthdata->listM_advenv.count(); l1++) {
+          if (((M_advenv *)synthdata->listM_advenv.at(l1))->noteActive[l2]) {   
+            noteActive = true;
+          }
+        }  
+        for (l1 = 0; l1 < synthdata->listM_dynamicwaves.count(); l1++) {
+          if (((M_dynamicwaves *)synthdata->listM_dynamicwaves.at(l1))->noteActive[l2]) {   
+            noteActive = true;
+          }
+        }  
+        synthdata->noteActive[l2] = noteActive || synthdata->notePressed[l2];
+      }
+      if ((ev->type == SND_SEQ_EVENT_NOTEON) && (ev->data.note.velocity > 0)) {
+        foundOsc = false;
+        for (l2 = 0; l2 < synthdata->poly; l2++) {
+          if (!synthdata->noteActive[l2]) {
+            foundOsc = true;
+            synthdata->noteActive[l2] = true;
+            synthdata->notePressed[l2] = true;
+            synthdata->velocity[l2] = ev->data.note.velocity;
+            synthdata->channel[l2] = ev->data.note.channel;  
+            synthdata->notes[l2] = ev->data.note.note;
+            for (l1 = 0; l1 < listModule.count(); l1++) {
+              listModule.at(l1)->noteOnEvent(l2);  
+            }
+            break;
+          }
+        } 
+        if ((synthdata->listM_advenv.count() 
+          || synthdata->listM_env.count() 
+          || synthdata->listM_vcenv.count() 
+          || synthdata->listM_dynamicwaves.count())
+          && !foundOsc) {
+          min_e = 1.0;
+          osc = 0;
+          for (l2 = 0; l2 < synthdata->poly; l2++) {
+            for (l1 = 0; l1 < synthdata->listM_dynamicwaves.count(); l1++) {
+              if (((M_dynamicwaves *)synthdata->listM_dynamicwaves.at(l1))->noteActive[l2]) {
+                if (((M_dynamicwaves *)synthdata->listM_dynamicwaves.at(l1))->e[l2][0] < min_e) {
+                   min_e = ((M_dynamicwaves *)synthdata->listM_dynamicwaves.at(l1))->e[l2][0];
+                   osc = l2;
+                }
+              }
+            }
+            for (l1 = 0; l1 < synthdata->listM_env.count(); l1++) {
+              if (((M_env *)synthdata->listM_env.at(l1))->noteActive[l2]) {
+                if (((M_env *)synthdata->listM_env.at(l1))->e[l2] < min_e) {
+                   min_e = ((M_env *)synthdata->listM_env.at(l1))->e[l2];
+                   osc = l2;
+                }
+              }
+            }
+            for (l1 = 0; l1 < synthdata->listM_vcenv.count(); l1++) {
+              if (((M_vcenv *)synthdata->listM_vcenv.at(l1))->noteActive[l2]) {
+                if (((M_vcenv *)synthdata->listM_vcenv.at(l1))->e[l2] < min_e) {
+                   min_e = ((M_vcenv *)synthdata->listM_vcenv.at(l1))->e[l2];
+                   osc = l2;
+                }
+              }
+            }
+            for (l1 = 0; l1 < synthdata->listM_advenv.count(); l1++) {
+              if (((M_advenv *)synthdata->listM_advenv.at(l1))->noteActive[l2]) {
+                if (((M_advenv *)synthdata->listM_advenv.at(l1))->e[l2] < min_e) {
+                   min_e = ((M_advenv *)synthdata->listM_advenv.at(l1))->e[l2];
+                   osc = l2;
+                }
+              }
+            }
+          }
+          synthdata->noteActive[osc] = true; 
+          synthdata->notePressed[osc] = true;
+          synthdata->velocity[osc] = ev->data.note.velocity;
+          synthdata->channel[osc] = ev->data.note.channel;
+          synthdata->notes[osc] = ev->data.note.note;   
+          for (l1 = 0; l1 < listModule.count(); l1++) {
+            listModule.at(l1)->noteOnEvent(osc);
+          }
+        }
+      } else {
+        for (l2 = 0; l2 < synthdata->poly; l2++) {
+          if ((synthdata->notes[l2] == ev->data.note.note)
+            && (synthdata->channel[l2] == ev->data.note.channel)) {
+            synthdata->notePressed[l2] = false;
+            for (l1 = 0; l1 < listModule.count(); l1++) {
+              listModule.at(l1)->noteOffEvent(l2);
+            } 
+          }   
+        }     
+      }       
+    }
+    if ((ev->type == SND_SEQ_EVENT_CONTROLLER) && (ev->data.control.param == MIDI_CTL_ALL_NOTES_OFF)) {
+      for (l2 = 0; l2 < synthdata->poly; l2++) {
+        if (synthdata->notePressed[l2] && (synthdata->channel[l2] == ev->data.note.channel)) {
+          synthdata->notePressed[l2] = false;
+          synthdata->noteActive[l2] = false;
+          for (l1 = 0; l1 < listModule.count(); l1++) {
+            listModule.at(l1)->noteOffEvent(l2);
+          } 
+        }   
+      }     
+    }
+    if (ev->type == SND_SEQ_EVENT_PGMCHANGE) {
+      guiWidget->setCurrentPreset(ev->data.control.value);
+    }
+    for (l1 = 0; l1 < synthdata->listM_advmcv.count(); l1++) {
+      switch (ev->type) {
+        case SND_SEQ_EVENT_CHANPRESS: 
+          ((M_advmcv *)synthdata->listM_advmcv.at(l1))->aftertouchEvent(ev->data.note.channel, ev->data.control.value);
+          break;
+        case SND_SEQ_EVENT_PITCHBEND:
+          ((M_advmcv *)synthdata->listM_advmcv.at(l1))->pitchbendEvent(ev->data.note.channel, ev->data.control.value); 
+          break;
+        case SND_SEQ_EVENT_CONTROLLER: 
+          ((M_advmcv *)synthdata->listM_advmcv.at(l1))->controllerEvent(ev->data.note.channel, ev->data.control.param, ev->data.control.value);
+          break;
+      }
+    }
+    snd_seq_free_event(ev);
+  } while (snd_seq_event_input_pending(synthdata->seq_handle, 0) > 0);
+}
+
+void ModularSynth::initPorts(Module *m) {
+
+  int l1;
+
+  for (l1 = 0; l1 < m->portList.count(); l1++) {
+    QObject::connect(m->portList.at(l1), SIGNAL(portClicked()), 
+                     this, SLOT(portSelected()));
+    QObject::connect(m->portList.at(l1), SIGNAL(portDisconnected()), 
+                     this, SLOT(updatePortConnections()));
+  }
+}
+
+void ModularSynth::initNewModule(Module *m) {
+
+  int cx, cy;
+
+  addChild(m);
+  viewportToContents((visibleWidth()-m->width())>>1, (visibleHeight()-m->height())>>1, cx, cy);
+  moveChild(m, cx, cy);
+  m->show();
+  QObject::connect(m, SIGNAL(dragged(QPoint)), this, SLOT(moveModule(QPoint)));
+  QObject::connect(m, SIGNAL(removeModule()), this, SLOT(deleteModule()));
+  listModule.append(m);
+  if (!loadingPatch) {
+    midiWidget->addModule(m);
+  }
+  initPorts(m);
+}
+
+void ModularSynth::new_textEdit() {
+
+  int cx, cy;
+
+  TextEdit *te = new TextEdit(viewport(), "textEdit", synthdata);
+  addChild(te);
+  viewportToContents((visibleWidth()-te->width())>>1, (visibleHeight()-te->height())>>1, cx, cy);
+  moveChild(te, cx, cy);
+  te->show();
+  QObject::connect(te, SIGNAL(dragged(QPoint)), this, SLOT(moveTextEdit(QPoint)));
+  QObject::connect(te, SIGNAL(sizeDragged(QPoint)), this, SLOT(resizeTextEdit(QPoint)));
+  QObject::connect(te, SIGNAL(removeTextEdit()), this, SLOT(deleteTextEdit()));
+  listTextEdit.append(te);
+}
+
+void ModularSynth::new_textEdit(int x, int y, int w, int h) {
+
+  TextEdit *te = new TextEdit(viewport(), "textEdit", synthdata);
+  addChild(te);
+  te->setFixedSize(w, h);
+  moveChild(te, x, y);
+  te->show();
+  QObject::connect(te, SIGNAL(dragged(QPoint)), this, SLOT(moveTextEdit(QPoint)));
+  QObject::connect(te, SIGNAL(sizeDragged(QPoint)), this, SLOT(resizeTextEdit(QPoint)));
+  QObject::connect(te, SIGNAL(removeTextEdit()), this, SLOT(deleteTextEdit()));
+  listTextEdit.append(te);
+}
+
+void ModularSynth::startSynth() {
+  
+  if (!synthdata->withJack) {
+    synthdata->doSynthesis = true;
+    if (!synth->running()) {
+      synth->start();
+    }
+    if (synthdata->moduleInCount) {
+      synthdata->doCapture = true;
+      if (!capture->running()) {
+        capture->start();
+      }
+    }
+  } else {
+    synthdata->doSynthesis = true;
+//    if (!synthdata->jackRunning && (synthdata->jackOutCount + synthdata->jackInCount > 0)) {
+//      synthdata->activateJack();
+//    }
+  }
+}
+
+void ModularSynth::stopSynth() {
+
+  synthdata->doSynthesis = false;
+  synthdata->doCapture = false;
+//  if (synthdata->withJack) {
+//    synthdata->deactivateJack();
+//  }
+}
+
+void ModularSynth::newM_seq(int seqLen) {
+
+  M_seq *m = new M_seq(seqLen, viewport(), "M_seq", synthdata);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_seq_8() {
+
+  newM_seq(8);
+}
+
+void ModularSynth::newM_seq_12() {
+
+  newM_seq(12);
+}
+
+void ModularSynth::newM_seq_16() {
+
+  newM_seq(16);
+}
+
+void ModularSynth::newM_seq_24() {
+
+  newM_seq(24);
+}
+
+void ModularSynth::newM_seq_32() {
+
+  newM_seq(32);
+}
+
+void ModularSynth::newM_vcorgan(int oscCount) {
+ 
+  M_vcorgan *m = new M_vcorgan(oscCount, viewport(), "M_vcorgan", synthdata);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_vcorgan_4() {
+
+  newM_vcorgan(4);
+}
+
+void ModularSynth::newM_vcorgan_6() {
+
+  newM_vcorgan(6);
+}
+
+void ModularSynth::newM_vcorgan_8() {
+
+  newM_vcorgan(8);
+}
+
+void ModularSynth::newM_dynamicwaves(int oscCount) {
+ 
+  M_dynamicwaves *m = new M_dynamicwaves(oscCount, viewport(), "M_dynamicwaves", synthdata);
+  synthdata->listM_dynamicwaves.append(m);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_dynamicwaves_4() {
+
+  newM_dynamicwaves(4);
+}
+
+void ModularSynth::newM_dynamicwaves_6() {
+
+  newM_dynamicwaves(6);
+}
+
+void ModularSynth::newM_dynamicwaves_8() {
+
+  newM_dynamicwaves(8);
+}
+
+void ModularSynth::newM_mcv() {
+
+  M_mcv *m = new M_mcv(viewport(), "M_mcv", synthdata);
+  synthdata->listM_mcv.append(m);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_advmcv() {
+
+  M_advmcv *m = new M_advmcv(viewport(), "M_advmcv", synthdata);
+  synthdata->listM_advmcv.append(m);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_scmcv() {
+
+  M_scmcv *m = new M_scmcv(viewport(), "M_scmcv", synthdata);
+  synthdata->listM_scmcv.append(m);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_scmcv(QString *p_scalaName) {
+
+  M_scmcv *m = new M_scmcv(viewport(), "M_scmcv", synthdata, p_scalaName);
+  synthdata->listM_scmcv.append(m);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_env() {
+
+  M_env *m = new M_env(viewport(), "M_env", synthdata);
+  synthdata->listM_env.append(m);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_vcenv() {
+
+  M_vcenv *m = new M_vcenv(viewport(), "M_vcenv", synthdata);
+  synthdata->listM_vcenv.append(m);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_advenv() {
+
+  M_advenv *m = new M_advenv(viewport(), "M_advenv", synthdata);
+  synthdata->listM_advenv.append(m);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_vco() {
+
+  M_vco *m = new M_vco(viewport(), "M_vco", synthdata);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_vca_lin() {
+
+  M_vca *m = new M_vca(false, viewport(), "M_vca", synthdata);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_vca_exp() {
+
+  M_vca *m = new M_vca(true, viewport(), "M_vca", synthdata);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_lfo() {
+
+  M_lfo *m = new M_lfo(viewport(), "M_lfo", synthdata);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_noise() {
+
+  M_noise *m = new M_noise(viewport(), "M_noise", synthdata);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_ringmod() {
+
+  M_ringmod *m = new M_ringmod(viewport(), "M_ringmod", synthdata);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_inv() {
+
+  M_inv *m = new M_inv(viewport(), "M_inv", synthdata);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_conv() {
+
+  M_conv *m = new M_conv(viewport(), "M_conv", synthdata);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_cvs() {
+
+  M_cvs *m = new M_cvs(viewport(), "M_cvs", synthdata);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_sh() {
+
+  M_sh *m = new M_sh(viewport(), "M_sh", synthdata);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_vcswitch() {
+
+  M_vcswitch *m = new M_vcswitch(viewport(), "M_vcswitch", synthdata);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_slew() {
+
+  M_slew *m = new M_slew(viewport(), "M_slew", synthdata);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_quantizer() {
+
+  M_quantizer *m = new M_quantizer(viewport(), "M_quantizer", synthdata);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_scquantizer(QString *p_scalaName) {
+
+  M_scquantizer *m = new M_scquantizer(viewport(), "M_scquantizer", synthdata, p_scalaName);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_scquantizer() {
+
+  M_scquantizer *m = new M_scquantizer(viewport(), "M_scquantizer", synthdata);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_delay() {
+
+  M_delay *m = new M_delay(viewport(), "M_delay", synthdata);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_mix(int in_channels) {
+
+  M_mix *m = new M_mix(in_channels, viewport(), "M_mix", synthdata);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_stereomix(int in_channels) {
+
+  M_stereomix *m = new M_stereomix(in_channels, viewport(), "M_stereomix", synthdata);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_mix_2() {
+
+  newM_mix(2);
+}
+
+void ModularSynth::newM_mix_4() {
+
+  newM_mix(4);
+}
+
+void ModularSynth::newM_mix_8() {
+
+  newM_mix(8);
+}
+
+void ModularSynth::newM_stereomix_2() {
+
+  newM_stereomix(2);
+}
+
+void ModularSynth::newM_stereomix_4() {
+
+  newM_stereomix(4);
+}
+
+void ModularSynth::newM_stereomix_8() {
+
+  newM_stereomix(8);
+}
+
+void ModularSynth::newM_ladspa(int p_ladspaDesFuncIndex, int n, bool p_newLadspaPoly, bool p_extCtrlPorts) {
+
+  QString qs;
+
+  qs.sprintf("%s", synthdata->ladspa_dsc_func_list[p_ladspaDesFuncIndex](n)->Name);
+  M_ladspa *m = new M_ladspa(viewport(), "M_ladspa", synthdata, p_ladspaDesFuncIndex, n, p_newLadspaPoly, p_extCtrlPorts);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_out() {
+
+  if (!synthdata->moduleOutCount) {
+    synthdata->pcm_handle = open_pcm(false);
+  }
+  M_out *m = new M_out(viewport(), "M_out", synthdata);
+  synthdata->outModuleList.append((QObject *)m);
+  initNewModule((Module *)m);
+  synthdata->moduleOutCount++;
+}
+
+void ModularSynth::newM_wavout() {
+
+  M_wavout *m = new M_wavout(viewport(), "M_wavout", synthdata);
+  synthdata->wavoutModuleList.append((QObject *)m);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_midiout() {
+
+  M_midiout *m = new M_midiout(viewport(), "M_midiout", synthdata);
+  synthdata->midioutModuleList.append((QObject *)m);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_jackout() {
+
+  M_jackout *m = new M_jackout(viewport(), "M_jackout", synthdata);
+  synthdata->jackoutModuleList.append((QObject *)m);
+  initNewModule((Module *)m);
+  synthdata->jackOutCount++;
+//  if (!synthdata->jackRunning) {
+//    synthdata->activateJack();
+//  }
+}
+void ModularSynth::newM_jackin() {
+
+  M_jackin *m = new M_jackin(viewport(), "M_jackin", synthdata);
+  synthdata->jackinModuleList.append((QObject *)m);
+  initNewModule((Module *)m);
+  synthdata->jackInCount++;
+//  if (!synthdata->jackRunning) {
+//    synthdata->activateJack();
+//  }
+}
+
+void ModularSynth::newM_scope() {
+
+  M_scope *m = new M_scope(viewport(), "M_scope", synthdata);
+  synthdata->scopeModuleList.append((QObject *)m);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_spectrum() {
+
+  M_spectrum *m = new M_spectrum(viewport(), "M_spectrum", synthdata);
+  synthdata->spectrumModuleList.append((QObject *)m);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_in() {
+
+  if (!synthdata->moduleInCount) {
+    synthdata->pcm_capture_handle = open_pcm(true);
+    synthdata->doCapture = synthdata->doSynthesis; 
+    if (!capture->running()) {
+      capture->start();
+    }
+  } 
+  synthdata->moduleInCount++;
+  M_in *m = new M_in(viewport(), "M_in", synthdata);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_vcf() {
+ 
+  M_vcf *m = new M_vcf(viewport(), "M_vcf", synthdata);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::moveModule(QPoint pos) {
+
+  int l1;
+  Module *m;
+  int cx, cy;
+  
+  for (l1 = 0; l1 < listModule.count(); l1++) {
+    if ((m=listModule.at(l1)) == sender()) {
+      viewportToContents(pos.x() - m->getMousePressPos().x() + m->pos().x(),
+                         pos.y() - m->getMousePressPos().y() + m->pos().y(),
+                         cx, cy);
+      moveChild(m, cx, cy);
+    }
+  }
+}
+
+void ModularSynth::moveTextEdit(QPoint pos) {
+
+  int l1;
+  TextEdit *te;
+  int cx, cy;
+  
+  for (l1 = 0; l1 < listTextEdit.count(); l1++) {
+    if ((te=listTextEdit.at(l1)) == sender()) {
+      viewportToContents(pos.x() - te->getMousePressPos().x() + te->pos().x(),
+                         pos.y() - te->getMousePressPos().y() + te->pos().y(),
+                         cx, cy);
+      moveChild(te, cx, cy);
+    }
+  }
+}
+
+void ModularSynth::resizeTextEdit(QPoint pos) {
+
+  int l1;
+  TextEdit *te;
+  int cx, cy;
+  
+  for (l1 = 0; l1 < listTextEdit.count(); l1++) {
+    if ((te=listTextEdit.at(l1)) == sender()) {
+      cx = pos.x();
+      cy = pos.y();
+      if ((cx > 200) && (cy > 170)) { 
+        te->setFixedSize(cx + 3, cy + 3);
+      }
+    }
+  }
+}
+
+void ModularSynth::portSelected() {
+
+  if (firstPort) {
+    firstPort = false;
+    connectingPort[0] = (Port *)sender();
+    connectingPort[0]->highlighted = true;
+    connectingPort[0]->repaint(false);
+  } else {
+    firstPort = true;
+    connectingPort[1] = (Port *)sender();
+    connectingPort[0]->highlighted = false;  
+    connectingPort[0]->repaint(false);
+    connectingPort[1]->highlighted = false;
+    connectingPort[1]->repaint(false);
+    if ((((connectingPort[0]->dir == PORT_IN) && (connectingPort[1]->dir == PORT_OUT))
+      ||((connectingPort[1]->dir == PORT_IN) && (connectingPort[0]->dir == PORT_OUT)))
+      && (connectingPort[0]->parentModule != connectingPort[1]->parentModule)) {
+        connectingPort[0]->connectTo(connectingPort[1]);
+        connectingPort[1]->connectTo(connectingPort[0]);
+      repaintContents(false);
+    } else {
+      printf("Connection refused.\n");
+      connectingPort[0] = NULL;
+      connectingPort[1] = NULL;
+    }
+  } 
+}
+
+void ModularSynth::updatePortConnections() {
+
+  repaintContents(false);
+}
+
+void ModularSynth::deleteModule() {
+
+  Module *m;
+ 
+  connectingPort[0] = NULL;
+  connectingPort[1] = NULL;
+  firstPort = true;
+  m = (Module *)sender();
+  midiWidget->deleteModule(m);
+  if (m->M_type == M_type_env) {
+    synthdata->listM_env.removeRef((QObject *)sender());
+  }
+  if (m->M_type == M_type_vcenv) {
+    synthdata->listM_vcenv.removeRef((QObject *)sender());
+  }
+  if (m->M_type == M_type_advenv) {
+    synthdata->listM_advenv.removeRef((QObject *)sender());
+  }
+  if (m->M_type == M_type_dynamicwaves) {
+    synthdata->listM_dynamicwaves.removeRef((QObject *)sender());
+  }
+  if (m->M_type == M_type_mcv) {
+    synthdata->listM_mcv.removeRef((QObject *)sender());
+  }
+  if (m->M_type == M_type_advmcv) {
+    synthdata->listM_advmcv.removeRef((QObject *)sender());
+  }
+  if (m->M_type == M_type_out) {
+    synthdata->moduleOutCount--;
+    if (!synthdata->moduleOutCount) {
+      sleep(1);
+      snd_pcm_close(synthdata->pcm_handle);
+    }
+    synthdata->outModuleList.removeRef((QObject *)sender());
+  }
+  if (m->M_type == M_type_jackout) {
+    synthdata->jackOutCount--;
+//    if (synthdata->jackOutCount + synthdata->jackInCount == 0) {
+//      synthdata->deactivateJack();
+//    }
+    synthdata->jackoutModuleList.removeRef((QObject *)sender());
+  }
+  if (m->M_type == M_type_jackin) {
+    synthdata->jackInCount--;
+//    if (synthdata->jackOutCount + synthdata->jackInCount == 0) {
+//      synthdata->deactivateJack();
+//    }
+    synthdata->jackinModuleList.removeRef((QObject *)sender());
+  }
+  if (m->M_type == M_type_wavout) {
+    synthdata->wavoutModuleList.removeRef((QObject *)sender());
+  }
+  if (m->M_type == M_type_midiout) {
+    synthdata->midioutModuleList.removeRef((QObject *)sender());
+  }
+  if (m->M_type == M_type_scope) {
+    synthdata->scopeModuleList.removeRef((QObject *)sender());
+  }
+  if (m->M_type == M_type_spectrum) {
+    synthdata->spectrumModuleList.removeRef((QObject *)sender());
+  }
+  if (m->M_type == M_type_in) {
+    synthdata->moduleInCount--;
+    if (!synthdata->moduleInCount) {
+      synthdata->doCapture = false;
+      sleep(1);
+      snd_pcm_close(synthdata->pcm_capture_handle);
+    }
+  }  
+  listModule.removeRef(m);
+  delete(m);
+}
+
+void ModularSynth::deleteTextEdit() {
+
+  listTextEdit.removeRef((TextEdit *)sender());
+  delete((TextEdit *)sender());
+}
+
+void ModularSynth::deleteTextEdit(TextEdit *te) {
+
+  delete(te);
+}
+
+void ModularSynth::deleteModule(Module *m) {
+
+  midiWidget->deleteModule(m);
+  if (m->M_type == M_type_env) {
+    synthdata->listM_env.removeRef((QObject *)m);
+  }
+  if (m->M_type == M_type_vcenv) {
+    synthdata->listM_vcenv.removeRef((QObject *)m);
+  }
+  if (m->M_type == M_type_advenv) {
+    synthdata->listM_advenv.removeRef((QObject *)m);
+  }
+  if (m->M_type == M_type_dynamicwaves) {
+    synthdata->listM_dynamicwaves.removeRef((QObject *)m);
+  }
+  if (m->M_type == M_type_mcv) {
+    synthdata->listM_mcv.removeRef((QObject *)m);
+  }
+  if (m->M_type == M_type_advmcv) {
+    synthdata->listM_advmcv.removeRef((QObject *)m);
+  }
+  if (m->M_type == M_type_out) {
+    synthdata->moduleOutCount--;  
+    if (!synthdata->moduleOutCount) {
+      sleep(1);
+      snd_pcm_close(synthdata->pcm_handle);
+    }
+    synthdata->outModuleList.removeRef((QObject *)m);
+  }
+  if (m->M_type == M_type_jackout) {
+    synthdata->jackOutCount--;
+//    if (synthdata->jackOutCount + synthdata->jackInCount == 0) {
+//      synthdata->deactivateJack();
+//    }
+    synthdata->jackoutModuleList.removeRef((QObject *)m);
+  }
+  if (m->M_type == M_type_jackin) {
+    synthdata->jackInCount--;
+//    if (synthdata->jackOutCount + synthdata->jackInCount == 0) {
+//      synthdata->deactivateJack();
+//    }
+    synthdata->jackinModuleList.removeRef((QObject *)m);
+  }
+  if (m->M_type == M_type_wavout) {
+    synthdata->wavoutModuleList.removeRef((QObject *)m);
+  }
+  if (m->M_type == M_type_midiout) {
+    synthdata->midioutModuleList.removeRef((QObject *)m);
+  }
+  if (m->M_type == M_type_scope) {
+    synthdata->scopeModuleList.removeRef((QObject *)m);
+  }
+  if (m->M_type == M_type_spectrum) {
+    synthdata->spectrumModuleList.removeRef((QObject *)m);
+  }
+  if (m->M_type == M_type_in) {
+    synthdata->moduleInCount--;
+    if (!synthdata->moduleInCount) {
+      synthdata->doCapture = false;
+      sleep(1);
+      snd_pcm_close(synthdata->pcm_capture_handle);
+    }
+  }  
+  delete(m);
+}
+
+void ModularSynth::clearConfig() {
+
+  int l1;
+  bool restartSynth;
+  QString qs;
+
+  qs.sprintf("AlsaModularSynth 1.6.0 - %d:%d", clientid, portid);
+  mainWindow->setCaption(qs);
+  restartSynth = synthdata->doSynthesis;
+  synthdata->doSynthesis = false;
+  synthdata->doCapture = false;
+  if (!synthdata->withJack) {
+    while(synth->running()) {
+      sleep(1);
+    }
+  } else {
+//    synthdata->deactivateJack();
+//    sleep(1);
+  }
+  guiWidget->clearGui();
+//  delete guiWidget;
+  for (l1 = 0; l1 < listModule.count(); l1++) {
+    deleteModule(listModule.at(l1));
+  }
+  listModule.clear();
+  for (l1 = 0; l1 < listTextEdit.count(); l1++) {
+    deleteTextEdit(listTextEdit.at(l1));
+  }
+  listTextEdit.clear();
+  synthdata->moduleID = 0;
+  synthdata->moduleCount = 0;
+//  guiWidget = new GuiWidget(synthdata, NULL);   
+//  guiWidget->setCaption("AlsaModularSynth Parameter View");
+//  synthdata->guiWidget = (QObject *)guiWidget;
+  if (restartSynth) {
+    synthdata->doSynthesis = true;    
+    if (!synthdata->withJack) { 
+      if (!synth->running()) {
+        synth->start();
+      } else {
+        fprintf(stderr, "Audio thread is already running...\n");
+      }
+      if (synthdata->moduleInCount) {
+        synthdata->doCapture = true;
+        if (!capture->running()) {
+          capture->start();
+        } else {
+          fprintf(stderr, "Capture thread is already running...\n");
+        }
+      }
+    }
+  }
+}
+
+void ModularSynth::load() {
+
+  QString config_fn;
+
+  if (presetPath.isEmpty()) {
+    if (!(config_fn = QString(QFileDialog::getOpenFileName(QString::null, "AlsaModularSynth files (*.ams)")))) {
+      return;
+    }
+  } else {
+      if (!(config_fn = QString(QFileDialog::getOpenFileName(presetPath, "AlsaModularSynth files (*.ams)")))) {
+      return;
+    }
+  }
+  load(&config_fn);
+}
+
+void ModularSynth::load(QString *presetName) {
+
+  int l1, l2;
+  int M_type, moduleID, index, value, x, y, w, h, subID1, subID2;
+  int index1, index2, moduleID1, moduleID2, midiSign;
+  int index_read1, index_read2, moduleID_read1, moduleID_read2;
+  int type, ch, param, isLogInt, midiIndex, sliderMin, sliderMax;
+  FILE *f;
+  QString config_fn, qs, qs2, ladspaLibName, pluginName, para, scalaName;
+  char sc[2048];
+  bool restartSynth, isLog, ladspaLoadErr, commentFlag, followConfig;
+  int newLadspaPolyFlag, textEditID;
+  Module *m;
+  int currentProgram;
+
+  restartSynth = synthdata->doSynthesis; 
+  synthdata->doSynthesis = false;
+  followConfig = midiWidget->followConfig;
+  midiWidget->followConfig = false;
+  config_fn = *presetName;
+  currentProgram = -1;
+  if (!(f = fopen(config_fn, "r"))) {
+    QMessageBox::information( this, "AlsaModularSynth", "Could not open file.");  
+  } else {
+    clearConfig();
+    qs2 = config_fn.mid(config_fn.findRev('/') + 1);
+    qs.sprintf("AlsaModularSynth 1.6.0 - %d:%d - %s", clientid, portid, qs2.latin1());
+    mainWindow->setCaption(qs);
+    ladspaLoadErr = false;
+    commentFlag = false;
+    loadingPatch = true;
+    while(fscanf(f, "%s", sc) != EOF) {
+      qs = QString(sc);
+      if (qs.contains("#PARA#", false)) {
+        commentFlag = true;
+      }
+      if (qs.contains("#ARAP#", false)) {
+        commentFlag = false;
+      }
+      if (qs.contains("Module", false) && !commentFlag) {
+        fscanf(f, "%d", &M_type);
+        fscanf(f, "%d", &moduleID);
+        fscanf(f, "%d", &x);
+        fscanf(f, "%d", &y);
+        switch ((M_typeEnum)M_type) {
+          case M_type_ladspa: 
+            fscanf(f, "%d", &newLadspaPolyFlag);
+            fscanf(f, "%s", sc);
+            ladspaLibName = QString(sc);
+            fgets(sc, 2048, f);
+            sc[strlen(sc)-1] = '\0';
+            pluginName = QString(sc+1);
+            fprintf(stderr, "Loading LADSPA plugin \"%s\" from library \"%s\".\n", pluginName.latin1(), ladspaLibName.latin1());
+            if (!synthdata->getLadspaIDs(ladspaLibName, pluginName, &subID1, &subID2)) {
+              sprintf(sc, "Could not find LADSPA plugin \"%s\" from library \"%s\".\n", pluginName.latin1(), ladspaLibName.latin1());
+              QMessageBox::information( this, "AlsaModularSynth", QString(sc));  
+              ladspaLoadErr = true;
+            }
+            break;
+          case M_type_scquantizer: 
+            fscanf(f, "%s", &sc);
+            scalaName = QString(sc);
+            break;
+          case M_type_scmcv: 
+            fscanf(f, "%s", &sc);
+            scalaName = QString(sc);
+            break;
+          default: 
+            fscanf(f, "%d", &subID1);
+            fscanf(f, "%d", &subID2);
+            break;
+        }
+        switch((M_typeEnum)M_type) {
+          case M_type_custom: 
+            break;
+          case M_type_vco: 
+            newM_vco();
+            break;
+          case M_type_vca: 
+            if (subID1) {
+              newM_vca_exp();
+            } else {
+              newM_vca_lin();
+            }
+            break;
+          case M_type_vcf: 
+            newM_vcf();
+            break;
+          case M_type_lfo: 
+            newM_lfo();
+            break;
+          case M_type_noise: 
+            newM_noise();
+            break;
+          case M_type_delay: 
+            newM_delay();
+            break;
+          case M_type_seq: 
+            newM_seq(subID1);
+            break;
+          case M_type_env: 
+            newM_env();
+            break;
+          case M_type_vcenv: 
+            newM_vcenv();
+            break;
+          case M_type_advenv: 
+            newM_advenv();
+            break;
+          case M_type_mcv: 
+            newM_mcv();
+            break;
+          case M_type_advmcv: 
+            newM_advmcv();
+            break;
+          case M_type_scmcv: 
+            newM_scmcv(&scalaName);
+            break;
+          case M_type_ringmod: 
+            newM_ringmod();
+            break;
+          case M_type_inv: 
+            newM_inv();
+            break;
+          case M_type_conv: 
+            newM_conv();
+            break;
+          case M_type_sh: 
+            newM_sh();
+            break;
+          case M_type_vcswitch: 
+            newM_vcswitch();
+            break;
+          case M_type_cvs: 
+            newM_cvs();
+            break;
+          case M_type_slew: 
+            newM_slew();
+            break;
+          case M_type_quantizer: 
+            newM_quantizer();
+            break;
+          case M_type_scquantizer: 
+            newM_scquantizer(&scalaName);
+            break;
+          case M_type_mix: 
+            newM_mix(subID1);
+            break;
+          case M_type_stereomix: 
+            newM_stereomix(subID1);
+            break;
+          case M_type_vcorgan: 
+            newM_vcorgan(subID1);
+            break;
+          case M_type_dynamicwaves: 
+            newM_dynamicwaves(subID1);
+            break;
+          case M_type_ladspa: 
+            if (!ladspaLoadErr) {
+              newM_ladspa(subID1, subID2, newLadspaPolyFlag & 2, newLadspaPolyFlag & 1);
+            } 
+            break;
+          case M_type_out:
+            if (synthdata->withJack) {
+              newM_jackout();
+            } else {
+              newM_out(); 
+            }
+            break;
+          case M_type_jackout:
+            if (synthdata->withJack) {
+              newM_jackout();
+            } else {
+              newM_out();
+            }
+            break;
+          case M_type_jackin:
+            if (synthdata->withJack) {
+              newM_jackin();
+            } else {
+              newM_in();
+            }
+            break;
+          case M_type_wavout:
+            newM_wavout(); 
+            break;
+          case M_type_midiout:
+            newM_midiout(); 
+            break;
+          case M_type_scope:
+            newM_scope(); 
+            break;
+          case M_type_spectrum:
+            newM_spectrum(); 
+            break;
+          case M_type_in:
+            if (synthdata->withJack) {
+              newM_jackin();
+            } else {
+              newM_in(); 
+            }
+            break;
+        }
+        m = listModule.at(listModule.count()-1);
+        moveChild(m, x, y);
+        m->moduleID=moduleID;
+        qs = m->configDialog->caption();
+        qs2 = qs.left(qs.findRev(" "));
+        qs.sprintf(" %d", moduleID);
+        m->configDialog->setCaption(qs2+qs);
+        midiWidget->addModule(m);
+        if (synthdata->moduleID <= moduleID) {
+          synthdata->moduleID = moduleID+1;
+        }
+      }
+      if (qs.contains("Comment", false) && !commentFlag) {
+        fscanf(f, "%d", &textEditID);
+        fscanf(f, "%d", &textEditID); // TODO textEditID is not needed yet
+        fscanf(f, "%d", &x);
+        fscanf(f, "%d", &y);
+        fscanf(f, "%d", &w);
+        fscanf(f, "%d", &h);
+        new_textEdit(x, y, w, h);
+      }
+    }
+    rewind(f);
+    while((fscanf(f, "%s", sc) != EOF) && !ladspaLoadErr) {
+      qs = QString(sc);
+      if (qs.contains("Port", false)) {
+        fscanf(f, "%d", &index1); 
+        fscanf(f, "%d", &index2);
+        fscanf(f, "%d", &moduleID1);
+        fscanf(f, "%d", &moduleID2); 
+        moduleID_read1 = 0;
+        moduleID_read2 = 0;
+        index_read1 = 0;
+        index_read2 = 0;
+        for (l1 = 0; l1 < listModule.count(); l1++) {
+          if (listModule.at(l1)->moduleID == moduleID1) {
+            moduleID_read1 = l1;
+          }
+          if (listModule.at(l1)->moduleID == moduleID2) {
+            moduleID_read2 = l1;
+          }
+        }
+        for (l1 = 0; l1 < listModule.at(moduleID_read1)->portList.count(); l1++) {
+          if ((listModule.at(moduleID_read1)->portList.at(l1)->index == index1) 
+            && (listModule.at(moduleID_read1)->portList.at(l1)->dir == PORT_IN)) {
+            index_read1 = l1;
+          }
+        } 
+        for (l1 = 0; l1 < listModule.at(moduleID_read2)->portList.count(); l1++) {
+          if ((listModule.at(moduleID_read2)->portList.at(l1)->index == index2)
+            && (listModule.at(moduleID_read2)->portList.at(l1)->dir == PORT_OUT)) {
+            index_read2 = l1;
+          } 
+        }   
+        listModule.at(moduleID_read1)->portList.at(index_read1)->connectTo(listModule.at(moduleID_read2)->portList.at(index_read2));
+        listModule.at(moduleID_read2)->portList.at(index_read2)->connectTo(listModule.at(moduleID_read1)->portList.at(index_read1));
+      }
+      if (qs.contains("FSlider", false)) {
+        fscanf(f, "%d", &moduleID);
+        fscanf(f, "%d", &index);
+        fscanf(f, "%d", &value);
+        fscanf(f, "%d", &isLogInt);
+        fscanf(f, "%d", &sliderMin);
+        fscanf(f, "%d", &sliderMax);
+        fscanf(f, "%d", &midiSign);
+        isLog = isLogInt == 1;
+        for (l1 = 0; l1 < listModule.count(); l1++) {
+          if (listModule.at(l1)->moduleID == moduleID) {
+            listModule.at(l1)->configDialog->midiSliderList.at(index)->setLogMode(isLog);
+            listModule.at(l1)->configDialog->midiSliderList.at(index)->updateValue(value);
+            listModule.at(l1)->configDialog->midiSliderList.at(index)->setLogMode(isLog);
+            listModule.at(l1)->configDialog->midiSliderList.at(index)->setNewMin(sliderMin);
+            listModule.at(l1)->configDialog->midiSliderList.at(index)->setNewMax(sliderMax);
+            listModule.at(l1)->configDialog->midiSliderList.at(index)->midiSign = midiSign;
+            break;
+          }
+        }
+      }
+      if (qs.contains("ISlider", false)) {
+        fscanf(f, "%d", &moduleID);
+        fscanf(f, "%d", &index);
+        fscanf(f, "%d", &value);
+        fscanf(f, "%d", &midiSign); 
+        for (l1 = 0; l1 < listModule.count(); l1++) {
+          if (listModule.at(l1)->moduleID == moduleID) {
+            listModule.at(l1)->configDialog->intMidiSliderList.at(index)->slider->setValue((int)value);
+            listModule.at(l1)->configDialog->intMidiSliderList.at(index)->midiSign = midiSign;
+            break;
+          }
+        }
+      }
+      if (qs.contains("LSlider", false)) {
+        fscanf(f, "%d", &moduleID);
+        fscanf(f, "%d", &index);
+        fscanf(f, "%d", &value);
+        fscanf(f, "%d", &midiSign); 
+        for (l1 = 0; l1 < listModule.count(); l1++) {
+          if (listModule.at(l1)->moduleID == moduleID) {
+            listModule.at(l1)->configDialog->floatIntMidiSliderList.at(index)->slider->setValue((int)value);
+            listModule.at(l1)->configDialog->floatIntMidiSliderList.at(index)->midiSign = midiSign;
+            break;
+          }
+        }
+      }
+      if (qs.contains("ComboBox", false)) {
+        fscanf(f, "%d", &moduleID);
+        fscanf(f, "%d", &index);
+        fscanf(f, "%d", &value);
+        fscanf(f, "%d", &midiSign); 
+        for (l1 = 0; l1 < listModule.count(); l1++) {
+          if (listModule.at(l1)->moduleID == moduleID) {
+            listModule.at(l1)->configDialog->midiComboBoxList.at(index)->comboBox->setCurrentItem(value);
+            listModule.at(l1)->configDialog->midiComboBoxList.at(index)->midiSign = midiSign;
+            break;
+          }
+        }
+      }
+      if (qs.contains("CheckBox", false)) {
+        fscanf(f, "%d", &moduleID);
+        fscanf(f, "%d", &index);
+        fscanf(f, "%d", &value);
+        fscanf(f, "%d", &midiSign); 
+        for (l1 = 0; l1 < listModule.count(); l1++) {
+          if (listModule.at(l1)->moduleID == moduleID) {
+            listModule.at(l1)->configDialog->midiCheckBoxList.at(index)->checkBox->setChecked(value==1);
+            listModule.at(l1)->configDialog->midiCheckBoxList.at(index)->midiSign = midiSign;
+            break;
+          }
+        }
+      }
+      if (qs.contains("MIDI", false)) {
+        fscanf(f, "%d", &moduleID);
+        fscanf(f, "%d", &index);   
+        fscanf(f, "%d", &type);   
+        fscanf(f, "%d", &ch);
+        fscanf(f, "%d", &param);
+        MidiController *midiController = new MidiController(type, ch, param);
+        if (!midiWidget->midiControllerList.contains(midiController)) {
+          midiWidget->addMidiController(midiController);
+        } else {
+          midiIndex = midiWidget->midiControllerList.find(midiController);
+          delete(midiController);
+          midiController = midiWidget->midiControllerList.at(midiIndex);
+        }
+        if (qs.contains("FSMIDI", false)) {
+          listModule.at(l1)->configDialog->midiSliderList.at(index)->connectToController(midiController);
+        }
+        if (qs.contains("ISMIDI", false)) {
+          listModule.at(l1)->configDialog->intMidiSliderList.at(index)->connectToController(midiController);
+        }
+        if (qs.contains("LSMIDI", false)) {
+          listModule.at(l1)->configDialog->floatIntMidiSliderList.at(index)->connectToController(midiController);
+        }
+        if (qs.contains("CMIDI", false)) {
+          listModule.at(l1)->configDialog->midiComboBoxList.at(index)->connectToController(midiController);
+        }
+        if (qs.contains("TMIDI", false)) {
+          listModule.at(l1)->configDialog->midiCheckBoxList.at(index)->connectToController(midiController);
+        }
+      }
+      if (qs.contains("#PARA#", false)) {
+        fscanf(f, "%d", &textEditID);
+        fscanf(f, "%d", &textEditID);
+        fscanf(f, "%d", &index);
+        fscanf(f, "%s", sc);
+        qs = QString(sc);
+        if (!qs.contains("#ARAP#", false)) {
+          para = QString(sc) + " ";
+        } else {
+          para = "\n";
+        }
+        while (!qs.contains("#ARAP#", false)) {
+          fscanf(f, "%s", sc);
+          qs = QString(sc);
+          if (!qs.contains("#ARAP#", false)) {
+            para.append(qs+" "); 
+          }
+        }
+        listTextEdit.at(textEditID)->textEdit->insertParagraph(para, index);
+      }
+      if (qs.contains("Frame", false)) {
+        qs.truncate(0);
+        do {
+          fscanf(f, "%s", sc);
+          qs += QString(sc);
+          if (qs.right(1) != "\"") {
+            qs += " ";
+          }
+        } while (qs.right(1) != "\"");
+        qs = qs.mid(1, qs.length()-2);
+        guiWidget->addFrame(qs);
+      }
+      if (qs.contains("Parameter", false)) {
+        qs.truncate(0);
+        do {
+          fscanf(f, "%s", sc);
+          qs += QString(sc);
+          if (qs.right(1) != "\"") {
+            qs += " ";
+          }
+        } while (qs.right(1) != "\"");
+        qs = qs.mid(1, qs.length()-2);
+        fscanf(f, "%d", &moduleID);
+        fscanf(f, "%d", &index);
+        for (l1 = 0; l1 < listModule.count(); l1++) {
+          if (listModule.at(l1)->moduleID == moduleID) {
+            guiWidget->addParameter(listModule.at(l1)->configDialog->midiGUIcomponentList.at(index), qs);
+            if (listModule.at(l1)->configDialog->midiGUIcomponentList.at(index)->componentType == GUIcomponentType_slider) {
+              fscanf(f, "%d", &sliderMin);
+              fscanf(f, "%d", &sliderMax);
+              fscanf(f, "%d", &isLogInt);
+              ((MidiSlider *)guiWidget->parameterList.last())->setNewMin(sliderMin);
+              ((MidiSlider *)guiWidget->parameterList.last())->setNewMax(sliderMax);
+              ((MidiSlider *)guiWidget->parameterList.last())->setLogMode(isLogInt == 1);
+            }
+            break;
+          }
+        }
+      }  
+      if (qs.contains("Program", false)) {
+        fscanf(f, "%d", &index);
+        fscanf(f, "%d", &value);
+        if (index != currentProgram) {
+          currentProgram = index;
+          guiWidget->setPresetCount(currentProgram + 1);
+        }
+        guiWidget->presetList[currentProgram].append(value);
+      }
+    }
+    if (guiWidget->presetCount) {
+      guiWidget->setCurrentPreset(0);
+    }
+    fclose(f);
+    loadingPatch = false;
+  }
+  synthdata->doSynthesis = true;
+  if (!synthdata->withJack) {
+    if (restartSynth && !synth->running()) {
+      synth->start();
+    } else {
+      fprintf(stderr, "Audio thread is already running...\n");
+    } 
+    if (synthdata->moduleInCount) {
+      synthdata->doCapture = true;
+      if (!capture->running()) {
+        capture->start();
+      } else {
+        fprintf(stderr, "Capture thread is already running...\n");
+      }
+    }
+  }
+  midiWidget->followConfig = followConfig;
+}
+
+void ModularSynth::save() {
+
+  Port *port[2];
+  int l1, l2, l3, value;
+  FILE *f;
+  QString config_fn, qs;
+  QValueList<int>::iterator it;
+   
+  if (!(config_fn = QString(QFileDialog::getSaveFileName(savePath, "AlsaModularSynth files (*.ams)")))) {
+    return;
+  }
+  if (!(f = fopen(config_fn, "w"))) {
+    QMessageBox::information( this, "AlsaModularSynth", "Could not save file.");
+  } else {
+    for (l1 = 0; l1 < listModule.count(); l1++) {
+      fprintf(f, "Module %d %d %d %d ", (int)listModule.at(l1)->M_type, listModule.at(l1)->moduleID, 
+              listModule.at(l1)->x(),  listModule.at(l1)->y());
+      switch(listModule.at(l1)->M_type) {
+        case M_type_custom: 
+          break;
+        case M_type_vca: 
+          fprintf(f, "%d 0\n", (int)((M_vca *)listModule.at(l1))->expMode); 
+          break;
+        case M_type_mix: 
+          fprintf(f, "%d 0\n", ((M_mix *)listModule.at(l1))->in_channels);
+          break;
+        case M_type_stereomix: 
+          fprintf(f, "%d 0\n", ((M_stereomix *)listModule.at(l1))->in_channels);
+          break;
+        case M_type_vcorgan: 
+          fprintf(f, "%d 0\n", ((M_vcorgan *)listModule.at(l1))->oscCount);
+          break;
+        case M_type_dynamicwaves: 
+          fprintf(f, "%d 0\n", ((M_dynamicwaves *)listModule.at(l1))->oscCount);
+          break;
+        case M_type_seq: 
+          fprintf(f, "%d 0\n", ((M_seq *)listModule.at(l1))->seqLen);
+          break;
+        case M_type_ladspa: 
+          fprintf(f, "%d %s %s\n", 2 * (int)((M_ladspa *)listModule.at(l1))->isPoly
+                  + (int)((M_ladspa *)listModule.at(l1))->hasExtCtrlPorts, 
+                  synthdata->ladspa_lib_name[((M_ladspa *)listModule.at(l1))->ladspaDesFuncIndex].latin1(), 
+                  ((M_ladspa *)listModule.at(l1))->pluginName.latin1());
+          break;
+        case M_type_scquantizer: 
+          qs = ((M_scquantizer *)listModule.at(l1))->sclname.latin1();
+          if (qs.contains("/")) {
+            qs = qs.mid(qs.findRev("/") + 1);             
+          }
+          fprintf(f, "%s\n", qs.latin1());
+          break;
+        case M_type_scmcv: 
+          qs = ((M_scmcv *)listModule.at(l1))->sclname.latin1();
+          if (qs.contains("/")) {
+            qs = qs.mid(qs.findRev("/") + 1);             
+          }
+          fprintf(f, "%s\n", qs.latin1());
+          break;
+        default:
+          fprintf(f, "0 0\n");  
+          break; 
+      }
+      for (l2 = 0; l2 < listModule.at(l1)->portList.count(); l2++) {
+        port[0] = listModule.at(l1)->portList.at(l2);
+        if ((port[0]->dir == PORT_IN) && port[0]->connectedPortList.count()) {
+          port[1] = port[0]->connectedPortList.at(0);
+          fprintf(f, "Port %d %d %d %d\n", port[0]->index, port[1]->index, 
+                  ((Module *)port[0]->parentModule)->moduleID, ((Module *)port[1]->parentModule)->moduleID);
+        }   
+      }
+      for (l2 = 0; l2 < listModule.at(l1)->configDialog->midiSliderList.count(); l2++) {
+        fprintf(f, "FSlider %d %d %d %d %d %d %d\n", listModule.at(l1)->moduleID, l2, 
+                listModule.at(l1)->configDialog->midiSliderList.at(l2)->slider->value(),
+                listModule.at(l1)->configDialog->midiSliderList.at(l2)->isLog,
+                listModule.at(l1)->configDialog->midiSliderList.at(l2)->slider->minValue(),
+                listModule.at(l1)->configDialog->midiSliderList.at(l2)->slider->maxValue(),
+                listModule.at(l1)->configDialog->midiSliderList.at(l2)->midiSign);
+        for (l3 = 0; l3 < listModule.at(l1)->configDialog->midiSliderList.at(l2)->midiControllerList.count(); l3++) {
+          fprintf(f, "FSMIDI %d %d %d %d %d\n", listModule.at(l1)->moduleID, l2,
+                  listModule.at(l1)->configDialog->midiSliderList.at(l2)->midiControllerList.at(l3)->type, 
+                  listModule.at(l1)->configDialog->midiSliderList.at(l2)->midiControllerList.at(l3)->ch,
+                  listModule.at(l1)->configDialog->midiSliderList.at(l2)->midiControllerList.at(l3)->param);
+        }
+      }
+      for (l2 = 0; l2 < listModule.at(l1)->configDialog->intMidiSliderList.count(); l2++) {
+        fprintf(f, "ISlider %d %d %d %d\n", listModule.at(l1)->moduleID, l2, 
+                    listModule.at(l1)->configDialog->intMidiSliderList.at(l2)->slider->value(),
+                    listModule.at(l1)->configDialog->intMidiSliderList.at(l2)->midiSign);
+        for (l3 = 0; l3 < listModule.at(l1)->configDialog->intMidiSliderList.at(l2)->midiControllerList.count(); l3++) {
+          fprintf(f, "ISMIDI %d %d %d %d %d\n", listModule.at(l1)->moduleID, l2,
+                  listModule.at(l1)->configDialog->intMidiSliderList.at(l2)->midiControllerList.at(l3)->type, 
+                  listModule.at(l1)->configDialog->intMidiSliderList.at(l2)->midiControllerList.at(l3)->ch,
+                  listModule.at(l1)->configDialog->intMidiSliderList.at(l2)->midiControllerList.at(l3)->param);
+        }
+      }
+      for (l2 = 0; l2 < listModule.at(l1)->configDialog->floatIntMidiSliderList.count(); l2++) {
+        fprintf(f, "LSlider %d %d %d %d\n", listModule.at(l1)->moduleID, l2, 
+                    listModule.at(l1)->configDialog->floatIntMidiSliderList.at(l2)->slider->value(),
+                    listModule.at(l1)->configDialog->floatIntMidiSliderList.at(l2)->midiSign);
+        for (l3 = 0; l3 < listModule.at(l1)->configDialog->floatIntMidiSliderList.at(l2)->midiControllerList.count(); l3++) {
+          fprintf(f, "LSMIDI %d %d %d %d %d\n", listModule.at(l1)->moduleID, l2,
+                  listModule.at(l1)->configDialog->floatIntMidiSliderList.at(l2)->midiControllerList.at(l3)->type, 
+                  listModule.at(l1)->configDialog->floatIntMidiSliderList.at(l2)->midiControllerList.at(l3)->ch,
+                  listModule.at(l1)->configDialog->floatIntMidiSliderList.at(l2)->midiControllerList.at(l3)->param);
+        }
+      }
+      for (l2 = 0; l2 < listModule.at(l1)->configDialog->midiComboBoxList.count(); l2++) {
+        fprintf(f, "ComboBox %d %d %d %d\n", listModule.at(l1)->moduleID, l2, 
+                listModule.at(l1)->configDialog->midiComboBoxList.at(l2)->comboBox->currentItem(),
+                listModule.at(l1)->configDialog->midiComboBoxList.at(l2)->midiSign);
+        for (l3 = 0; l3 < listModule.at(l1)->configDialog->midiComboBoxList.at(l2)->midiControllerList.count(); l3++) {
+          fprintf(f, "CMIDI %d %d %d %d %d\n", listModule.at(l1)->moduleID, l2,
+                  listModule.at(l1)->configDialog->midiComboBoxList.at(l2)->midiControllerList.at(l3)->type,
+                  listModule.at(l1)->configDialog->midiComboBoxList.at(l2)->midiControllerList.at(l3)->ch,  
+                  listModule.at(l1)->configDialog->midiComboBoxList.at(l2)->midiControllerList.at(l3)->param);
+        }
+      }
+      for (l2 = 0; l2 < listModule.at(l1)->configDialog->midiCheckBoxList.count(); l2++) {
+        fprintf(f, "CheckBox %d %d %d %d\n", listModule.at(l1)->moduleID, l2, 
+                (int)(listModule.at(l1)->configDialog->midiCheckBoxList.at(l2)->checkBox->isChecked()),
+                listModule.at(l1)->configDialog->midiCheckBoxList.at(l2)->midiSign);
+        for (l3 = 0; l3 < listModule.at(l1)->configDialog->midiCheckBoxList.at(l2)->midiControllerList.count(); l3++) {
+          fprintf(f, "TMIDI %d %d %d %d %d\n", listModule.at(l1)->moduleID, l2,
+                  listModule.at(l1)->configDialog->midiCheckBoxList.at(l2)->midiControllerList.at(l3)->type,
+                  listModule.at(l1)->configDialog->midiCheckBoxList.at(l2)->midiControllerList.at(l3)->ch,  
+                  listModule.at(l1)->configDialog->midiCheckBoxList.at(l2)->midiControllerList.at(l3)->param);
+        }
+      }
+    }
+    for (l1 = 0; l1 < listTextEdit.count(); l1++) {
+      fprintf(f, "Comment %d %d %d %d %d %d\n", listTextEdit.at(l1)->textEditID, l1, 
+                  listTextEdit.at(l1)->x(), listTextEdit.at(l1)->y(), 
+                  listTextEdit.at(l1)->width(), listTextEdit.at(l1)->height());
+    }
+    for (l1 = 0; l1 < listTextEdit.count(); l1++) {
+      for (l2 = 0; l2 < listTextEdit.at(l1)->textEdit->paragraphs(); l2++) {
+        fprintf(f, "#PARA# %d %d %d\n", listTextEdit.at(l1)->textEditID, l1, l2);
+        fprintf(f, "%s\n", listTextEdit.at(l1)->textEdit->text(l2).latin1());
+        fprintf(f, "#ARAP#\n");
+      }
+    }
+
+    for (l1 = 0; l1 < guiWidget->frameBoxList.count(); l1++) {
+      fprintf(f, "Frame \"%s\"\n", guiWidget->frameBoxList.at(l1)->name());
+      for (l2 = 0; l2 < guiWidget->parameterList.count(); l2++) {
+        if (guiWidget->parameterList.at(l2)->parent() == guiWidget->frameBoxList.at(l1)) {
+          fprintf(f, "Parameter \"%s\" %d %d ", guiWidget->parameterList.at(l2)->name(), 
+                                         ((Module *)guiWidget->parameterList.at(l2)->parentModule)->moduleID, 
+                                         guiWidget->parameterList.at(l2)->midiGUIcomponentListIndex);
+          if (guiWidget->parameterList.at(l2)->componentType == GUIcomponentType_slider) {
+            fprintf(f, "%d %d %d\n", ((MidiSlider *)guiWidget->parameterList.at(l2))->slider->minValue(), 
+                                   ((MidiSlider *)guiWidget->parameterList.at(l2))->slider->maxValue(), 
+                                   ((MidiSlider *)guiWidget->parameterList.at(l2))->isLog);
+          } else {
+            fprintf(f, "\n");
+          }
+        }
+      }
+    }
+
+    for (l1 = 0; l1 < guiWidget->presetCount; l1++) {
+      for (it = guiWidget->presetList[l1].begin(); it != guiWidget->presetList[l1].end(); it++) {
+        value = *it;
+        fprintf(f, "Program %d %d\n", l1, value);
+      } 
+    }
+
+    fclose(f);
+  }
+}
+
+void ModularSynth::allVoicesOff() {
+
+  int l1, l2;
+
+  for (l2 = 0; l2 < synthdata->poly; l2++) {
+    if (synthdata->notePressed[l2]) {
+      synthdata->notePressed[l2] = false; 
+      synthdata->noteActive[l2] = false;
+      for (l1 = 0; l1 < listModule.count(); l1++) {      
+        listModule.at(l1)->noteOffEvent(l2);
+      } 
+    }
+  } 
+}
+
+void ModularSynth::cleanUpSynth() {
+
+  fprintf(stderr, "Closing Synth...\n");
+  if (synthdata->withJack && synthdata->jackRunning) {
+    synthdata->deactivateJack();
+  }
+  fprintf(stderr, "Ready.\n"); 
+}

Added: ams/trunk/.#modularsynth.cpp.1.4
===================================================================
--- ams/trunk/.#modularsynth.cpp.1.4	2004-10-30 11:15:34 UTC (rev 5)
+++ ams/trunk/.#modularsynth.cpp.1.4	2004-10-30 11:18:02 UTC (rev 6)
@@ -0,0 +1,2027 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <glob.h>
+#include <dlfcn.h>
+#include <qregexp.h>
+#include <qthread.h>
+#include <qwidget.h>
+#include <qstring.h>
+#include <qslider.h>
+#include <qcheckbox.h>
+#include <qlabel.h>
+#include <qpainter.h>
+#include <qpixmap.h>
+#include <qvbox.h>
+#include <qpopupmenu.h>
+#include <qpointarray.h>
+#include <qmessagebox.h>
+#include <qsocketnotifier.h>
+#include <qfiledialog.h>
+#include <qmainwindow.h>
+#include <qimage.h>
+#include <qpen.h>
+#include <qscrollview.h>
+#include <qlistview.h>
+#include <alsa/asoundlib.h>
+#include <ladspa.h>
+#include <jack/jack.h>
+#include "modularsynth.h"
+#include "port.h"
+#include "midiwidget.h"
+#include "guiwidget.h"
+#include "midicontroller.h"
+#include "ladspadialog.h"
+
+ModularSynth::ModularSynth(int poly, int periodsize, QWidget *parent, const char *name) 
+                          : QScrollView(parent, name, Qt::WResizeNoErase | Qt::WRepaintNoErase | Qt::WStaticContents) {
+  
+  firstPort = true;
+  connectingPort[0] = NULL;
+  connectingPort[1] = NULL;
+  connectorStyle = CONNECTOR_BEZIER;
+  aboutWidget = new QMessageBox(this); 
+  mainWindow = (QMainWindow *)parent;
+  clientid = 0;
+  portid = 0;
+  jack_in_ports = 2;
+  jack_out_ports = 2;
+  synthdata = new SynthData(poly, periodsize);
+  midiWidget = new MidiWidget(synthdata, NULL);
+  midiWidget->setCaption("AlsaModularSynth Control Center");
+  synthdata->midiWidget = (QObject *)midiWidget;
+  guiWidget = new GuiWidget(synthdata, NULL);
+  guiWidget->setCaption("AlsaModularSynth Parameter View");
+  synthdata->guiWidget = (QObject *)guiWidget;
+  PCMname = DEFAULT_PCMNAME;
+  presetPath = "";
+  ladspaDialog = new LadspaDialog(synthdata, NULL);
+  QObject::connect(ladspaDialog, SIGNAL(createLadspaModule(int, int, bool, bool)),
+                   this, SLOT(newM_ladspa(int, int, bool, bool)));
+  setPalette(QPalette(QColor(117, 67, 21), QColor(117, 67, 21)));
+  loadingPatch = false;
+}
+
+ModularSynth::~ModularSynth()
+{
+  delete synthdata;
+}
+
+void ModularSynth::viewportPaintEvent(QPaintEvent *pe) {
+  
+  QPixmap pm(visibleWidth(), visibleHeight());
+  QPainter p(&pm);
+  QPen *pen;
+  QPointArray qpa(4);
+  int l1, l2;
+  Port *port[2];
+  int port_x[2], port_y[2];
+  QPoint port_pos[2];
+  int moduleX[2], moduleY[2];
+
+  pm.fill(QColor(130, 90, 25));
+  p.setPen(QColor(220, 216, 216));
+  pen = new QPen(QColor(220, 216, 216), 3);
+  for (l1 = 0; l1 < listModule.count(); l1++) {
+    for (l2 = 0; l2 < listModule.at(l1)->portList.count(); l2++) {
+      port[0] = listModule.at(l1)->portList.at(l2);
+      if ((port[0]->dir == PORT_IN) && port[0]->connectedPortList.count()) {
+        port[1] = port[0]->connectedPortList.at(0);
+        port_pos[0] = port[0]->pos();
+        port_pos[1] = port[1]->pos();
+        contentsToViewport(childX(port[0]->parentModule), childY(port[0]->parentModule), moduleX[0], moduleY[0]);
+        contentsToViewport(childX(port[1]->parentModule), childY(port[1]->parentModule), moduleX[1], moduleY[1]);
+        port_x[0] = port_pos[0].x() + moduleX[0];
+        port_x[1] = port_pos[1].x() + port[1]->width() + moduleX[1];
+        port_y[0] = port_pos[0].y() + moduleY[0] + port[0]->height()/2;
+        port_y[1] = port_pos[1].y() + moduleY[1] + port[1]->height()/2;
+        if (connectorStyle == CONNECTOR_BEZIER) {
+          qpa.setPoint(0, port_x[0], port_y[0]);
+          qpa.setPoint(1, (port_x[1] - port_x[0]) / 2 + port_x[0], 
+                          (port_y[1] - port_y[0]) / 2 + port_y[0] + 50);
+          qpa.setPoint(2, port_x[1], port_y[1]);
+          qpa.setPoint(3, port_x[1], port_y[1]);
+          pen->setWidth(5);
+          pen->setColor(QColor(150, 140, 140));
+          p.setPen(*pen);
+          p.drawCubicBezier(qpa);
+          pen->setWidth(3);
+          pen->setColor(QColor(180, 170, 170));
+          p.setPen(*pen);
+          p.drawCubicBezier(qpa);
+          pen->setWidth(1);
+          pen->setColor(QColor(220, 216, 216));
+          p.setPen(*pen);          
+          p.drawCubicBezier(qpa);
+        }
+        if (connectorStyle == CONNECTOR_STRAIGHT) {
+          p.drawLine(port_x[0], port_y[0], port_x[1], port_y[1]);
+        }
+        if (port[0]->parentModule->x() < port[1]->parentModule->x()) {
+          pen->setWidth(5);
+          pen->setColor(QColor(150, 140, 140));
+          p.setPen(*pen);
+          p.drawLine(port_x[0], port_y[0], port_x[0] - 5, port_y[0]);
+          pen->setWidth(3);
+          pen->setColor(QColor(180, 170, 170));
+          p.setPen(*pen);
+          p.drawLine(port_x[0], port_y[0], port_x[0] - 6, port_y[0]);
+          pen->setWidth(1);
+          pen->setColor(QColor(220, 216, 216));
+          p.setPen(*pen);
+          p.drawLine(port_x[0], port_y[0], port_x[0] - 7, port_y[0]);
+        }
+        if (port[1]->parentModule->x() > port[0]->parentModule->x()) {
+          pen->setWidth(5);
+          pen->setColor(QColor(150, 140, 140));
+          p.setPen(*pen);
+          p.drawLine(port_x[1], port_y[1], port_x[1] + 5, port_y[1]);
+          pen->setWidth(3);
+          pen->setColor(QColor(180, 170, 170));
+          p.setPen(*pen);
+          p.drawLine(port_x[1], port_y[1], port_x[1] + 6, port_y[1]);
+          pen->setWidth(1);
+          pen->setColor(QColor(220, 216, 216));
+          p.setPen(*pen);
+          p.drawLine(port_x[1], port_y[1], port_x[1] + 7, port_y[1]);
+        }
+      }
+    }
+  }
+  bitBlt(viewport(), 0, 0, &pm);
+  delete pen;
+}
+ 
+void ModularSynth::mousePressEvent(QMouseEvent *ev) {
+  
+  switch (ev->button()) {
+  case Qt::LeftButton:  
+    break;
+  case Qt::RightButton:
+    break;
+  case Qt::MidButton:
+    break;
+  default:
+    break;
+  }
+}  
+   
+void ModularSynth::mouseReleaseEvent(QMouseEvent *ev) {
+  
+  switch (ev->button()) {
+  case Qt::LeftButton:   
+    break;
+  case Qt::RightButton:
+    break;
+  case Qt::MidButton:
+    if (connectorStyle == CONNECTOR_STRAIGHT) {
+      connectorStyle = CONNECTOR_BEZIER;
+    } else {
+      connectorStyle = CONNECTOR_STRAIGHT;
+    }
+    repaintContents(false);
+    break;
+  default:
+    break;
+  }
+}  
+   
+QSize ModularSynth::sizeHint() const {
+
+  return QSize(SYNTH_MINIMUM_WIDTH, SYNTH_MINIMUM_HEIGHT);
+}
+
+QSizePolicy ModularSynth::sizePolicy() const {
+
+  return QSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
+}
+
+
+int ModularSynth::go(bool withJack) {
+
+  synthdata->seq_handle = open_seq();
+  initSeqNotifier();
+  if (withJack) {
+    synthdata->initJack(jack_in_ports, jack_out_ports);
+    synthdata->doSynthesis = true;
+  } else {
+    synth = new Synth(synthdata);
+    capture = new Capture(synthdata);
+    synthdata->doSynthesis = true;
+    synthdata->doCapture = false;
+    synth->start();
+  }
+  return(0);
+}
+
+void ModularSynth::displayAbout() {
+ 
+    aboutWidget->about(this, "About AlsaModularSynth", "AlsaModularSynth 1.6.0\n"
+                     "by Matthias Nagorni\n"
+                     "(c)2002-2003 SuSE AG Nuremberg\n\n"
+                     "Documentation and examples can be found in\n"
+                     "/usr/share/doc/packages/kalsatools\n\n"
+                     "More presets and updates are available from\n"
+                     "http://alsamodular.sourceforge.net"
+    "\n\nAcknowledgements\n"
+    "----------------------\n\n"
+    "The VCF Module uses the resonant low-pass filter by Paul Kellett\n" 
+    "and the Cookbook formulae for audio EQ biquad filter coefficients\n"
+    "by Robert Bristow-Johnson. The experimental 24 dB Lowpass filters have\n" 
+    "been taken from http://musicdsp.org. They are based on the CSound source\n"
+    "code, the paper by Stilson/Smith and modifications by Paul Kellett\n" 
+    "and Timo Tossavainen. The pink noise conversion formula is by Paul\n" 
+    "Kellett and has been taken from http://musicdsp.org as well.\n\n"
+    "The author is grateful to Takashi Iwai for instructions about ALSA.\n"
+    "Klaas Freitag, Helmut Herold, Stefan Hundhammer and Arvin Schnell\n"
+    "answered many questions about QT. Thanks to Jörg Arndt for valuable\n"
+    "hints regarding speed optimization. Torsten Rahn has helped to\n" 
+    "improve the color scheme of the program. Thanks to Bernhard Kaindl\n"
+    "for helpful discussion. Fons Adriaensen has contributed patches for the\n"
+    "MCV and Spectrum View modules. He has also contributed many valuable ideas.\n");
+    aboutWidget->raise();
+}
+
+void ModularSynth::displayMidiController() {
+   
+  midiWidget->show();  
+  midiWidget->raise();
+}
+
+void ModularSynth::displayParameterView() {
+
+  guiWidget->show();
+  guiWidget->raise();
+}
+
+void ModularSynth::displayLadspaPlugins() {
+   
+  ladspaDialog->show();  
+  ladspaDialog->raise();
+}
+
+int ModularSynth::setPeriodsize(int p_periodsize){
+
+  synthdata->setPeriodsize(p_periodsize);
+  synthdata->setCycleSize(synthdata->periodsize);  // TODO allow cyclesize < periodsize
+  fprintf(stderr, "Cyclesize: %d Periodsize: %d\n", synthdata->cyclesize, synthdata->periodsize); 
+  return(0);
+}
+
+int ModularSynth::setPeriods(int p_periods){
+
+  synthdata->setPeriods(p_periods);
+  return(0);
+}
+
+int ModularSynth::setRate(int p_rate){
+
+  synthdata->setRate(p_rate);
+  return(0);
+}
+
+int ModularSynth::setChannels(int p_channels){
+
+  synthdata->setChannels(p_channels);
+  return(0);
+}
+
+int ModularSynth::setPCMname(QString p_name){
+
+  PCMname = p_name;
+  return(0);
+}
+
+int ModularSynth::setPresetPath(QString name) {
+
+  presetPath = name;
+  return(0);
+}
+
+int ModularSynth::setSavePath(QString name) {
+
+  savePath = name;
+  return(0);
+}
+
+snd_pcm_t *ModularSynth::open_pcm(bool openCapture) {
+  
+  snd_pcm_t *pcm_handle;
+  snd_pcm_stream_t stream;
+  snd_pcm_hw_params_t *hwparams;
+  int buffersize_return;
+
+  stream = (openCapture) ? SND_PCM_STREAM_CAPTURE : SND_PCM_STREAM_PLAYBACK; 
+  if (snd_pcm_open(&pcm_handle, PCMname.latin1(), stream, 0) < 0) {
+    fprintf(stderr, "Error opening PCM device %s\n", PCMname.latin1());
+    exit(1);
+  }
+  snd_pcm_hw_params_alloca(&hwparams);
+  if (snd_pcm_hw_params_any(pcm_handle, hwparams) < 0) {
+    fprintf(stderr, "Can not configure this PCM device.\n");
+    exit(1);
+  }
+  if (snd_pcm_hw_params_set_access(pcm_handle, hwparams, SND_PCM_ACCESS_RW_INTERLEAVED) < 0) {
+    fprintf(stderr, "Error setting access.\n");
+    exit(1);
+  }
+  if (snd_pcm_hw_params_set_format(pcm_handle, hwparams, SND_PCM_FORMAT_S16_LE) < 0) {
+    fprintf(stderr, "Error setting format.\n");
+    exit(1);
+  }
+  if (snd_pcm_hw_params_set_rate_near(pcm_handle, hwparams, synthdata->rate, 0) < 0) {
+    fprintf(stderr, "Error setting rate.\n");
+    exit(1);
+  }
+  if (snd_pcm_hw_params_set_channels(pcm_handle, hwparams, synthdata->channels) < 0) {
+    fprintf(stderr, "Error setting channels.\n");
+    exit(1);
+  }
+  if (snd_pcm_hw_params_set_periods(pcm_handle, hwparams, synthdata->periods, 0) < 0) {
+    fprintf(stderr, "Error setting periods.\n");
+    exit(1);
+  }
+  if ((buffersize_return = snd_pcm_hw_params_set_buffer_size_near(pcm_handle, hwparams, 
+                           synthdata->periodsize * synthdata->periods)) < 0) {
+    fprintf(stderr, "Error setting buffersize.\n");
+    exit(1);
+  }
+  if (buffersize_return != synthdata->periodsize * synthdata->periods) {
+    fprintf(stderr, "Buffersize %d is not available on your hardware. Using %d instead.\n", 
+            synthdata->periodsize, buffersize_return * synthdata->periods);
+    setPeriodsize(buffersize_return / synthdata->periods);
+  }
+  if (snd_pcm_hw_params(pcm_handle, hwparams) < 0) {
+    fprintf(stderr, "Error setting HW params.\n");
+    exit(1);
+  }
+  return(pcm_handle);
+}
+
+snd_seq_t *ModularSynth::open_seq() {
+
+  snd_seq_t *seq_handle;
+  int l1;
+  QString qs;
+
+  if (snd_seq_open(&seq_handle, "hw", SND_SEQ_OPEN_DUPLEX, 0) < 0) {
+    fprintf(stderr, "Error opening ALSA sequencer.\n");
+    exit(1);
+  }
+  snd_seq_set_client_name(seq_handle, "AlsaModularSynth");
+  clientid = snd_seq_client_id(seq_handle);
+  if ((portid = snd_seq_create_simple_port(seq_handle, "ams",
+            SND_SEQ_PORT_CAP_WRITE|SND_SEQ_PORT_CAP_SUBS_WRITE,
+            SND_SEQ_PORT_TYPE_APPLICATION)) < 0) {
+    fprintf(stderr, "Error creating sequencer port.\n");
+    exit(1);
+  }
+  for (l1 = 0; l1 < 2; l1++) {
+    if ((synthdata->midi_out_port[l1] = snd_seq_create_simple_port(seq_handle, "ams",
+            SND_SEQ_PORT_CAP_READ|SND_SEQ_PORT_CAP_SUBS_READ,
+            SND_SEQ_PORT_TYPE_APPLICATION)) < 0) {
+      fprintf(stderr, "Error creating sequencer port.\n");
+      exit(1);
+    }
+  }
+  qs.sprintf("AlsaModularSynth 1.6.0 - %d:%d", clientid, portid);
+  mainWindow->setCaption(qs);
+  synthdata->jackName.sprintf("ams_%d_%d", clientid, portid);
+  return(seq_handle);
+}
+
+int ModularSynth::initSeqNotifier() {
+
+  int alsaEventFd = 0;
+
+  struct pollfd pfd[1];
+  snd_seq_poll_descriptors(synthdata->seq_handle, pfd, 1, POLLIN);
+  alsaEventFd = pfd[0].fd;
+  seqNotifier = new QSocketNotifier(alsaEventFd, QSocketNotifier::Read);
+  QObject::connect(seqNotifier, SIGNAL(activated(int)),
+                   this, SLOT(midiAction(int)));
+  return(0);
+}
+
+void ModularSynth::midiAction(int fd) {
+
+  snd_seq_event_t *ev;
+  QString qs;
+  int l1, l2, osc;
+  bool noteActive, foundOsc;
+  float min_e;
+  MidiController *midiController; 
+
+  do {
+    snd_seq_event_input(synthdata->seq_handle, &ev);
+    if (midiWidget->isVisible()) {
+      if ((ev->type == SND_SEQ_EVENT_CONTROLLER)  
+        ||(ev->type == SND_SEQ_EVENT_CONTROL14)   
+        ||(ev->type == SND_SEQ_EVENT_PITCHBEND)) {
+        MidiController *midiController = new MidiController();
+        midiController->type = ev->type;
+        midiController->ch = ev->data.control.channel;  
+        midiController->param = (ev->type==SND_SEQ_EVENT_PITCHBEND) 
+                              ? 0 : ev->data.control.param; 
+        if (!midiWidget->midiControllerList.contains(midiController)) {
+          midiWidget->addMidiController(midiController);
+        } else {
+          delete midiController;
+        } 
+      } 
+      if (midiWidget->noteControllerEnabled &&((ev->type == SND_SEQ_EVENT_NOTEON)
+        ||(ev->type == SND_SEQ_EVENT_NOTEOFF))) {
+        MidiController *midiController = new MidiController();
+        midiController->type = ev->type;
+        midiController->ch = ev->data.control.channel;
+        midiController->param = ev->data.note.note;
+        if (!midiWidget->midiControllerList.contains(midiController)) {
+          midiWidget->addMidiController(midiController);       
+        } else {
+          delete midiController;
+        } 
+      }
+    }  
+    if (midiWidget->followMidi) {
+      for(l1 = 0; l1 < midiWidget->midiControllerList.count(); l1++) {
+        midiController = midiWidget->midiControllerList.at(l1);
+        if ((midiController->type == ev->type)
+          &&(midiController->ch == ev->data.control.channel)) {
+          if (ev->type == SND_SEQ_EVENT_PITCHBEND) {
+            emit midiController->sendMidiValue((ev->data.control.value + 8192) / 128);
+            midiWidget->setSelectedController(midiController);
+          }
+          if ((ev->type == SND_SEQ_EVENT_CONTROL14)
+           && (midiController->param == ev->data.control.param)) {
+            emit midiController->sendMidiValue(ev->data.control.value / 128);
+            midiWidget->setSelectedController(midiController);
+          }
+          if ((ev->type == SND_SEQ_EVENT_CONTROLLER) 
+           && (midiController->param == ev->data.control.param)) {
+            emit midiController->sendMidiValue(ev->data.control.value);
+            midiWidget->setSelectedController(midiController);
+          }
+          if ((ev->type == SND_SEQ_EVENT_NOTEON) 
+           && (midiController->param == ev->data.note.note)) {
+            emit midiController->sendMidiValue(ev->data.note.velocity);
+            midiWidget->setSelectedController(midiController);
+          }
+          if ((ev->type == SND_SEQ_EVENT_NOTEOFF) 
+           && (midiController->param == ev->data.note.note)) {
+            emit midiController->sendMidiValue(0);
+            midiWidget->setSelectedController(midiController);
+          }
+        }    
+      }
+    } else {
+      for(l1 = 0; l1 < midiWidget->midiControllerList.count(); l1++) {
+        midiController = midiWidget->midiControllerList.at(l1);
+        if ((midiController->type == ev->type)
+          &&(midiController->ch == ev->data.control.channel)) {
+          if (ev->type == SND_SEQ_EVENT_PITCHBEND) {
+            emit midiController->sendMidiValue((ev->data.control.value + 8192) / 128);
+          }
+          if ((ev->type == SND_SEQ_EVENT_CONTROL14)
+           && (midiController->param == ev->data.control.param)) {
+            emit midiController->sendMidiValue(ev->data.control.value / 128);
+          }
+          if ((ev->type == SND_SEQ_EVENT_CONTROLLER) 
+           && (midiController->param == ev->data.control.param)) {
+            emit midiController->sendMidiValue(ev->data.control.value);
+          }
+          if ((ev->type == SND_SEQ_EVENT_NOTEON) 
+           && (midiController->param == ev->data.note.note)) {
+            emit midiController->sendMidiValue(ev->data.note.velocity);
+          }
+          if ((ev->type == SND_SEQ_EVENT_NOTEOFF) 
+           && (midiController->param == ev->data.note.note)) {
+            emit midiController->sendMidiValue(0);
+          }
+        }    
+      }
+    }   
+    if (((ev->type == SND_SEQ_EVENT_NOTEON) || (ev->type == SND_SEQ_EVENT_NOTEOFF)) 
+         && ((synthdata->midiChannel < 0) || (synthdata->midiChannel == ev->data.control.channel))) {
+      for (l2 = 0; l2 < synthdata->poly; l2++) {
+        noteActive = false; 
+        for (l1 = 0; l1 < synthdata->listM_env.count(); l1++) {
+          if (((M_env *)synthdata->listM_env.at(l1))->noteActive[l2]) {   
+            noteActive = true;
+          }
+        }  
+        for (l1 = 0; l1 < synthdata->listM_vcenv.count(); l1++) {
+          if (((M_vcenv *)synthdata->listM_vcenv.at(l1))->noteActive[l2]) {   
+            noteActive = true;
+          }
+        }  
+        for (l1 = 0; l1 < synthdata->listM_advenv.count(); l1++) {
+          if (((M_advenv *)synthdata->listM_advenv.at(l1))->noteActive[l2]) {   
+            noteActive = true;
+          }
+        }  
+        for (l1 = 0; l1 < synthdata->listM_dynamicwaves.count(); l1++) {
+          if (((M_dynamicwaves *)synthdata->listM_dynamicwaves.at(l1))->noteActive[l2]) {   
+            noteActive = true;
+          }
+        }  
+        synthdata->noteActive[l2] = noteActive || synthdata->notePressed[l2];
+      }
+      if ((ev->type == SND_SEQ_EVENT_NOTEON) && (ev->data.note.velocity > 0)) {
+        foundOsc = false;
+        for (l2 = 0; l2 < synthdata->poly; l2++) {
+          if (!synthdata->noteActive[l2]) {
+            foundOsc = true;
+            synthdata->noteActive[l2] = true;
+            synthdata->notePressed[l2] = true;
+            synthdata->velocity[l2] = ev->data.note.velocity;
+            synthdata->channel[l2] = ev->data.note.channel;  
+            synthdata->notes[l2] = ev->data.note.note;
+            for (l1 = 0; l1 < listModule.count(); l1++) {
+              listModule.at(l1)->noteOnEvent(l2);  
+            }
+            break;
+          }
+        } 
+        if ((synthdata->listM_advenv.count() 
+          || synthdata->listM_env.count() 
+          || synthdata->listM_vcenv.count() 
+          || synthdata->listM_dynamicwaves.count())
+          && !foundOsc) {
+          min_e = 1.0;
+          osc = 0;
+          for (l2 = 0; l2 < synthdata->poly; l2++) {
+            for (l1 = 0; l1 < synthdata->listM_dynamicwaves.count(); l1++) {
+              if (((M_dynamicwaves *)synthdata->listM_dynamicwaves.at(l1))->noteActive[l2]) {
+                if (((M_dynamicwaves *)synthdata->listM_dynamicwaves.at(l1))->e[l2][0] < min_e) {
+                   min_e = ((M_dynamicwaves *)synthdata->listM_dynamicwaves.at(l1))->e[l2][0];
+                   osc = l2;
+                }
+              }
+            }
+            for (l1 = 0; l1 < synthdata->listM_env.count(); l1++) {
+              if (((M_env *)synthdata->listM_env.at(l1))->noteActive[l2]) {
+                if (((M_env *)synthdata->listM_env.at(l1))->e[l2] < min_e) {
+                   min_e = ((M_env *)synthdata->listM_env.at(l1))->e[l2];
+                   osc = l2;
+                }
+              }
+            }
+            for (l1 = 0; l1 < synthdata->listM_vcenv.count(); l1++) {
+              if (((M_vcenv *)synthdata->listM_vcenv.at(l1))->noteActive[l2]) {
+                if (((M_vcenv *)synthdata->listM_vcenv.at(l1))->e[l2] < min_e) {
+                   min_e = ((M_vcenv *)synthdata->listM_vcenv.at(l1))->e[l2];
+                   osc = l2;
+                }
+              }
+            }
+            for (l1 = 0; l1 < synthdata->listM_advenv.count(); l1++) {
+              if (((M_advenv *)synthdata->listM_advenv.at(l1))->noteActive[l2]) {
+                if (((M_advenv *)synthdata->listM_advenv.at(l1))->e[l2] < min_e) {
+                   min_e = ((M_advenv *)synthdata->listM_advenv.at(l1))->e[l2];
+                   osc = l2;
+                }
+              }
+            }
+          }
+          synthdata->noteActive[osc] = true; 
+          synthdata->notePressed[osc] = true;
+          synthdata->velocity[osc] = ev->data.note.velocity;
+          synthdata->channel[osc] = ev->data.note.channel;
+          synthdata->notes[osc] = ev->data.note.note;   
+          for (l1 = 0; l1 < listModule.count(); l1++) {
+            listModule.at(l1)->noteOnEvent(osc);
+          }
+        }
+      } else {
+        for (l2 = 0; l2 < synthdata->poly; l2++) {
+          if ((synthdata->notes[l2] == ev->data.note.note)
+            && (synthdata->channel[l2] == ev->data.note.channel)) {
+            synthdata->notePressed[l2] = false;
+            for (l1 = 0; l1 < listModule.count(); l1++) {
+              listModule.at(l1)->noteOffEvent(l2);
+            } 
+          }   
+        }     
+      }       
+    }
+    if ((ev->type == SND_SEQ_EVENT_CONTROLLER) && (ev->data.control.param == MIDI_CTL_ALL_NOTES_OFF)) {
+      for (l2 = 0; l2 < synthdata->poly; l2++) {
+        if (synthdata->notePressed[l2] && (synthdata->channel[l2] == ev->data.note.channel)) {
+          synthdata->notePressed[l2] = false;
+          synthdata->noteActive[l2] = false;
+          for (l1 = 0; l1 < listModule.count(); l1++) {
+            listModule.at(l1)->noteOffEvent(l2);
+          } 
+        }   
+      }     
+    }
+    if (ev->type == SND_SEQ_EVENT_PGMCHANGE) {
+      guiWidget->setCurrentPreset(ev->data.control.value);
+    }
+    for (l1 = 0; l1 < synthdata->listM_advmcv.count(); l1++) {
+      switch (ev->type) {
+        case SND_SEQ_EVENT_CHANPRESS: 
+          ((M_advmcv *)synthdata->listM_advmcv.at(l1))->aftertouchEvent(ev->data.note.channel, ev->data.control.value);
+          break;
+        case SND_SEQ_EVENT_PITCHBEND:
+          ((M_advmcv *)synthdata->listM_advmcv.at(l1))->pitchbendEvent(ev->data.note.channel, ev->data.control.value); 
+          break;
+        case SND_SEQ_EVENT_CONTROLLER: 
+          ((M_advmcv *)synthdata->listM_advmcv.at(l1))->controllerEvent(ev->data.note.channel, ev->data.control.param, ev->data.control.value);
+          break;
+      }
+    }
+    snd_seq_free_event(ev);
+  } while (snd_seq_event_input_pending(synthdata->seq_handle, 0) > 0);
+}
+
+void ModularSynth::initPorts(Module *m) {
+
+  int l1;
+
+  for (l1 = 0; l1 < m->portList.count(); l1++) {
+    QObject::connect(m->portList.at(l1), SIGNAL(portClicked()), 
+                     this, SLOT(portSelected()));
+    QObject::connect(m->portList.at(l1), SIGNAL(portDisconnected()), 
+                     this, SLOT(updatePortConnections()));
+  }
+}
+
+void ModularSynth::initNewModule(Module *m) {
+
+  int cx, cy;
+
+  addChild(m);
+  viewportToContents((visibleWidth()-m->width())>>1, (visibleHeight()-m->height())>>1, cx, cy);
+  moveChild(m, cx, cy);
+  m->show();
+  QObject::connect(m, SIGNAL(dragged(QPoint)), this, SLOT(moveModule(QPoint)));
+  QObject::connect(m, SIGNAL(removeModule()), this, SLOT(deleteModule()));
+  listModule.append(m);
+  if (!loadingPatch) {
+    midiWidget->addModule(m);
+  }
+  initPorts(m);
+}
+
+void ModularSynth::new_textEdit() {
+
+  int cx, cy;
+
+  TextEdit *te = new TextEdit(viewport(), "textEdit", synthdata);
+  addChild(te);
+  viewportToContents((visibleWidth()-te->width())>>1, (visibleHeight()-te->height())>>1, cx, cy);
+  moveChild(te, cx, cy);
+  te->show();
+  QObject::connect(te, SIGNAL(dragged(QPoint)), this, SLOT(moveTextEdit(QPoint)));
+  QObject::connect(te, SIGNAL(sizeDragged(QPoint)), this, SLOT(resizeTextEdit(QPoint)));
+  QObject::connect(te, SIGNAL(removeTextEdit()), this, SLOT(deleteTextEdit()));
+  listTextEdit.append(te);
+}
+
+void ModularSynth::new_textEdit(int x, int y, int w, int h) {
+
+  TextEdit *te = new TextEdit(viewport(), "textEdit", synthdata);
+  addChild(te);
+  te->setFixedSize(w, h);
+  moveChild(te, x, y);
+  te->show();
+  QObject::connect(te, SIGNAL(dragged(QPoint)), this, SLOT(moveTextEdit(QPoint)));
+  QObject::connect(te, SIGNAL(sizeDragged(QPoint)), this, SLOT(resizeTextEdit(QPoint)));
+  QObject::connect(te, SIGNAL(removeTextEdit()), this, SLOT(deleteTextEdit()));
+  listTextEdit.append(te);
+}
+
+void ModularSynth::startSynth() {
+  
+  if (!synthdata->withJack) {
+    synthdata->doSynthesis = true;
+    if (!synth->running()) {
+      synth->start();
+    }
+    if (synthdata->moduleInCount) {
+      synthdata->doCapture = true;
+      if (!capture->running()) {
+        capture->start();
+      }
+    }
+  } else {
+    synthdata->doSynthesis = true;
+//    if (!synthdata->jackRunning && (synthdata->jackOutCount + synthdata->jackInCount > 0)) {
+//      synthdata->activateJack();
+//    }
+  }
+}
+
+void ModularSynth::stopSynth() {
+
+  synthdata->doSynthesis = false;
+  synthdata->doCapture = false;
+//  if (synthdata->withJack) {
+//    synthdata->deactivateJack();
+//  }
+}
+
+void ModularSynth::newM_seq(int seqLen) {
+
+  M_seq *m = new M_seq(seqLen, viewport(), "M_seq", synthdata);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_seq_8() {
+
+  newM_seq(8);
+}
+
+void ModularSynth::newM_seq_12() {
+
+  newM_seq(12);
+}
+
+void ModularSynth::newM_seq_16() {
+
+  newM_seq(16);
+}
+
+void ModularSynth::newM_seq_24() {
+
+  newM_seq(24);
+}
+
+void ModularSynth::newM_seq_32() {
+
+  newM_seq(32);
+}
+
+void ModularSynth::newM_vcorgan(int oscCount) {
+ 
+  M_vcorgan *m = new M_vcorgan(oscCount, viewport(), "M_vcorgan", synthdata);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_vcorgan_4() {
+
+  newM_vcorgan(4);
+}
+
+void ModularSynth::newM_vcorgan_6() {
+
+  newM_vcorgan(6);
+}
+
+void ModularSynth::newM_vcorgan_8() {
+
+  newM_vcorgan(8);
+}
+
+void ModularSynth::newM_dynamicwaves(int oscCount) {
+ 
+  M_dynamicwaves *m = new M_dynamicwaves(oscCount, viewport(), "M_dynamicwaves", synthdata);
+  synthdata->listM_dynamicwaves.append(m);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_dynamicwaves_4() {
+
+  newM_dynamicwaves(4);
+}
+
+void ModularSynth::newM_dynamicwaves_6() {
+
+  newM_dynamicwaves(6);
+}
+
+void ModularSynth::newM_dynamicwaves_8() {
+
+  newM_dynamicwaves(8);
+}
+
+void ModularSynth::newM_mcv() {
+
+  M_mcv *m = new M_mcv(viewport(), "M_mcv", synthdata);
+  synthdata->listM_mcv.append(m);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_advmcv() {
+
+  M_advmcv *m = new M_advmcv(viewport(), "M_advmcv", synthdata);
+  synthdata->listM_advmcv.append(m);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_scmcv() {
+
+  M_scmcv *m = new M_scmcv(viewport(), "M_scmcv", synthdata);
+  synthdata->listM_scmcv.append(m);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_scmcv(QString *p_scalaName) {
+
+  M_scmcv *m = new M_scmcv(viewport(), "M_scmcv", synthdata, p_scalaName);
+  synthdata->listM_scmcv.append(m);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_env() {
+
+  M_env *m = new M_env(viewport(), "M_env", synthdata);
+  synthdata->listM_env.append(m);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_vcenv() {
+
+  M_vcenv *m = new M_vcenv(viewport(), "M_vcenv", synthdata);
+  synthdata->listM_vcenv.append(m);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_advenv() {
+
+  M_advenv *m = new M_advenv(viewport(), "M_advenv", synthdata);
+  synthdata->listM_advenv.append(m);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_vco() {
+
+  M_vco *m = new M_vco(viewport(), "M_vco", synthdata);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_vca_lin() {
+
+  M_vca *m = new M_vca(false, viewport(), "M_vca", synthdata);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_vca_exp() {
+
+  M_vca *m = new M_vca(true, viewport(), "M_vca", synthdata);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_lfo() {
+
+  M_lfo *m = new M_lfo(viewport(), "M_lfo", synthdata);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_noise() {
+
+  M_noise *m = new M_noise(viewport(), "M_noise", synthdata);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_ringmod() {
+
+  M_ringmod *m = new M_ringmod(viewport(), "M_ringmod", synthdata);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_inv() {
+
+  M_inv *m = new M_inv(viewport(), "M_inv", synthdata);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_conv() {
+
+  M_conv *m = new M_conv(viewport(), "M_conv", synthdata);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_cvs() {
+
+  M_cvs *m = new M_cvs(viewport(), "M_cvs", synthdata);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_sh() {
+
+  M_sh *m = new M_sh(viewport(), "M_sh", synthdata);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_vcswitch() {
+
+  M_vcswitch *m = new M_vcswitch(viewport(), "M_vcswitch", synthdata);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_slew() {
+
+  M_slew *m = new M_slew(viewport(), "M_slew", synthdata);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_quantizer() {
+
+  M_quantizer *m = new M_quantizer(viewport(), "M_quantizer", synthdata);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_scquantizer(QString *p_scalaName) {
+
+  M_scquantizer *m = new M_scquantizer(viewport(), "M_scquantizer", synthdata, p_scalaName);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_scquantizer() {
+
+  M_scquantizer *m = new M_scquantizer(viewport(), "M_scquantizer", synthdata);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_delay() {
+
+  M_delay *m = new M_delay(viewport(), "M_delay", synthdata);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_mix(int in_channels) {
+
+  M_mix *m = new M_mix(in_channels, viewport(), "M_mix", synthdata);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_stereomix(int in_channels) {
+
+  M_stereomix *m = new M_stereomix(in_channels, viewport(), "M_stereomix", synthdata);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_mix_2() {
+
+  newM_mix(2);
+}
+
+void ModularSynth::newM_mix_4() {
+
+  newM_mix(4);
+}
+
+void ModularSynth::newM_mix_8() {
+
+  newM_mix(8);
+}
+
+void ModularSynth::newM_stereomix_2() {
+
+  newM_stereomix(2);
+}
+
+void ModularSynth::newM_stereomix_4() {
+
+  newM_stereomix(4);
+}
+
+void ModularSynth::newM_stereomix_8() {
+
+  newM_stereomix(8);
+}
+
+void ModularSynth::newM_ladspa(int p_ladspaDesFuncIndex, int n, bool p_newLadspaPoly, bool p_extCtrlPorts) {
+
+  QString qs;
+
+  qs.sprintf("%s", synthdata->ladspa_dsc_func_list[p_ladspaDesFuncIndex](n)->Name);
+  M_ladspa *m = new M_ladspa(viewport(), "M_ladspa", synthdata, p_ladspaDesFuncIndex, n, p_newLadspaPoly, p_extCtrlPorts);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_out() {
+
+  if (!synthdata->moduleOutCount) {
+    synthdata->pcm_handle = open_pcm(false);
+  }
+  M_out *m = new M_out(viewport(), "M_out", synthdata);
+  synthdata->outModuleList.append((QObject *)m);
+  initNewModule((Module *)m);
+  synthdata->moduleOutCount++;
+}
+
+void ModularSynth::newM_wavout() {
+
+  M_wavout *m = new M_wavout(viewport(), "M_wavout", synthdata);
+  synthdata->wavoutModuleList.append((QObject *)m);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_midiout() {
+
+  M_midiout *m = new M_midiout(viewport(), "M_midiout", synthdata);
+  synthdata->midioutModuleList.append((QObject *)m);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_jackout() {
+
+  M_jackout *m = new M_jackout(viewport(), "M_jackout", synthdata);
+  synthdata->jackoutModuleList.append((QObject *)m);
+  initNewModule((Module *)m);
+  synthdata->jackOutCount++;
+//  if (!synthdata->jackRunning) {
+//    synthdata->activateJack();
+//  }
+}
+void ModularSynth::newM_jackin() {
+
+  M_jackin *m = new M_jackin(viewport(), "M_jackin", synthdata);
+  synthdata->jackinModuleList.append((QObject *)m);
+  initNewModule((Module *)m);
+  synthdata->jackInCount++;
+//  if (!synthdata->jackRunning) {
+//    synthdata->activateJack();
+//  }
+}
+
+void ModularSynth::newM_scope() {
+
+  M_scope *m = new M_scope(viewport(), "M_scope", synthdata);
+  synthdata->scopeModuleList.append((QObject *)m);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_spectrum() {
+
+  M_spectrum *m = new M_spectrum(viewport(), "M_spectrum", synthdata);
+  synthdata->spectrumModuleList.append((QObject *)m);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_in() {
+
+  if (!synthdata->moduleInCount) {
+    synthdata->pcm_capture_handle = open_pcm(true);
+    synthdata->doCapture = synthdata->doSynthesis; 
+    if (!capture->running()) {
+      capture->start();
+    }
+  } 
+  synthdata->moduleInCount++;
+  M_in *m = new M_in(viewport(), "M_in", synthdata);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::newM_vcf() {
+ 
+  M_vcf *m = new M_vcf(viewport(), "M_vcf", synthdata);
+  initNewModule((Module *)m);
+}
+
+void ModularSynth::moveModule(QPoint pos) {
+
+  int l1;
+  Module *m;
+  int cx, cy;
+  
+  for (l1 = 0; l1 < listModule.count(); l1++) {
+    if ((m=listModule.at(l1)) == sender()) {
+      viewportToContents(pos.x() - m->getMousePressPos().x() + m->pos().x(),
+                         pos.y() - m->getMousePressPos().y() + m->pos().y(),
+                         cx, cy);
+      moveChild(m, cx, cy);
+    }
+  }
+}
+
+void ModularSynth::moveTextEdit(QPoint pos) {
+
+  int l1;
+  TextEdit *te;
+  int cx, cy;
+  
+  for (l1 = 0; l1 < listTextEdit.count(); l1++) {
+    if ((te=listTextEdit.at(l1)) == sender()) {
+      viewportToContents(pos.x() - te->getMousePressPos().x() + te->pos().x(),
+                         pos.y() - te->getMousePressPos().y() + te->pos().y(),
+                         cx, cy);
+      moveChild(te, cx, cy);
+    }
+  }
+}
+
+void ModularSynth::resizeTextEdit(QPoint pos) {
+
+  int l1;
+  TextEdit *te;
+  int cx, cy;
+  
+  for (l1 = 0; l1 < listTextEdit.count(); l1++) {
+    if ((te=listTextEdit.at(l1)) == sender()) {
+      cx = pos.x();
+      cy = pos.y();
+      if ((cx > 200) && (cy > 170)) { 
+        te->setFixedSize(cx + 3, cy + 3);
+      }
+    }
+  }
+}
+
+void ModularSynth::portSelected() {
+
+  if (firstPort) {
+    firstPort = false;
+    connectingPort[0] = (Port *)sender();
+    connectingPort[0]->highlighted = true;
+    connectingPort[0]->repaint(false);
+  } else {
+    firstPort = true;
+    connectingPort[1] = (Port *)sender();
+    connectingPort[0]->highlighted = false;  
+    connectingPort[0]->repaint(false);
+    connectingPort[1]->highlighted = false;
+    connectingPort[1]->repaint(false);
+    if ((((connectingPort[0]->dir == PORT_IN) && (connectingPort[1]->dir == PORT_OUT))
+      ||((connectingPort[1]->dir == PORT_IN) && (connectingPort[0]->dir == PORT_OUT)))
+      && (connectingPort[0]->parentModule != connectingPort[1]->parentModule)) {
+        connectingPort[0]->connectTo(connectingPort[1]);
+        connectingPort[1]->connectTo(connectingPort[0]);
+      repaintContents(false);
+    } else {
+      printf("Connection refused.\n");
+      connectingPort[0] = NULL;
+      connectingPort[1] = NULL;
+    }
+  } 
+}
+
+void ModularSynth::updatePortConnections() {
+
+  repaintContents(false);
+}
+
+void ModularSynth::deleteModule() {
+
+  Module *m;
+ 
+  connectingPort[0] = NULL;
+  connectingPort[1] = NULL;
+  firstPort = true;
+  m = (Module *)sender();
+  midiWidget->deleteModule(m);
+  if (m->M_type == M_type_env) {
+    synthdata->listM_env.removeRef((QObject *)sender());
+  }
+  if (m->M_type == M_type_vcenv) {
+    synthdata->listM_vcenv.removeRef((QObject *)sender());
+  }
+  if (m->M_type == M_type_advenv) {
+    synthdata->listM_advenv.removeRef((QObject *)sender());
+  }
+  if (m->M_type == M_type_dynamicwaves) {
+    synthdata->listM_dynamicwaves.removeRef((QObject *)sender());
+  }
+  if (m->M_type == M_type_mcv) {
+    synthdata->listM_mcv.removeRef((QObject *)sender());
+  }
+  if (m->M_type == M_type_advmcv) {
+    synthdata->listM_advmcv.removeRef((QObject *)sender());
+  }
+  if (m->M_type == M_type_out) {
+    synthdata->moduleOutCount--;
+    if (!synthdata->moduleOutCount) {
+      sleep(1);
+      snd_pcm_close(synthdata->pcm_handle);
+    }
+    synthdata->outModuleList.removeRef((QObject *)sender());
+  }
+  if (m->M_type == M_type_jackout) {
+    synthdata->jackOutCount--;
+//    if (synthdata->jackOutCount + synthdata->jackInCount == 0) {
+//      synthdata->deactivateJack();
+//    }
+    synthdata->jackoutModuleList.removeRef((QObject *)sender());
+  }
+  if (m->M_type == M_type_jackin) {
+    synthdata->jackInCount--;
+//    if (synthdata->jackOutCount + synthdata->jackInCount == 0) {
+//      synthdata->deactivateJack();
+//    }
+    synthdata->jackinModuleList.removeRef((QObject *)sender());
+  }
+  if (m->M_type == M_type_wavout) {
+    synthdata->wavoutModuleList.removeRef((QObject *)sender());
+  }
+  if (m->M_type == M_type_midiout) {
+    synthdata->midioutModuleList.removeRef((QObject *)sender());
+  }
+  if (m->M_type == M_type_scope) {
+    synthdata->scopeModuleList.removeRef((QObject *)sender());
+  }
+  if (m->M_type == M_type_spectrum) {
+    synthdata->spectrumModuleList.removeRef((QObject *)sender());
+  }
+  if (m->M_type == M_type_in) {
+    synthdata->moduleInCount--;
+    if (!synthdata->moduleInCount) {
+      synthdata->doCapture = false;
+      sleep(1);
+      snd_pcm_close(synthdata->pcm_capture_handle);
+    }
+  }  
+  listModule.removeRef(m);
+  delete(m);
+}
+
+void ModularSynth::deleteTextEdit() {
+
+  listTextEdit.removeRef((TextEdit *)sender());
+  delete((TextEdit *)sender());
+}
+
+void ModularSynth::deleteTextEdit(TextEdit *te) {
+
+  delete(te);
+}
+
+void ModularSynth::deleteModule(Module *m) {
+
+  midiWidget->deleteModule(m);
+  if (m->M_type == M_type_env) {
+    synthdata->listM_env.removeRef((QObject *)m);
+  }
+  if (m->M_type == M_type_vcenv) {
+    synthdata->listM_vcenv.removeRef((QObject *)m);
+  }
+  if (m->M_type == M_type_advenv) {
+    synthdata->listM_advenv.removeRef((QObject *)m);
+  }
+  if (m->M_type == M_type_dynamicwaves) {
+    synthdata->listM_dynamicwaves.removeRef((QObject *)m);
+  }
+  if (m->M_type == M_type_mcv) {
+    synthdata->listM_mcv.removeRef((QObject *)m);
+  }
+  if (m->M_type == M_type_advmcv) {
+    synthdata->listM_advmcv.removeRef((QObject *)m);
+  }
+  if (m->M_type == M_type_out) {
+    synthdata->moduleOutCount--;  
+    if (!synthdata->moduleOutCount) {
+      sleep(1);
+      snd_pcm_close(synthdata->pcm_handle);
+    }
+    synthdata->outModuleList.removeRef((QObject *)m);
+  }
+  if (m->M_type == M_type_jackout) {
+    synthdata->jackOutCount--;
+//    if (synthdata->jackOutCount + synthdata->jackInCount == 0) {
+//      synthdata->deactivateJack();
+//    }
+    synthdata->jackoutModuleList.removeRef((QObject *)m);
+  }
+  if (m->M_type == M_type_jackin) {
+    synthdata->jackInCount--;
+//    if (synthdata->jackOutCount + synthdata->jackInCount == 0) {
+//      synthdata->deactivateJack();
+//    }
+    synthdata->jackinModuleList.removeRef((QObject *)m);
+  }
+  if (m->M_type == M_type_wavout) {
+    synthdata->wavoutModuleList.removeRef((QObject *)m);
+  }
+  if (m->M_type == M_type_midiout) {
+    synthdata->midioutModuleList.removeRef((QObject *)m);
+  }
+  if (m->M_type == M_type_scope) {
+    synthdata->scopeModuleList.removeRef((QObject *)m);
+  }
+  if (m->M_type == M_type_spectrum) {
+    synthdata->spectrumModuleList.removeRef((QObject *)m);
+  }
+  if (m->M_type == M_type_in) {
+    synthdata->moduleInCount--;
+    if (!synthdata->moduleInCount) {
+      synthdata->doCapture = false;
+      sleep(1);
+      snd_pcm_close(synthdata->pcm_capture_handle);
+    }
+  }  
+  delete(m);
+}
+
+void ModularSynth::clearConfig() {
+
+  int l1;
+  bool restartSynth;
+  QString qs;
+
+  qs.sprintf("AlsaModularSynth 1.6.0 - %d:%d", clientid, portid);
+  mainWindow->setCaption(qs);
+  restartSynth = synthdata->doSynthesis;
+  synthdata->doSynthesis = false;
+  synthdata->doCapture = false;
+  if (!synthdata->withJack) {
+    while(synth->running()) {
+      sleep(1);
+    }
+  } else {
+//    synthdata->deactivateJack();
+//    sleep(1);
+  }
+  guiWidget->clearGui();
+//  delete guiWidget;
+  for (l1 = 0; l1 < listModule.count(); l1++) {
+    deleteModule(listModule.at(l1));
+  }
+  listModule.clear();
+  for (l1 = 0; l1 < listTextEdit.count(); l1++) {
+    deleteTextEdit(listTextEdit.at(l1));
+  }
+  listTextEdit.clear();
+  synthdata->moduleID = 0;
+  synthdata->moduleCount = 0;
+//  guiWidget = new GuiWidget(synthdata, NULL);   
+//  guiWidget->setCaption("AlsaModularSynth Parameter View");
+//  synthdata->guiWidget = (QObject *)guiWidget;
+  if (restartSynth) {
+    synthdata->doSynthesis = true;    
+    if (!synthdata->withJack) { 
+      if (!synth->running()) {
+        synth->start();
+      } else {
+        fprintf(stderr, "Audio thread is already running...\n");
+      }
+      if (synthdata->moduleInCount) {
+        synthdata->doCapture = true;
+        if (!capture->running()) {
+          capture->start();
+        } else {
+          fprintf(stderr, "Capture thread is already running...\n");
+        }
+      }
+    }
+  }
+}
+
+void ModularSynth::load() {
+
+  QString config_fn;
+
+  if (presetPath.isEmpty()) {
+    if (!(config_fn = QString(QFileDialog::getOpenFileName(QString::null, "AlsaModularSynth files (*.ams)")))) {
+      return;
+    }
+  } else {
+      if (!(config_fn = QString(QFileDialog::getOpenFileName(presetPath, "AlsaModularSynth files (*.ams)")))) {
+      return;
+    }
+  }
+  load(&config_fn);
+}
+
+void ModularSynth::load(QString *presetName) {
+
+  int l1, l2;
+  int M_type, moduleID, index, value, x, y, w, h, subID1, subID2;
+  int index1, index2, moduleID1, moduleID2, midiSign;
+  int index_read1, index_read2, moduleID_read1, moduleID_read2;
+  int type, ch, param, isLogInt, midiIndex, sliderMin, sliderMax;
+  FILE *f;
+  QString config_fn, qs, qs2, ladspaLibName, pluginName, para, scalaName;
+  char sc[2048];
+  bool restartSynth, isLog, ladspaLoadErr, commentFlag, followConfig;
+  int newLadspaPolyFlag, textEditID;
+  Module *m;
+  int currentProgram;
+
+  restartSynth = synthdata->doSynthesis; 
+  synthdata->doSynthesis = false;
+  followConfig = midiWidget->followConfig;
+  midiWidget->followConfig = false;
+  config_fn = *presetName;
+  currentProgram = -1;
+  if (!(f = fopen(config_fn, "r"))) {
+    QMessageBox::information( this, "AlsaModularSynth", "Could not open file.");  
+  } else {
+    clearConfig();
+    qs2 = config_fn.mid(config_fn.findRev('/') + 1);
+    qs.sprintf("AlsaModularSynth 1.6.0 - %d:%d - %s", clientid, portid, qs2.latin1());
+    mainWindow->setCaption(qs);
+    ladspaLoadErr = false;
+    commentFlag = false;
+    loadingPatch = true;
+    while(fscanf(f, "%s", sc) != EOF) {
+      qs = QString(sc);
+      if (qs.contains("#PARA#", false)) {
+        commentFlag = true;
+      }
+      if (qs.contains("#ARAP#", false)) {
+        commentFlag = false;
+      }
+      if (qs.contains("Module", false) && !commentFlag) {
+        fscanf(f, "%d", &M_type);
+        fscanf(f, "%d", &moduleID);
+        fscanf(f, "%d", &x);
+        fscanf(f, "%d", &y);
+        switch ((M_typeEnum)M_type) {
+          case M_type_ladspa: 
+            fscanf(f, "%d", &newLadspaPolyFlag);
+            fscanf(f, "%s", sc);
+            ladspaLibName = QString(sc);
+            fgets(sc, 2048, f);
+            sc[strlen(sc)-1] = '\0';
+            pluginName = QString(sc+1);
+            fprintf(stderr, "Loading LADSPA plugin \"%s\" from library \"%s\".\n", pluginName.latin1(), ladspaLibName.latin1());
+            if (!synthdata->getLadspaIDs(ladspaLibName, pluginName, &subID1, &subID2)) {
+              sprintf(sc, "Could not find LADSPA plugin \"%s\" from library \"%s\".\n", pluginName.latin1(), ladspaLibName.latin1());
+              QMessageBox::information( this, "AlsaModularSynth", QString(sc));  
+              ladspaLoadErr = true;
+            }
+            break;
+          case M_type_scquantizer: 
+            fscanf(f, "%s", &sc);
+            scalaName = QString(sc);
+            break;
+          case M_type_scmcv: 
+            fscanf(f, "%s", &sc);
+            scalaName = QString(sc);
+            break;
+          default: 
+            fscanf(f, "%d", &subID1);
+            fscanf(f, "%d", &subID2);
+            break;
+        }
+        switch((M_typeEnum)M_type) {
+          case M_type_custom: 
+            break;
+          case M_type_vco: 
+            newM_vco();
+            break;
+          case M_type_vca: 
+            if (subID1) {
+              newM_vca_exp();
+            } else {
+              newM_vca_lin();
+            }
+            break;
+          case M_type_vcf: 
+            newM_vcf();
+            break;
+          case M_type_lfo: 
+            newM_lfo();
+            break;
+          case M_type_noise: 
+            newM_noise();
+            break;
+          case M_type_delay: 
+            newM_delay();
+            break;
+          case M_type_seq: 
+            newM_seq(subID1);
+            break;
+          case M_type_env: 
+            newM_env();
+            break;
+          case M_type_vcenv: 
+            newM_vcenv();
+            break;
+          case M_type_advenv: 
+            newM_advenv();
+            break;
+          case M_type_mcv: 
+            newM_mcv();
+            break;
+          case M_type_advmcv: 
+            newM_advmcv();
+            break;
+          case M_type_scmcv: 
+            newM_scmcv(&scalaName);
+            break;
+          case M_type_ringmod: 
+            newM_ringmod();
+            break;
+          case M_type_inv: 
+            newM_inv();
+            break;
+          case M_type_conv: 
+            newM_conv();
+            break;
+          case M_type_sh: 
+            newM_sh();
+            break;
+          case M_type_vcswitch: 
+            newM_vcswitch();
+            break;
+          case M_type_cvs: 
+            newM_cvs();
+            break;
+          case M_type_slew: 
+            newM_slew();
+            break;
+          case M_type_quantizer: 
+            newM_quantizer();
+            break;
+          case M_type_scquantizer: 
+            newM_scquantizer(&scalaName);
+            break;
+          case M_type_mix: 
+            newM_mix(subID1);
+            break;
+          case M_type_stereomix: 
+            newM_stereomix(subID1);
+            break;
+          case M_type_vcorgan: 
+            newM_vcorgan(subID1);
+            break;
+          case M_type_dynamicwaves: 
+            newM_dynamicwaves(subID1);
+            break;
+          case M_type_ladspa: 
+            if (!ladspaLoadErr) {
+              newM_ladspa(subID1, subID2, newLadspaPolyFlag & 2, newLadspaPolyFlag & 1);
+            } 
+            break;
+          case M_type_out:
+            if (synthdata->withJack) {
+              newM_jackout();
+            } else {
+              newM_out(); 
+            }
+            break;
+          case M_type_jackout:
+            if (synthdata->withJack) {
+              newM_jackout();
+            } else {
+              newM_out();
+            }
+            break;
+          case M_type_jackin:
+            if (synthdata->withJack) {
+              newM_jackin();
+            } else {
+              newM_in();
+            }
+            break;
+          case M_type_wavout:
+            newM_wavout(); 
+            break;
+          case M_type_midiout:
+            newM_midiout(); 
+            break;
+          case M_type_scope:
+            newM_scope(); 
+            break;
+          case M_type_spectrum:
+            newM_spectrum(); 
+            break;
+          case M_type_in:
+            if (synthdata->withJack) {
+              newM_jackin();
+            } else {
+              newM_in(); 
+            }
+            break;
+        }
+        m = listModule.at(listModule.count()-1);
+        moveChild(m, x, y);
+        m->moduleID=moduleID;
+        qs = m->configDialog->caption();
+        qs2 = qs.left(qs.findRev(" "));
+        qs.sprintf(" %d", moduleID);
+        m->configDialog->setCaption(qs2+qs);
+        midiWidget->addModule(m);
+        if (synthdata->moduleID <= moduleID) {
+          synthdata->moduleID = moduleID+1;
+        }
+      }
+      if (qs.contains("Comment", false) && !commentFlag) {
+        fscanf(f, "%d", &textEditID);
+        fscanf(f, "%d", &textEditID); // TODO textEditID is not needed yet
+        fscanf(f, "%d", &x);
+        fscanf(f, "%d", &y);
+        fscanf(f, "%d", &w);
+        fscanf(f, "%d", &h);
+        new_textEdit(x, y, w, h);
+      }
+    }
+    rewind(f);
+    while((fscanf(f, "%s", sc) != EOF) && !ladspaLoadErr) {
+      qs = QString(sc);
+      if (qs.contains("Port", false)) {
+        fscanf(f, "%d", &index1); 
+        fscanf(f, "%d", &index2);
+        fscanf(f, "%d", &moduleID1);
+        fscanf(f, "%d", &moduleID2); 
+        moduleID_read1 = 0;
+        moduleID_read2 = 0;
+        index_read1 = 0;
+        index_read2 = 0;
+        for (l1 = 0; l1 < listModule.count(); l1++) {
+          if (listModule.at(l1)->moduleID == moduleID1) {
+            moduleID_read1 = l1;
+          }
+          if (listModule.at(l1)->moduleID == moduleID2) {
+            moduleID_read2 = l1;
+          }
+        }
+        for (l1 = 0; l1 < listModule.at(moduleID_read1)->portList.count(); l1++) {
+          if ((listModule.at(moduleID_read1)->portList.at(l1)->index == index1) 
+            && (listModule.at(moduleID_read1)->portList.at(l1)->dir == PORT_IN)) {
+            index_read1 = l1;
+          }
+        } 
+        for (l1 = 0; l1 < listModule.at(moduleID_read2)->portList.count(); l1++) {
+          if ((listModule.at(moduleID_read2)->portList.at(l1)->index == index2)
+            && (listModule.at(moduleID_read2)->portList.at(l1)->dir == PORT_OUT)) {
+            index_read2 = l1;
+          } 
+        }   
+        listModule.at(moduleID_read1)->portList.at(index_read1)->connectTo(listModule.at(moduleID_read2)->portList.at(index_read2));
+        listModule.at(moduleID_read2)->portList.at(index_read2)->connectTo(listModule.at(moduleID_read1)->portList.at(index_read1));
+      }
+      if (qs.contains("FSlider", false)) {
+        fscanf(f, "%d", &moduleID);
+        fscanf(f, "%d", &index);
+        fscanf(f, "%d", &value);
+        fscanf(f, "%d", &isLogInt);
+        fscanf(f, "%d", &sliderMin);
+        fscanf(f, "%d", &sliderMax);
+        fscanf(f, "%d", &midiSign);
+        isLog = isLogInt == 1;
+        for (l1 = 0; l1 < listModule.count(); l1++) {
+          if (listModule.at(l1)->moduleID == moduleID) {
+            listModule.at(l1)->configDialog->midiSliderList.at(index)->setLogMode(isLog);
+            listModule.at(l1)->configDialog->midiSliderList.at(index)->updateValue(value);
+            listModule.at(l1)->configDialog->midiSliderList.at(index)->setLogMode(isLog);
+            listModule.at(l1)->configDialog->midiSliderList.at(index)->setNewMin(sliderMin);
+            listModule.at(l1)->configDialog->midiSliderList.at(index)->setNewMax(sliderMax);
+            listModule.at(l1)->configDialog->midiSliderList.at(index)->midiSign = midiSign;
+            break;
+          }
+        }
+      }
+      if (qs.contains("ISlider", false)) {
+        fscanf(f, "%d", &moduleID);
+        fscanf(f, "%d", &index);
+        fscanf(f, "%d", &value);
+        fscanf(f, "%d", &midiSign); 
+        for (l1 = 0; l1 < listModule.count(); l1++) {
+          if (listModule.at(l1)->moduleID == moduleID) {
+            listModule.at(l1)->configDialog->intMidiSliderList.at(index)->slider->setValue((int)value);
+            listModule.at(l1)->configDialog->intMidiSliderList.at(index)->midiSign = midiSign;
+            break;
+          }
+        }
+      }
+      if (qs.contains("LSlider", false)) {
+        fscanf(f, "%d", &moduleID);
+        fscanf(f, "%d", &index);
+        fscanf(f, "%d", &value);
+        fscanf(f, "%d", &midiSign); 
+        for (l1 = 0; l1 < listModule.count(); l1++) {
+          if (listModule.at(l1)->moduleID == moduleID) {
+            listModule.at(l1)->configDialog->floatIntMidiSliderList.at(index)->slider->setValue((int)value);
+            listModule.at(l1)->configDialog->floatIntMidiSliderList.at(index)->midiSign = midiSign;
+            break;
+          }
+        }
+      }
+      if (qs.contains("ComboBox", false)) {
+        fscanf(f, "%d", &moduleID);
+        fscanf(f, "%d", &index);
+        fscanf(f, "%d", &value);
+        fscanf(f, "%d", &midiSign); 
+        for (l1 = 0; l1 < listModule.count(); l1++) {
+          if (listModule.at(l1)->moduleID == moduleID) {
+            listModule.at(l1)->configDialog->midiComboBoxList.at(index)->comboBox->setCurrentItem(value);
+            listModule.at(l1)->configDialog->midiComboBoxList.at(index)->midiSign = midiSign;
+            break;
+          }
+        }
+      }
+      if (qs.contains("CheckBox", false)) {
+        fscanf(f, "%d", &moduleID);
+        fscanf(f, "%d", &index);
+        fscanf(f, "%d", &value);
+        fscanf(f, "%d", &midiSign); 
+        for (l1 = 0; l1 < listModule.count(); l1++) {
+          if (listModule.at(l1)->moduleID == moduleID) {
+            listModule.at(l1)->configDialog->midiCheckBoxList.at(index)->checkBox->setChecked(value==1);
+            listModule.at(l1)->configDialog->midiCheckBoxList.at(index)->midiSign = midiSign;
+            break;
+          }
+        }
+      }
+      if (qs.contains("MIDI", false)) {
+        fscanf(f, "%d", &moduleID);
+        fscanf(f, "%d", &index);   
+        fscanf(f, "%d", &type);   
+        fscanf(f, "%d", &ch);
+        fscanf(f, "%d", &param);
+        MidiController *midiController = new MidiController(type, ch, param);
+        if (!midiWidget->midiControllerList.contains(midiController)) {
+          midiWidget->addMidiController(midiController);
+        } else {
+          midiIndex = midiWidget->midiControllerList.find(midiController);
+          delete(midiController);
+          midiController = midiWidget->midiControllerList.at(midiIndex);
+        }
+        if (qs.contains("FSMIDI", false)) {
+          listModule.at(l1)->configDialog->midiSliderList.at(index)->connectToController(midiController);
+        }
+        if (qs.contains("ISMIDI", false)) {
+          listModule.at(l1)->configDialog->intMidiSliderList.at(index)->connectToController(midiController);
+        }
+        if (qs.contains("LSMIDI", false)) {
+          listModule.at(l1)->configDialog->floatIntMidiSliderList.at(index)->connectToController(midiController);
+        }
+        if (qs.contains("CMIDI", false)) {
+          listModule.at(l1)->configDialog->midiComboBoxList.at(index)->connectToController(midiController);
+        }
+        if (qs.contains("TMIDI", false)) {
+          listModule.at(l1)->configDialog->midiCheckBoxList.at(index)->connectToController(midiController);
+        }
+      }
+      if (qs.contains("#PARA#", false)) {
+        fscanf(f, "%d", &textEditID);
+        fscanf(f, "%d", &textEditID);
+        fscanf(f, "%d", &index);
+        fscanf(f, "%s", sc);
+        qs = QString(sc);
+        if (!qs.contains("#ARAP#", false)) {
+          para = QString(sc) + " ";
+        } else {
+          para = "\n";
+        }
+        while (!qs.contains("#ARAP#", false)) {
+          fscanf(f, "%s", sc);
+          qs = QString(sc);
+          if (!qs.contains("#ARAP#", false)) {
+            para.append(qs+" "); 
+          }
+        }
+        listTextEdit.at(textEditID)->textEdit->insertParagraph(para, index);
+      }
+      if (qs.contains("Frame", false)) {
+        qs.truncate(0);
+        do {
+          fscanf(f, "%s", sc);
+          qs += QString(sc);
+          if (qs.right(1) != "\"") {
+            qs += " ";
+          }
+        } while (qs.right(1) != "\"");
+        qs = qs.mid(1, qs.length()-2);
+        guiWidget->addFrame(qs);
+      }
+      if (qs.contains("Parameter", false)) {
+        qs.truncate(0);
+        do {
+          fscanf(f, "%s", sc);
+          qs += QString(sc);
+          if (qs.right(1) != "\"") {
+            qs += " ";
+          }
+        } while (qs.right(1) != "\"");
+        qs = qs.mid(1, qs.length()-2);
+        fscanf(f, "%d", &moduleID);
+        fscanf(f, "%d", &index);
+        for (l1 = 0; l1 < listModule.count(); l1++) {
+          if (listModule.at(l1)->moduleID == moduleID) {
+            guiWidget->addParameter(listModule.at(l1)->configDialog->midiGUIcomponentList.at(index), qs);
+            if (listModule.at(l1)->configDialog->midiGUIcomponentList.at(index)->componentType == GUIcomponentType_slider) {
+              fscanf(f, "%d", &sliderMin);
+              fscanf(f, "%d", &sliderMax);
+              fscanf(f, "%d", &isLogInt);
+              ((MidiSlider *)guiWidget->parameterList.last())->setNewMin(sliderMin);
+              ((MidiSlider *)guiWidget->parameterList.last())->setNewMax(sliderMax);
+              ((MidiSlider *)guiWidget->parameterList.last())->setLogMode(isLogInt == 1);
+            }
+            break;
+          }
+        }
+      }  
+      if (qs.contains("Program", false)) {
+        fscanf(f, "%d", &index);
+        fscanf(f, "%d", &value);
+        if (index != currentProgram) {
+          currentProgram = index;
+          guiWidget->setPresetCount(currentProgram + 1);
+        }
+        guiWidget->presetList[currentProgram].append(value);
+      }
+    }
+    if (guiWidget->presetCount) {
+      guiWidget->setCurrentPreset(0);
+    }
+    fclose(f);
+    loadingPatch = false;
+  }
+  synthdata->doSynthesis = true;
+  if (!synthdata->withJack) {
+    if (restartSynth && !synth->running()) {
+      synth->start();
+    } else {
+      fprintf(stderr, "Audio thread is already running...\n");
+    } 
+    if (synthdata->moduleInCount) {
+      synthdata->doCapture = true;
+      if (!capture->running()) {
+        capture->start();
+      } else {
+        fprintf(stderr, "Capture thread is already running...\n");
+      }
+    }
+  }
+  midiWidget->followConfig = followConfig;
+}
+
+void ModularSynth::save() {
+
+  Port *port[2];
+  int l1, l2, l3, value;
+  FILE *f;
+  QString config_fn, qs;
+  QValueList<int>::iterator it;
+   
+  if (!(config_fn = QString(QFileDialog::getSaveFileName(savePath, "AlsaModularSynth files (*.ams)")))) {
+    return;
+  }
+  if (!(f = fopen(config_fn, "w"))) {
+    QMessageBox::information( this, "AlsaModularSynth", "Could not save file.");
+  } else {
+    for (l1 = 0; l1 < listModule.count(); l1++) {
+      fprintf(f, "Module %d %d %d %d ", (int)listModule.at(l1)->M_type, listModule.at(l1)->moduleID, 
+              listModule.at(l1)->x(),  listModule.at(l1)->y());
+      switch(listModule.at(l1)->M_type) {
+        case M_type_custom: 
+          break;
+        case M_type_vca: 
+          fprintf(f, "%d 0\n", (int)((M_vca *)listModule.at(l1))->expMode); 
+          break;
+        case M_type_mix: 
+          fprintf(f, "%d 0\n", ((M_mix *)listModule.at(l1))->in_channels);
+          break;
+        case M_type_stereomix: 
+          fprintf(f, "%d 0\n", ((M_stereomix *)listModule.at(l1))->in_channels);
+          break;
+        case M_type_vcorgan: 
+          fprintf(f, "%d 0\n", ((M_vcorgan *)listModule.at(l1))->oscCount);
+          break;
+        case M_type_dynamicwaves: 
+          fprintf(f, "%d 0\n", ((M_dynamicwaves *)listModule.at(l1))->oscCount);
+          break;
+        case M_type_seq: 
+          fprintf(f, "%d 0\n", ((M_seq *)listModule.at(l1))->seqLen);
+          break;
+        case M_type_ladspa: 
+          fprintf(f, "%d %s %s\n", 2 * (int)((M_ladspa *)listModule.at(l1))->isPoly
+                  + (int)((M_ladspa *)listModule.at(l1))->hasExtCtrlPorts, 
+                  synthdata->ladspa_lib_name[((M_ladspa *)listModule.at(l1))->ladspaDesFuncIndex].latin1(), 
+                  ((M_ladspa *)listModule.at(l1))->pluginName.latin1());
+          break;
+        case M_type_scquantizer: 
+          qs = ((M_scquantizer *)listModule.at(l1))->sclname.latin1();
+          if (qs.contains("/")) {
+            qs = qs.mid(qs.findRev("/") + 1);             
+          }
+          fprintf(f, "%s\n", qs.latin1());
+          break;
+        case M_type_scmcv: 
+          qs = ((M_scmcv *)listModule.at(l1))->sclname.latin1();
+          if (qs.contains("/")) {
+            qs = qs.mid(qs.findRev("/") + 1);             
+          }
+          fprintf(f, "%s\n", qs.latin1());
+          break;
+        default:
+          fprintf(f, "0 0\n");  
+          break; 
+      }
+      for (l2 = 0; l2 < listModule.at(l1)->portList.count(); l2++) {
+        port[0] = listModule.at(l1)->portList.at(l2);
+        if ((port[0]->dir == PORT_IN) && port[0]->connectedPortList.count()) {
+          port[1] = port[0]->connectedPortList.at(0);
+          fprintf(f, "Port %d %d %d %d\n", port[0]->index, port[1]->index, 
+                  ((Module *)port[0]->parentModule)->moduleID, ((Module *)port[1]->parentModule)->moduleID);
+        }   
+      }
+      for (l2 = 0; l2 < listModule.at(l1)->configDialog->midiSliderList.count(); l2++) {
+        fprintf(f, "FSlider %d %d %d %d %d %d %d\n", listModule.at(l1)->moduleID, l2, 
+                listModule.at(l1)->configDialog->midiSliderList.at(l2)->slider->value(),
+                listModule.at(l1)->configDialog->midiSliderList.at(l2)->isLog,
+                listModule.at(l1)->configDialog->midiSliderList.at(l2)->slider->minValue(),
+                listModule.at(l1)->configDialog->midiSliderList.at(l2)->slider->maxValue(),
+                listModule.at(l1)->configDialog->midiSliderList.at(l2)->midiSign);
+        for (l3 = 0; l3 < listModule.at(l1)->configDialog->midiSliderList.at(l2)->midiControllerList.count(); l3++) {
+          fprintf(f, "FSMIDI %d %d %d %d %d\n", listModule.at(l1)->moduleID, l2,
+                  listModule.at(l1)->configDialog->midiSliderList.at(l2)->midiControllerList.at(l3)->type, 
+                  listModule.at(l1)->configDialog->midiSliderList.at(l2)->midiControllerList.at(l3)->ch,
+                  listModule.at(l1)->configDialog->midiSliderList.at(l2)->midiControllerList.at(l3)->param);
+        }
+      }
+      for (l2 = 0; l2 < listModule.at(l1)->configDialog->intMidiSliderList.count(); l2++) {
+        fprintf(f, "ISlider %d %d %d %d\n", listModule.at(l1)->moduleID, l2, 
+                    listModule.at(l1)->configDialog->intMidiSliderList.at(l2)->slider->value(),
+                    listModule.at(l1)->configDialog->intMidiSliderList.at(l2)->midiSign);
+        for (l3 = 0; l3 < listModule.at(l1)->configDialog->intMidiSliderList.at(l2)->midiControllerList.count(); l3++) {
+          fprintf(f, "ISMIDI %d %d %d %d %d\n", listModule.at(l1)->moduleID, l2,
+                  listModule.at(l1)->configDialog->intMidiSliderList.at(l2)->midiControllerList.at(l3)->type, 
+                  listModule.at(l1)->configDialog->intMidiSliderList.at(l2)->midiControllerList.at(l3)->ch,
+                  listModule.at(l1)->configDialog->intMidiSliderList.at(l2)->midiControllerList.at(l3)->param);
+        }
+      }
+      for (l2 = 0; l2 < listModule.at(l1)->configDialog->floatIntMidiSliderList.count(); l2++) {
+        fprintf(f, "LSlider %d %d %d %d\n", listModule.at(l1)->moduleID, l2, 
+                    listModule.at(l1)->configDialog->floatIntMidiSliderList.at(l2)->slider->value(),
+                    listModule.at(l1)->configDialog->floatIntMidiSliderList.at(l2)->midiSign);
+        for (l3 = 0; l3 < listModule.at(l1)->configDialog->floatIntMidiSliderList.at(l2)->midiControllerList.count(); l3++) {
+          fprintf(f, "LSMIDI %d %d %d %d %d\n", listModule.at(l1)->moduleID, l2,
+                  listModule.at(l1)->configDialog->floatIntMidiSliderList.at(l2)->midiControllerList.at(l3)->type, 
+                  listModule.at(l1)->configDialog->floatIntMidiSliderList.at(l2)->midiControllerList.at(l3)->ch,
+                  listModule.at(l1)->configDialog->floatIntMidiSliderList.at(l2)->midiControllerList.at(l3)->param);
+        }
+      }
+      for (l2 = 0; l2 < listModule.at(l1)->configDialog->midiComboBoxList.count(); l2++) {
+        fprintf(f, "ComboBox %d %d %d %d\n", listModule.at(l1)->moduleID, l2, 
+                listModule.at(l1)->configDialog->midiComboBoxList.at(l2)->comboBox->currentItem(),
+                listModule.at(l1)->configDialog->midiComboBoxList.at(l2)->midiSign);
+        for (l3 = 0; l3 < listModule.at(l1)->configDialog->midiComboBoxList.at(l2)->midiControllerList.count(); l3++) {
+          fprintf(f, "CMIDI %d %d %d %d %d\n", listModule.at(l1)->moduleID, l2,
+                  listModule.at(l1)->configDialog->midiComboBoxList.at(l2)->midiControllerList.at(l3)->type,
+                  listModule.at(l1)->configDialog->midiComboBoxList.at(l2)->midiControllerList.at(l3)->ch,  
+                  listModule.at(l1)->configDialog->midiComboBoxList.at(l2)->midiControllerList.at(l3)->param);
+        }
+      }
+      for (l2 = 0; l2 < listModule.at(l1)->configDialog->midiCheckBoxList.count(); l2++) {
+        fprintf(f, "CheckBox %d %d %d %d\n", listModule.at(l1)->moduleID, l2, 
+                (int)(listModule.at(l1)->configDialog->midiCheckBoxList.at(l2)->checkBox->isChecked()),
+                listModule.at(l1)->configDialog->midiCheckBoxList.at(l2)->midiSign);
+        for (l3 = 0; l3 < listModule.at(l1)->configDialog->midiCheckBoxList.at(l2)->midiControllerList.count(); l3++) {
+          fprintf(f, "TMIDI %d %d %d %d %d\n", listModule.at(l1)->moduleID, l2,
+                  listModule.at(l1)->configDialog->midiCheckBoxList.at(l2)->midiControllerList.at(l3)->type,
+                  listModule.at(l1)->configDialog->midiCheckBoxList.at(l2)->midiControllerList.at(l3)->ch,  
+                  listModule.at(l1)->configDialog->midiCheckBoxList.at(l2)->midiControllerList.at(l3)->param);
+        }
+      }
+    }
+    for (l1 = 0; l1 < listTextEdit.count(); l1++) {
+      fprintf(f, "Comment %d %d %d %d %d %d\n", listTextEdit.at(l1)->textEditID, l1, 
+                  listTextEdit.at(l1)->x(), listTextEdit.at(l1)->y(), 
+                  listTextEdit.at(l1)->width(), listTextEdit.at(l1)->height());
+    }
+    for (l1 = 0; l1 < listTextEdit.count(); l1++) {
+      for (l2 = 0; l2 < listTextEdit.at(l1)->textEdit->paragraphs(); l2++) {
+        fprintf(f, "#PARA# %d %d %d\n", listTextEdit.at(l1)->textEditID, l1, l2);
+        fprintf(f, "%s\n", listTextEdit.at(l1)->textEdit->text(l2).latin1());
+        fprintf(f, "#ARAP#\n");
+      }
+    }
+
+    for (l1 = 0; l1 < guiWidget->frameBoxList.count(); l1++) {
+      fprintf(f, "Frame \"%s\"\n", guiWidget->frameBoxList.at(l1)->name());
+      for (l2 = 0; l2 < guiWidget->parameterList.count(); l2++) {
+        if (guiWidget->parameterList.at(l2)->parent() == guiWidget->frameBoxList.at(l1)) {
+          fprintf(f, "Parameter \"%s\" %d %d ", guiWidget->parameterList.at(l2)->name(), 
+                                         ((Module *)guiWidget->parameterList.at(l2)->parentModule)->moduleID, 
+                                         guiWidget->parameterList.at(l2)->midiGUIcomponentListIndex);
+          if (guiWidget->parameterList.at(l2)->componentType == GUIcomponentType_slider) {
+            fprintf(f, "%d %d %d\n", ((MidiSlider *)guiWidget->parameterList.at(l2))->slider->minValue(), 
+                                   ((MidiSlider *)guiWidget->parameterList.at(l2))->slider->maxValue(), 
+                                   ((MidiSlider *)guiWidget->parameterList.at(l2))->isLog);
+          } else {
+            fprintf(f, "\n");
+          }
+        }
+      }
+    }
+
+    for (l1 = 0; l1 < guiWidget->presetCount; l1++) {
+      for (it = guiWidget->presetList[l1].begin(); it != guiWidget->presetList[l1].end(); it++) {
+        value = *it;
+        fprintf(f, "Program %d %d\n", l1, value);
+      } 
+    }
+
+    fclose(f);
+  }
+}
+
+void ModularSynth::allVoicesOff() {
+
+  int l1, l2;
+
+  for (l2 = 0; l2 < synthdata->poly; l2++) {
+    if (synthdata->notePressed[l2]) {
+      synthdata->notePressed[l2] = false; 
+      synthdata->noteActive[l2] = false;
+      for (l1 = 0; l1 < listModule.count(); l1++) {      
+        listModule.at(l1)->noteOffEvent(l2);
+      } 
+    }
+  } 
+}
+
+void ModularSynth::cleanUpSynth() {
+
+  fprintf(stderr, "Closing Synth...\n");
+  if (synthdata->withJack && synthdata->jackRunning) {
+    synthdata->deactivateJack();
+  }
+  fprintf(stderr, "Ready.\n"); 
+}

Added: ams/trunk/debian/.#changelog.1.3
===================================================================
--- ams/trunk/debian/.#changelog.1.3	2004-10-30 11:15:34 UTC (rev 5)
+++ ams/trunk/debian/.#changelog.1.3	2004-10-30 11:18:02 UTC (rev 6)
@@ -0,0 +1,42 @@
+ams (1.6.0-0test3) unstable; urgency=low
+
+  * added watch file
+  * ams will open /usr/share/ams as the default patch directory
+  * removed ams.examples; all the patches are now in /usr/share/ams
+  * debian/control: added dpatch and libqt3-compat-headers build dependency
+
+ -- Free Ekanayaka <free@agnula.org>  Thu,  4 Dec 2003 11:23:31 +0600
+
+ams (1.6.0-0test2) unstable; urgency=low
+
+  * debian/ams.1: added manpage (submitted by <d.phillips@agnula.org>)
+  * depends on libjack-dev instead than libjack0.71.2-dev
+  * debian/ams: small script to export the correct value for LADSPA_PATH 
+
+ -- Andrea Glorioso <andrea.glorioso@agnula.org>  Fri, 21 Nov 2003 12:08:10 +0100
+
+ams (1.6.0-0test1) unstable; urgency=low
+
+  * New upstream version.
+  * Using dpatch from now on.
+
+ -- Andrea Glorioso <andrea.glorioso@agnula.org>  Thu, 20 Nov 2003 12:16:00 +0100
+
+ams (1.5.9-1.agnula-1) unstable; urgency=low
+
+  * Repackaged for AGNULA.
+
+ -- Free Ekanayaka <free@centrotemporeale.it>  Tue, 22 Jul 2003 11:13:36 +0200
+
+ams (1.5.9-1) unstable; urgency=low
+
+  * New upstream.
+
+ -- Free Ekanayaka <free@centrotemporeale.it>  Fri,  4 Jul 2003 10:01:37 +0200
+
+ams (1.4.12-1) unstable; urgency=low
+
+  * Initial Release.
+
+ -- Free Ekanayaka <free@centrotemporeale.it>  Wed, 25 Sep 2002 12:14:00 +0000
+

Added: ams/trunk/debian/ams.1
===================================================================
--- ams/trunk/debian/ams.1	2004-10-30 11:15:34 UTC (rev 5)
+++ ams/trunk/debian/ams.1	2004-10-30 11:18:02 UTC (rev 6)
@@ -0,0 +1,119 @@
+.\" Copyright (c) 2003 Dave Phillips
+.\"
+.\" This is free documentation; you can redistribute it and/or
+.\" modify it under the terms of the GNU General Public License as
+.\" published by the Free Software Foundation; either version 2 of
+.\" the License, or (at your option) any later version.
+.\"
+.\" The GNU General Public License's references to "object code"
+.\" and "executables" are to be interpreted as the output of any
+.\" document formatting or typesetting system, including
+.\" intermediate and printed output.
+.\"
+.\" This manual is distributed in the hope that it will be useful,
+.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
+.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+.\" GNU General Public License for more details.
+.\"
+.\" You should have received a copy of the GNU General Public
+.\" License along with this manual; if not, write to the Free
+.\" Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
+.\" USA.
+.\"
+.TH AlsaModularSynth 1 "November 2003"
+.SH NAME
+AlsaModularSynth (AMS) - A software synthesizer modeled after modular patching synthesizers
+.SH SYNOPSIS
+.BI "ams [" OPTIONS "]"
+.SH DESCRIPTION
+The
+.B AlsaModularSynth
+(AMS) is a software synthesizer designed after the great analog modular synths of the 1960s. It employs
+virtual control voltages (VC) for each module's parameter control, using the the 
+.B Moog
+synthesizer's 1V/oct logarithmic control scale for its oscillator and filter functions.
+
+Following the modular synth model
+.B AMS
+supplies the user with a variety of sound-producing and sound-processing software modules
+such as digital oscillators, filters, amplifiers, and DSP effects. These modules are linked together
+(patched) to create complex audio synthesis networks. These network patches can be played in
+realtime via MIDI or internal control structures, and they may be saved and reloaded at will.
+
+.SH OPTIONS
+Runtime options for
+.B AMS
+are shown here with their default values in brackets.
+
+.TP 10
+.B --jack
+Enable JACK I/O
+
+.TP 10
+.BI "--in " <num>
+Number of JACK input ports
+
+.TP 10
+.BI "--out " <num>
+Number of JACK output ports
+
+.TP 10
+.BI "--poly " <num>
+Polyphony [1]
+
+.TP 10
+.BI "--periodsize " <frames>
+Period size [1024]
+
+.TP 10
+.BI "--frag " <num>
+Number of fragments [2]
+
+.TP 10
+.BI "--rate " <samples/s>
+Sample rate [44100]
+
+.TP 10
+.BI "--edge " <0...10>
+VCO edge [1.0]
+
+.TP 10
+.BI "--soundcard " <plug>
+Soundcard [plughw:0,0]
+
+.TP 10
+.BI "--preset " <file>
+Preset file
+
+.TP 10
+.BI "--presetpath " <path>
+Preset path
+
+.TP 10
+.B --nogui                      
+Start without GUI
+
+.SH FILES
+Numerous example patches can be found in
+.I /usr/share/ams
+or
+.I /usr/local/share/ams.
+
+Tutorial documentation is available at
+.I http://alsamodular.sourceforge.net/alsamodularsynth_doc.html.
+
+.SH BUGS
+Please send bug reports or any other feedback to Matthias Nagorni <mana@suse.de>
+
+.SH AUTHOR
+.B AMS
+is written and maintained by Dr. Matthias Nagorni.
+
+.SH COPYRIGHT
+Copyright and license information for
+.B AMS:
+
+.B AlsaModularSynth
+by Matthias Nagorni (c) 2002-2003 SuSE AG Nuremberg.
+Licensed under the
+.B GNU Public License.

Added: ams/trunk/debian/changelog
===================================================================
--- ams/trunk/debian/changelog	2004-10-30 11:15:34 UTC (rev 5)
+++ ams/trunk/debian/changelog	2004-10-30 11:18:02 UTC (rev 6)
@@ -0,0 +1,83 @@
+ams (1.8.7-1) unstable; urgency=low
+
+  * New upstream release
+  * First Debian upload (closes: #203902), sponsored by 
+    Cosimo Alfarano <kalfa@debian.org>
+  * Updated Standards-Version to 3.6.1.1
+  
+ -- Free Ekanayaka <free@agnula.org>  Tue, 31 Aug 2004 14:21:00 +0200
+
+ams (1.8.6-1) unstable; urgency=low
+
+  * New upstream release
+
+ -- Free Ekanayaka <free@free>  Tue, 20 Jul 2004 14:35:18 +0200
+
+ams (1.7.7-1) unstable; urgency=low
+
+  * New upstream release
+
+ -- Free Ekanayaka <free@agnula.org>  Wed, 14 Apr 2004 14:27:17 +0200
+
+ams (1.7.6-1) unstable; urgency=low
+
+  * New upstream release
+
+ -- Free Ekanayaka <free@agnula.org>  Fri, 12 Mar 2004 14:39:28 +0100
+
+ams (1.7.1-0test2) unstable; urgency=low
+
+  * the /usr/bin/ams wrapper script wasn't considering command line
+    paramenters when launching /usr/share/ams.real. fixed adding a
+    simple $\@
+
+ -- Free Ekanayaka <free@agnula.org>  Fri, 16 Jan 2004 13:10:26 +0100
+
+ams (1.7.1-0test1) unstable; urgency=low
+
+  * New upstream release
+
+ -- Free Ekanayaka <free@agnula.org>  Sat, 20 Dec 2003 11:37:11 +0600
+
+ams (1.6.0-0test3) unstable; urgency=low
+
+  * added watch file
+  * ams will open /usr/share/ams as the default patch directory
+  * removed ams.examples; all the patches are now in /usr/share/ams
+  * debian/control: added dpatch and libqt3-compat-headers build dependency
+
+ -- Free Ekanayaka <free@agnula.org>  Thu,  4 Dec 2003 11:23:31 +0600
+
+ams (1.6.0-0test2) unstable; urgency=low
+
+  * debian/ams.1: added manpage (submitted by <d.phillips@agnula.org>)
+  * depends on libjack-dev instead than libjack0.71.2-dev
+  * debian/ams: small script to export the correct value for LADSPA_PATH 
+
+ -- Andrea Glorioso <andrea.glorioso@agnula.org>  Fri, 21 Nov 2003 12:08:10 +0100
+
+ams (1.6.0-0test1) unstable; urgency=low
+
+  * New upstream version.
+  * Using dpatch from now on.
+
+ -- Andrea Glorioso <andrea.glorioso@agnula.org>  Thu, 20 Nov 2003 12:16:00 +0100
+
+ams (1.5.9-1.agnula-1) unstable; urgency=low
+
+  * Repackaged for AGNULA.
+
+ -- Free Ekanayaka <free@centrotemporeale.it>  Tue, 22 Jul 2003 11:13:36 +0200
+
+ams (1.5.9-1) unstable; urgency=low
+
+  * New upstream.
+
+ -- Free Ekanayaka <free@centrotemporeale.it>  Fri,  4 Jul 2003 10:01:37 +0200
+
+ams (1.4.12-1) unstable; urgency=low
+
+  * Initial Release.
+
+ -- Free Ekanayaka <free@centrotemporeale.it>  Wed, 25 Sep 2002 12:14:00 +0000
+

Added: ams/trunk/debian/control
===================================================================
--- ams/trunk/debian/control	2004-10-30 11:15:34 UTC (rev 5)
+++ ams/trunk/debian/control	2004-10-30 11:18:02 UTC (rev 6)
@@ -0,0 +1,14 @@
+Source: ams
+Section: sound
+Priority: optional
+Maintainer: Free Ekanayaka <free@agnula.org>
+Build-Depends: debhelper (>> 3.0.0), libqt3-mt-dev, ladspa-sdk, libc6-dev, libasound2-dev, libjack-dev, fftw-dev, sfftw-dev, dpatch, libqt3-compat-headers, libclalsadrv-dev
+Standards-Version: 3.6.1.1
+
+Package: ams
+Architecture: any
+Depends: ${shlibs:Depends}, debconf
+Suggests: swh-plugins, cmt
+Description: Realtime modular synthesizer for ALSA
+ This is a soft synth with a Qt GUI. All parameters can be modified in 
+ realtime via MIDI.

Added: ams/trunk/debian/copyright
===================================================================
--- ams/trunk/debian/copyright	2004-10-30 11:15:34 UTC (rev 5)
+++ ams/trunk/debian/copyright	2004-10-30 11:18:02 UTC (rev 6)
@@ -0,0 +1,14 @@
+This package was debianized by Free Ekanayaka <free@centrotemporeale.it> on
+Wed, 25 Sep 2002 12:14:00 +0000.
+
+It was downloaded from http://alsamodular.sourceforge.net
+
+Upstream Author: Matthias Nagorni <mana@suse.de>
+
+Copyright:
+
+This software is copyright by Matthias Nagorni <mana@suse.de>
+You are free to distribute this software under the terms of
+the GNU General Public License.
+On Debian systems, the complete text of the GNU General Public
+License can be found in /usr/share/common-licenses/GPL file.

Added: ams/trunk/debian/dirs
===================================================================
--- ams/trunk/debian/dirs	2004-10-30 11:15:34 UTC (rev 5)
+++ ams/trunk/debian/dirs	2004-10-30 11:18:02 UTC (rev 6)
@@ -0,0 +1,2 @@
+usr/bin
+usr/lib/ams

Added: ams/trunk/debian/docs
===================================================================
--- ams/trunk/debian/docs	2004-10-30 11:15:34 UTC (rev 5)
+++ ams/trunk/debian/docs	2004-10-30 11:18:02 UTC (rev 6)
@@ -0,0 +1,5 @@
+README
+THANKS
+demos/
+instruments/
+tutorial/

Added: ams/trunk/debian/manpages
===================================================================
--- ams/trunk/debian/manpages	2004-10-30 11:15:34 UTC (rev 5)
+++ ams/trunk/debian/manpages	2004-10-30 11:18:02 UTC (rev 6)
@@ -0,0 +1 @@
+debian/ams.1

Added: ams/trunk/debian/menu
===================================================================
--- ams/trunk/debian/menu	2004-10-30 11:15:34 UTC (rev 5)
+++ ams/trunk/debian/menu	2004-10-30 11:18:02 UTC (rev 6)
@@ -0,0 +1,2 @@
+?package(ams):needs="X11" section="Apps/Sound"\
+  title="ALSA modular synth" command="/usr/bin/ams" hints="Softsynth"

Added: ams/trunk/debian/patches/00list
===================================================================
--- ams/trunk/debian/patches/00list	2004-10-30 11:15:34 UTC (rev 5)
+++ ams/trunk/debian/patches/00list	2004-10-30 11:18:02 UTC (rev 6)
@@ -0,0 +1,2 @@
+10makefile
+11ams_launch_script

Added: ams/trunk/debian/patches/10makefile.dpatch
===================================================================
--- ams/trunk/debian/patches/10makefile.dpatch	2004-10-30 11:15:34 UTC (rev 5)
+++ ams/trunk/debian/patches/10makefile.dpatch	2004-10-30 11:18:02 UTC (rev 6)
@@ -0,0 +1,65 @@
+#! /bin/sh -e
+## 10makefile.dpatch by Free Ekanayaka <free@agnula.org>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: No description.
+
+if [ $# -lt 1 ]; then
+    echo "`basename $0`: script expects -patch|-unpatch as argument" >&2
+    exit 1
+fi
+
+[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
+patch_opts="${patch_opts:--f --no-backup-if-mismatch} ${2:+-d $2}"
+
+case "$1" in
+    -patch) patch -p1 ${patch_opts} < $0;;
+    -unpatch) patch -R -p1 ${patch_opts} < $0;;
+    *)
+        echo "`basename $0`: script expects -patch|-unpatch as argument" >&2
+        exit 1;;
+esac
+
+exit 0
+
+@DPATCH@
+diff -urNad /home/free/demudi/packages/ams/ams-1.8.7/Makefile ams-1.8.7/Makefile
+--- /home/free/demudi/packages/ams/ams-1.8.7/Makefile	2004-08-31 14:31:35.000000000 +0200
++++ ams-1.8.7/Makefile	2004-08-31 14:42:38.000000000 +0200
+@@ -1,10 +1,14 @@
+-QT_BASE_DIR=/usr/lib/qt3
+-QT_LIB_DIR=$(QT_BASE_DIR)/lib
++QT_BASE_DIR=/usr
++QT_LIB_DIR=$(QT_BASE_DIR)/lib/qt3
+ QT_BIN_DIR=$(QT_BASE_DIR)/bin
+-QT_INCLUDE_DIR=$(QT_BASE_DIR)/include
++QT_INCLUDE_DIR=$(QT_BASE_DIR)/include/qt3
+ X11_LIB_DIR=/usr/X11R6/lib
+ LADSPA_PATH?=/usr/lib/ladspa:/usr/local/lib/ladspa
+-VERSION=1.8.6
++VERSION=1.8.7
++
++BINARY  = ams.real
++DESTDIR =
++BIN     = $(DESTDIR)/usr/lib/ams
+ 
+ #CXXFLAGS=-DQT_THREAD_SUPPORT -I$(QT_INCLUDE_DIR) -DLADSPA_PATH=\"$(LADSPA_PATH)\" -I/usr/X11R6/include -I. -O2 -g -Wall
+ CXXFLAGS=-DQT_THREAD_SUPPORT -I$(QT_INCLUDE_DIR) -DLADSPA_PATH=\"$(LADSPA_PATH)\" -I/usr/X11R6/include -I. -O2 -Wall
+@@ -77,11 +81,15 @@
+ 	modularsynth.o modularsynth.moc.o \
+ 	main.o
+ 
+-ams:	$(AMS_O)
+-	gcc -g -o ams $(AMS_O) \
++$(BINARY): $(AMS_O)
++	gcc -g -o $(BINARY) $(AMS_O) \
+ 	-L$(QT_LIB_DIR) -L$(X11_LIB_DIR) \
+ 	-lqt-mt -lclalsadrv -ljack -lasound -lsrfftw -lsfftw -lm
+ 
++install: $(BINARY)
++	install -d $(BIN)
++	install $(BINARY) $(BIN)
++
+ clean:
+ 	/bin/rm -f *.o *.moc.cpp *~
+ 

Added: ams/trunk/debian/patches/11ams_launch_script.dpatch
===================================================================
--- ams/trunk/debian/patches/11ams_launch_script.dpatch	2004-10-30 11:15:34 UTC (rev 5)
+++ ams/trunk/debian/patches/11ams_launch_script.dpatch	2004-10-30 11:18:02 UTC (rev 6)
@@ -0,0 +1,47 @@
+#!/bin/sh -e
+## 11ams_launch_script.dpatch by Free Ekanayaka <free@agnula.org>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: No description.
+
+if [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+
+[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
+patch_opts="${patch_opts:--f --no-backup-if-mismatch}"
+
+case "$1" in
+       -patch) patch $patch_opts -p1 < $0;;
+       -unpatch) patch $patch_opts -p1 -R < $0;;
+        *)
+                echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+                exit 1;;
+esac
+
+exit 0
+
+@DPATCH@
+diff -urNad /home/demudi/buster/ams/ams/ams ams/ams
+--- /home/demudi/buster/ams/ams/ams	1970-01-01 01:00:00.000000000 +0100
++++ ams/ams	2004-01-16 13:08:40.000000000 +0100
+@@ -0,0 +1,18 @@
++#!/bin/sh
++#
++# Little script to set up the environment before launching ams
++#
++# Copyright (C) 2003 Andrea Glorioso <andrea.glorioso@agnula.org>
++#
++# This script is licensed under the GNU GPL v2 - you can find a
++# complete copy of the license under /usr/share/common-licenses/GPL-2
++
++LADSPA_DEFAULT_PATH=/usr/lib/ladspa
++
++set | grep LADSPA_PATH | grep LADSPA_DEFAULT_PATH
++
++if [ $? -ne 0 ]; then
++	export LADSPA_PATH=${LADSPA_DEFAULT_PATH}:${LADSPA_PATH}
++fi
++
++/usr/lib/ams/ams.real $@

Added: ams/trunk/debian/patches/12default_patch_dir.dpatch
===================================================================
--- ams/trunk/debian/patches/12default_patch_dir.dpatch	2004-10-30 11:15:34 UTC (rev 5)
+++ ams/trunk/debian/patches/12default_patch_dir.dpatch	2004-10-30 11:18:02 UTC (rev 6)
@@ -0,0 +1,37 @@
+#!/bin/sh -e
+## 12default_patch_dir.dpatch by  <free@agnula.org>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: No description.
+
+if [ $# -ne 1 ]; then
+    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+    exit 1
+fi
+
+[ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts
+patch_opts="${patch_opts:--f --no-backup-if-mismatch}"
+
+case "$1" in
+       -patch) patch $patch_opts -p1 < $0;;
+       -unpatch) patch $patch_opts -p1 -R < $0;;
+        *)
+                echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
+                exit 1;;
+esac
+
+exit 0
+
+@DPATCH@
+diff -urNad /home/demudi/buster/ams/ams-1.6.0/modularsynth.cpp ams-1.6.0/modularsynth.cpp
+--- /home/demudi/buster/ams/ams-1.6.0/modularsynth.cpp	2003-11-27 21:02:36.000000000 +0600
++++ ams-1.6.0/modularsynth.cpp	2003-11-27 21:02:57.000000000 +0600
+@@ -1363,7 +1363,7 @@
+   QString config_fn;
+ 
+   if (presetPath.isEmpty()) {
+-    if (!(config_fn = QString(QFileDialog::getOpenFileName(QString::null, "AlsaModularSynth files (*.ams)")))) {
++    if (!(config_fn = QString(QFileDialog::getOpenFileName("/usr/share/ams", "AlsaModularSynth files (*.ams)")))) {
+       return;
+     }
+   } else {

Added: ams/trunk/debian/rules
===================================================================
--- ams/trunk/debian/rules	2004-10-30 11:15:34 UTC (rev 5)
+++ ams/trunk/debian/rules	2004-10-30 11:18:02 UTC (rev 6)
@@ -0,0 +1,98 @@
+#!/usr/bin/make -f
+# Sample debian/rules that uses debhelper.
+# GNU copyright 1997 to 1999 by Joey Hess.
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+# This is the debhelper compatibility version to use.
+export DH_COMPAT=3
+
+include /usr/share/dpatch/dpatch.make
+
+ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS)))
+	CFLAGS += -g
+endif
+ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
+	INSTALL_PROGRAM += -s
+endif
+
+configure: configure-stamp
+configure-stamp:
+	dh_testdir
+	# Add here commands to configure the package.
+
+	touch configure-stamp
+
+
+build: build-stamp
+
+build-stamp: configure-stamp patch-stamp 
+	dh_testdir
+
+	# Add here commands to compile the package.
+	$(MAKE)
+	#/usr/bin/docbook-to-man debian/ams.sgml > ams.1
+
+	touch build-stamp
+
+clean: unpatch
+	dh_testdir
+	dh_testroot
+	rm -f build-stamp configure-stamp
+
+	# Add here commands to clean up after the build process.
+	-$(MAKE) clean
+	# This is a horrible hack because the patch for clean target
+	# is unapplied before we arrive here
+	rm -f *.o *.cpp.moc ams.real
+
+	dh_clean
+
+install: build
+	dh_testdir
+	dh_testroot
+	dh_clean -k
+	dh_installdirs
+
+	# Add here commands to install the package into debian/ams.
+	$(MAKE) install DESTDIR=$(CURDIR)/debian/ams
+	cp ams $(CURDIR)/debian/ams/usr/bin 
+	chmod +x $(CURDIR)/debian/ams/usr/bin/ams
+
+# Build architecture-independent files here.
+binary-indep: build install
+# We have nothing to do by default.
+
+# Build architecture-dependent files here.
+binary-arch: build install
+	dh_testdir
+	dh_testroot
+	dh_installdebconf	
+	dh_installdocs
+	dh_installexamples
+	dh_installmenu
+#	dh_installlogrotate
+#	dh_installemacsen
+#	dh_installpam
+#	dh_installmime
+#	dh_installinit
+	dh_installcron
+	dh_installman
+	dh_installinfo
+#	dh_undocumented
+	dh_installchangelogs 
+	dh_link
+	dh_strip
+	dh_compress
+	dh_fixperms
+#	dh_makeshlibs
+	dh_installdeb
+#	dh_perl
+	dh_shlibdeps
+	dh_gencontrol
+	dh_md5sums
+	dh_builddeb
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary install configure


Property changes on: ams/trunk/debian/rules
___________________________________________________________________
Name: svn:executable
   + *

Added: ams/trunk/debian/watch
===================================================================
--- ams/trunk/debian/watch	2004-10-30 11:15:34 UTC (rev 5)
+++ ams/trunk/debian/watch	2004-10-30 11:18:02 UTC (rev 6)
@@ -0,0 +1,4 @@
+version=2
+
+# Pattern
+ftp://sourceforge.cs.umn.edu/pub/sourceforge/a/al/alsamodular/ams-(.*)\.tar\.bz2 debian uupdate