From 85fbffb947bcb0fdf97adf032c73a903874551f0 Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Wed, 23 Apr 2014 20:28:37 -0700 Subject: [PATCH 01/55] Fix relative path for stk rawwaves on OSX --- src/core/config_mgr.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/core/config_mgr.cpp b/src/core/config_mgr.cpp index 653c14d5d..1fdb6a502 100644 --- a/src/core/config_mgr.cpp +++ b/src/core/config_mgr.cpp @@ -355,8 +355,10 @@ void configManager::loadConfigFile() if( m_stkDir.isEmpty() || m_stkDir == QDir::separator() || !QDir( m_stkDir ).exists() ) { -#ifdef LMMS_BUILD_WIN32 +#if defined(LMMS_BUILD_WIN32) m_stkDir = m_dataDir + "stk/rawwaves/"; +#elif defined(LMMS_BUILD_APPLE) + m_stkDir = qApp->applicationDirPath() + "/../share/stk/rawwaves/"; #else m_stkDir = "/usr/share/stk/rawwaves/"; #endif From ec708aa967bf7a26a2b231703ebcd5b7635e7d06 Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Wed, 23 Apr 2014 20:31:02 -0700 Subject: [PATCH 02/55] Update config_mgr.cpp --- src/core/config_mgr.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/config_mgr.cpp b/src/core/config_mgr.cpp index 1fdb6a502..1510f630a 100644 --- a/src/core/config_mgr.cpp +++ b/src/core/config_mgr.cpp @@ -358,7 +358,7 @@ void configManager::loadConfigFile() #if defined(LMMS_BUILD_WIN32) m_stkDir = m_dataDir + "stk/rawwaves/"; #elif defined(LMMS_BUILD_APPLE) - m_stkDir = qApp->applicationDirPath() + "/../share/stk/rawwaves/"; + m_stkDir = qApp->applicationDirPath() + "/../share/stk/rawwaves/"; #else m_stkDir = "/usr/share/stk/rawwaves/"; #endif From 53e67bae00d9cdcd5d763ee79518a42d9e09bd19 Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Wed, 23 Apr 2014 20:33:19 -0700 Subject: [PATCH 03/55] Copy rawwaves to Apple bundle --- data/scripts/create_apple_installer.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/data/scripts/create_apple_installer.sh b/data/scripts/create_apple_installer.sh index 70f1c151c..85efc59ec 100755 --- a/data/scripts/create_apple_installer.sh +++ b/data/scripts/create_apple_installer.sh @@ -22,6 +22,8 @@ CMAKE_INSTALL=$CMAKE_SRC/target # LMMS source build directory CMAKE_BUILD=$CMAKE_SRC/build +# STK rawwaves directory +STK_RAWWAVE=$HOME/stk-*/rawwaves # Place to create ".app" bundle @@ -56,6 +58,10 @@ cd $CMAKE_INSTALL mkdir $APP/Contents cp -R * $APP/Contents +# Manually copy STK rawwaves +mkdir -p $APP/Contents/share/stk/rawwaves +cp $STK_RAWWAVE/*.raw $APP/Contents/share/stk/rawwaves + # Make all libraries writable for macdeployqt cd $APP find . -type f -print0 | xargs -0 chmod u+w From 2505c770bb756cacd87b6d6f4a13730b3c142087 Mon Sep 17 00:00:00 2001 From: Tobias Doerffel Date: Fri, 25 Apr 2014 23:41:51 +0200 Subject: [PATCH 04/55] AutomationEditor: removed useless assertion As suggested by wongcc966422 and others, the assertion at this place is superfluous and just causes unneccessary crashes. Closes #540. --- src/gui/AutomationEditor.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/gui/AutomationEditor.cpp b/src/gui/AutomationEditor.cpp index d6810eee2..b58e49f8b 100644 --- a/src/gui/AutomationEditor.cpp +++ b/src/gui/AutomationEditor.cpp @@ -1597,8 +1597,6 @@ void AutomationEditor::paintEvent( QPaintEvent * _pe ) ++it; } - Q_ASSERT( it == time_map.end()-1 ); - for( int i = it.key(), x = xCoordOfTick( i ); x <= width(); i++, x = xCoordOfTick( i ) ) { From bff016dec81a14eb05905c42a585f4e12a89e756 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Mon, 28 Apr 2014 11:35:23 -0700 Subject: [PATCH 05/55] flp import: add missing break statement --- plugins/flp_import/FlpImport.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/flp_import/FlpImport.cpp b/plugins/flp_import/FlpImport.cpp index 5d9c7a83a..e69ebd0c6 100644 --- a/plugins/flp_import/FlpImport.cpp +++ b/plugins/flp_import/FlpImport.cpp @@ -980,6 +980,7 @@ if( p.currentEffectChannel <= NumFxChannels ) case FLP_LayerChans: p.channels[data].layerParent = cur_channel; + break; // DWORD EVENTS case FLP_Color: From e9073c88bcc87f2b84977aedb2058ef747c7fd0c Mon Sep 17 00:00:00 2001 From: Tobias Doerffel Date: Wed, 30 Apr 2014 10:48:40 +0200 Subject: [PATCH 06/55] PianoRoll: reset last note volume/panning when clearing project In order to get a uniform behaviour when starting with a new project or opening another project, reset volume and panning of last edited note so new placed notes have default volume and panning. Closes #644. --- include/PianoRoll.h | 3 +++ src/core/song.cpp | 5 +++++ src/gui/PianoRoll.cpp | 9 +++++++++ 3 files changed, 17 insertions(+) diff --git a/include/PianoRoll.h b/include/PianoRoll.h index cdd198621..09ef9db16 100644 --- a/include/PianoRoll.h +++ b/include/PianoRoll.h @@ -53,6 +53,9 @@ class PianoRoll : public QWidget, public SerializingObject { Q_OBJECT public: + /*! \brief Resets settings to default when e.g. creating a new project */ + void reset(); + void setCurrentPattern( pattern * _new_pattern ); inline void stopRecording() diff --git a/src/core/song.cpp b/src/core/song.cpp index a1a27c3d6..46b51af1f 100644 --- a/src/core/song.cpp +++ b/src/core/song.cpp @@ -749,6 +749,11 @@ void song::clearProject() engine::automationEditor()->setCurrentPattern( NULL ); } + if( engine::pianoRoll() ) + { + engine::pianoRoll()->reset(); + } + m_tempoModel.reset(); m_masterVolumeModel.reset(); m_masterPitchModel.reset(); diff --git a/src/gui/PianoRoll.cpp b/src/gui/PianoRoll.cpp index c09524152..7d0b99444 100644 --- a/src/gui/PianoRoll.cpp +++ b/src/gui/PianoRoll.cpp @@ -641,6 +641,15 @@ PianoRoll::PianoRoll() : } + +void PianoRoll::reset() +{ + m_lastNoteVolume = DefaultVolume; + m_lastNotePanning = DefaultPanning; +} + + + void PianoRoll::changeNoteEditMode( int i ) { m_noteEditMode = (noteEditMode) i; From 09fb597af4ca462b4298badbb060bb39f4c838f7 Mon Sep 17 00:00:00 2001 From: Tobias Doerffel Date: Wed, 30 Apr 2014 11:31:32 +0200 Subject: [PATCH 07/55] SampleBuffer: always sanitize start and end frame settings An end frame variable always has to be greater than a start frame in order to prevent crashes due to negative frame counts being calculated in getSampleFragment() otherwise. Closes #629. --- include/SampleBuffer.h | 32 +++++++++--------------- src/core/SampleBuffer.cpp | 52 ++++++++++++++++++++++++++++++++++++--- 2 files changed, 59 insertions(+), 25 deletions(-) diff --git a/include/SampleBuffer.h b/include/SampleBuffer.h index 54c444fc5..2c0f43f03 100644 --- a/include/SampleBuffer.h +++ b/include/SampleBuffer.h @@ -22,9 +22,8 @@ * */ - -#ifndef _SAMPLE_BUFFER_H -#define _SAMPLE_BUFFER_H +#ifndef SAMPLE_BUFFER_H +#define SAMPLE_BUFFER_H #include #include @@ -99,29 +98,18 @@ public: return m_audioFile; } - inline f_cnt_t startFrame() const + f_cnt_t startFrame() const { return m_startFrame; } - inline f_cnt_t endFrame() const + f_cnt_t endFrame() const { return m_endFrame; } - void setLoopStartFrame( f_cnt_t _start ) - { - m_varLock.lock(); - m_loopStartFrame = _start; - m_varLock.unlock(); - } - - void setLoopEndFrame( f_cnt_t _end ) - { - m_varLock.lock(); - m_loopEndFrame = _end; - m_varLock.unlock(); - } + void setLoopStartFrame( f_cnt_t start ); + void setLoopEndFrame( f_cnt_t end ); inline f_cnt_t frames() const { @@ -223,13 +211,16 @@ public: public slots: void setAudioFile( const QString & _audio_file ); void loadFromBase64( const QString & _data ); - void setStartFrame( const f_cnt_t _s ); - void setEndFrame( const f_cnt_t _e ); + void setStartFrame( f_cnt_t start ); + void setEndFrame( f_cnt_t end ); void setAmplification( float _a ); void setReversed( bool _on ); private: + /*! Ensures that all settings are sane like end frame > start frame etc. */ + void sanitizeSettings(); + void update( bool _keep_settings = false ); void convertIntToFloat ( int_sample_t * & _ibuf, f_cnt_t _frames, int _channels); @@ -273,5 +264,4 @@ signals: } ; - #endif diff --git a/src/core/SampleBuffer.cpp b/src/core/SampleBuffer.cpp index 2a7639a05..a291ddbc5 100644 --- a/src/core/SampleBuffer.cpp +++ b/src/core/SampleBuffer.cpp @@ -154,6 +154,25 @@ SampleBuffer::~SampleBuffer() +void SampleBuffer::sanitizeSettings() +{ + m_varLock.lock(); + + if( m_startFrame >= m_endFrame ) + { + m_endFrame = m_startFrame+1; + } + + if( m_loopStartFrame >= m_loopEndFrame ) + { + m_loopEndFrame = m_loopStartFrame+1; + } + + m_varLock.unlock(); +} + + + void SampleBuffer::update( bool _keep_settings ) { @@ -828,6 +847,27 @@ void SampleBuffer::visualize( QPainter & _p, const QRect & _dr, +void SampleBuffer::setLoopStartFrame( f_cnt_t start ) +{ + m_varLock.lock(); + m_loopStartFrame = start; + m_varLock.unlock(); + + sanitizeSettings(); +} + + + +void SampleBuffer::setLoopEndFrame( f_cnt_t end ) +{ + m_varLock.lock(); + m_loopEndFrame = end; + m_varLock.unlock(); + + sanitizeSettings(); +} + + QString SampleBuffer::openAudioFile() const { @@ -1240,21 +1280,25 @@ void SampleBuffer::loadFromBase64( const QString & _data ) -void SampleBuffer::setStartFrame( const f_cnt_t _s ) +void SampleBuffer::setStartFrame( f_cnt_t start ) { m_varLock.lock(); - m_loopStartFrame = m_startFrame = _s; + m_loopStartFrame = m_startFrame = start; m_varLock.unlock(); + + sanitizeSettings(); } -void SampleBuffer::setEndFrame( const f_cnt_t _e ) +void SampleBuffer::setEndFrame( f_cnt_t end ) { m_varLock.lock(); - m_loopEndFrame = m_endFrame = _e; + m_loopEndFrame = m_endFrame = end; m_varLock.unlock(); + + sanitizeSettings(); } From d58a4d8804c3b16de38c1e7d85d000dbaa8468a9 Mon Sep 17 00:00:00 2001 From: Tobias Doerffel Date: Wed, 30 Apr 2014 11:34:34 +0200 Subject: [PATCH 08/55] SampleBuffer: more sanity checks in getSampleFragment() Despite of the previously introduced sanitizing it still sometimes happens that an end frame variable is not greater than the corresponding start frame variable. Make sure we don't crash by adding more sanity checks in getSampleFragment(). Closes #629. --- src/core/SampleBuffer.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/SampleBuffer.cpp b/src/core/SampleBuffer.cpp index a291ddbc5..75558364d 100644 --- a/src/core/SampleBuffer.cpp +++ b/src/core/SampleBuffer.cpp @@ -752,14 +752,14 @@ sampleFrame * SampleBuffer::getSampleFragment( f_cnt_t _start, { if( _looped ) { - if( _start + _frames <= m_loopEndFrame ) + if( _start + _frames <= m_loopEndFrame || m_loopStartFrame >= m_loopEndFrame ) { return m_data + _start; } } else { - if( _start + _frames <= m_endFrame ) + if( _start + _frames <= m_endFrame || m_startFrame >= m_endFrame ) { return m_data + _start; } From 9c279564146bef08d2cd1da7141a0e88ec2a01ff Mon Sep 17 00:00:00 2001 From: Tobias Doerffel Date: Wed, 30 Apr 2014 15:20:44 +0200 Subject: [PATCH 09/55] ZynAddSubFX: allocate spectrum on heap instead of stack When loading some presets the PADnoteParameters spectrum size is 524288 or even bigger resulting in a stack allocation of 2 MB or more. This results in a stack overflow on Win32 and thus crashes LMMS. Fix this by allocating the spectrum on the heap instead. Closes #543. --- plugins/zynaddsubfx/src/Params/PADnoteParameters.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/zynaddsubfx/src/Params/PADnoteParameters.cpp b/plugins/zynaddsubfx/src/Params/PADnoteParameters.cpp index 94599e72f..a44da25ab 100644 --- a/plugins/zynaddsubfx/src/Params/PADnoteParameters.cpp +++ b/plugins/zynaddsubfx/src/Params/PADnoteParameters.cpp @@ -555,7 +555,7 @@ void PADnoteParameters::applyparameters(bool lockmutex) { const int samplesize = (((int) 1) << (Pquality.samplesize + 14)); int spectrumsize = samplesize / 2; - REALTYPE spectrum[spectrumsize]; + REALTYPE *spectrum = new REALTYPE[spectrumsize]; int profilesize = 512; REALTYPE profile[profilesize]; @@ -653,6 +653,8 @@ void PADnoteParameters::applyparameters(bool lockmutex) delete (fft); deleteFFTFREQS(&fftfreqs); + delete[] spectrum; + //delete the additional samples that might exists and are not useful if(lockmutex) { pthread_mutex_lock(mutex); From b069cd61cef2cfc5d282d62109612bcf2b4ed966 Mon Sep 17 00:00:00 2001 From: Tobias Doerffel Date: Wed, 30 Apr 2014 15:28:55 +0200 Subject: [PATCH 10/55] Made 1.0.1 release First maintenance release of the 1.0.x series. Bumped version number to 1.0.1 in CMakeLists.txt, README and lmms.rc.in. --- CMakeLists.txt | 2 +- README | 2 +- lmms.rc.in | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 619344045..211209393 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,7 +15,7 @@ INCLUDE(FindPkgConfig) SET(VERSION_MAJOR "1") SET(VERSION_MINOR "0") -SET(VERSION_PATCH "0") +SET(VERSION_PATCH "1") #SET(VERSION_SUFFIX "") SET(VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}") IF(VERSION_SUFFIX) diff --git a/README b/README index 095e55a4d..f256df665 100644 --- a/README +++ b/README @@ -1,4 +1,4 @@ -LMMS 1.0.0 +LMMS 1.0.1 =========== Copyright (c) 2004-2014 by LMMS developers diff --git a/lmms.rc.in b/lmms.rc.in index b86fb503c..0cf6c17c6 100644 --- a/lmms.rc.in +++ b/lmms.rc.in @@ -2,7 +2,7 @@ lmmsicon ICON data/lmms.ico #include VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,0,0,0 + FILEVERSION 1,0,1,0 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK FILEOS VOS_NT_WINDOWS32 FILETYPE VFT_APP From 6191a64325dcb1de0837d0e07ccfc528daafe1ea Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Wed, 30 Apr 2014 10:22:55 -0700 Subject: [PATCH 11/55] Remove Content/bin directory from .app Fixes "..LMMS.app/Contents/bin" directory not empty message which occasionally occurs when bin has hidden OS X files in it. --- data/scripts/create_apple_installer.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/scripts/create_apple_installer.sh b/data/scripts/create_apple_installer.sh index 85efc59ec..1211dd8a5 100755 --- a/data/scripts/create_apple_installer.sh +++ b/data/scripts/create_apple_installer.sh @@ -69,7 +69,7 @@ find . -type f -print0 | xargs -0 chmod u+w # Move lmms binary to the proper location mkdir -p $APP/Contents/MacOS mv $APP/Contents/bin/lmms $APP/Contents/MacOS -rmdir $APP/Contents/bin +rm -rf $APP/Contents/bin # Move libraries to proper locations mkdir -p $APP/Contents/Frameworks From 6a0952dc34aa8ff634e82d655ef92927e837708f Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Wed, 30 Apr 2014 10:49:07 -0700 Subject: [PATCH 12/55] Add LADSPA default path for Apple --- src/core/config_mgr.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/core/config_mgr.cpp b/src/core/config_mgr.cpp index 1510f630a..51e61ac1d 100644 --- a/src/core/config_mgr.cpp +++ b/src/core/config_mgr.cpp @@ -344,8 +344,10 @@ void configManager::loadConfigFile() if( m_ladDir.isEmpty() || m_ladDir == QDir::separator() || ( !m_ladDir.contains( ':' ) && !QDir( m_ladDir ).exists() ) ) { -#ifdef LMMS_BUILD_WIN32 +#if defined(LMMS_BUILD_WIN32) m_ladDir = m_pluginDir + "ladspa" + QDir::separator(); +#elif defined(LMMS_BUILD_APPLE) + m_ladDir = qApp->applicationDirPath() + "/../lib/lmms/ladspa/"; #else m_ladDir = qApp->applicationDirPath() + '/' + LIB_DIR + "/ladspa/"; #endif From 5325e635c329afb8c51bd18daadea002b88f3f4f Mon Sep 17 00:00:00 2001 From: Tobias Doerffel Date: Thu, 1 May 2014 00:41:24 +0200 Subject: [PATCH 13/55] CMake/FindWine: add suffix for finding library on Debian Testing On Debian Testing the WINE libraries reside in /usr/lib//wine. Therefore add according suffix to search in as well. --- cmake/modules/FindWine.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/modules/FindWine.cmake b/cmake/modules/FindWine.cmake index 0a349cb25..520266ad8 100644 --- a/cmake/modules/FindWine.cmake +++ b/cmake/modules/FindWine.cmake @@ -8,7 +8,7 @@ # FIND_PATH(WINE_INCLUDE_DIR windows/windows.h PATH_SUFFIXES wine) -FIND_LIBRARY(WINE_LIBRARY NAMES wine) +FIND_LIBRARY(WINE_LIBRARY NAMES wine PATH_SUFFIXES wine) set(WINE_INCLUDE_DIRS ${WINE_INCLUDE_DIR} ) set(WINE_LIBRARIES ${WINE_LIBRARY} ) From 83c20196117f0b3519479c7bb736bc1a45e19619 Mon Sep 17 00:00:00 2001 From: Tobias Doerffel Date: Thu, 1 May 2014 23:33:40 +0200 Subject: [PATCH 14/55] LadspaEffect/TAP: fix instantiation/destruction Instead of relying on naming the init functions _init() and _fini() declare them as constructors/destructors and use a different name so there's no double destruction Closes #668. --- plugins/LadspaEffect/tap/tap_autopan.c | 8 ++++---- plugins/LadspaEffect/tap/tap_chorusflanger.c | 8 ++++---- plugins/LadspaEffect/tap/tap_deesser.c | 8 ++++---- plugins/LadspaEffect/tap/tap_doubler.c | 8 ++++---- plugins/LadspaEffect/tap/tap_dynamics_m.c | 8 ++++---- plugins/LadspaEffect/tap/tap_dynamics_st.c | 8 ++++---- plugins/LadspaEffect/tap/tap_echo.c | 8 ++++---- plugins/LadspaEffect/tap/tap_eq.c | 4 ++-- plugins/LadspaEffect/tap/tap_eqbw.c | 4 ++-- plugins/LadspaEffect/tap/tap_limiter.c | 8 ++++---- plugins/LadspaEffect/tap/tap_pinknoise.c | 8 ++++---- plugins/LadspaEffect/tap/tap_pitch.c | 8 ++++---- plugins/LadspaEffect/tap/tap_reflector.c | 8 ++++---- plugins/LadspaEffect/tap/tap_reverb.c | 8 ++++---- plugins/LadspaEffect/tap/tap_rotspeak.c | 8 ++++---- plugins/LadspaEffect/tap/tap_sigmoid.c | 8 ++++---- plugins/LadspaEffect/tap/tap_tremolo.c | 8 ++++---- plugins/LadspaEffect/tap/tap_tubewarmth.c | 8 ++++---- plugins/LadspaEffect/tap/tap_vibrato.c | 8 ++++---- 19 files changed, 72 insertions(+), 72 deletions(-) diff --git a/plugins/LadspaEffect/tap/tap_autopan.c b/plugins/LadspaEffect/tap/tap_autopan.c index 387ae2b92..3cffaabf7 100644 --- a/plugins/LadspaEffect/tap/tap_autopan.c +++ b/plugins/LadspaEffect/tap/tap_autopan.c @@ -233,10 +233,10 @@ LADSPA_Descriptor * mono_descriptor = NULL; -/* _init() is called automatically when the plugin library is first +/* __attribute__((constructor)) tap_init() is called automatically when the plugin library is first loaded. */ void -_init() { +__attribute__((constructor)) tap_init() { int i; char ** port_names; @@ -341,9 +341,9 @@ delete_descriptor(LADSPA_Descriptor * descriptor) { } -/* _fini() is called automatically when the library is unloaded. */ +/* __attribute__((destructor)) tap_fini() is called automatically when the library is unloaded. */ void -_fini() { +__attribute__((destructor)) tap_fini() { delete_descriptor(mono_descriptor); } diff --git a/plugins/LadspaEffect/tap/tap_chorusflanger.c b/plugins/LadspaEffect/tap/tap_chorusflanger.c index c85b39439..9605fbf81 100644 --- a/plugins/LadspaEffect/tap/tap_chorusflanger.c +++ b/plugins/LadspaEffect/tap/tap_chorusflanger.c @@ -436,10 +436,10 @@ LADSPA_Descriptor * stereo_descriptor = NULL; -/* _init() is called automatically when the plugin library is first +/* __attribute__((constructor)) tap_init() is called automatically when the plugin library is first loaded. */ void - _init() { +__attribute__((constructor)) tap_init() { char ** port_names; LADSPA_PortDescriptor * port_descriptors; @@ -575,9 +575,9 @@ delete_descriptor(LADSPA_Descriptor * descriptor) { } -/* _fini() is called automatically when the library is unloaded. */ +/* __attribute__((destructor)) tap_fini() is called automatically when the library is unloaded. */ void - _fini() { +__attribute__((destructor)) tap_fini() { delete_descriptor(stereo_descriptor); } diff --git a/plugins/LadspaEffect/tap/tap_deesser.c b/plugins/LadspaEffect/tap/tap_deesser.c index b18f33b45..919007ddb 100644 --- a/plugins/LadspaEffect/tap/tap_deesser.c +++ b/plugins/LadspaEffect/tap/tap_deesser.c @@ -349,10 +349,10 @@ LADSPA_Descriptor * mono_descriptor = NULL; -/* _init() is called automatically when the plugin library is first +/* __attribute__((constructor)) tap_init() is called automatically when the plugin library is first loaded. */ void - _init() { +__attribute__((constructor)) tap_init() { int i; char ** port_names; @@ -471,9 +471,9 @@ delete_descriptor(LADSPA_Descriptor * descriptor) { } -/* _fini() is called automatically when the library is unloaded. */ +/* __attribute__((destructor)) tap_fini() is called automatically when the library is unloaded. */ void - _fini() { +__attribute__((destructor)) tap_fini() { delete_descriptor(mono_descriptor); } diff --git a/plugins/LadspaEffect/tap/tap_doubler.c b/plugins/LadspaEffect/tap/tap_doubler.c index b84c1d583..46b0f7971 100644 --- a/plugins/LadspaEffect/tap/tap_doubler.c +++ b/plugins/LadspaEffect/tap/tap_doubler.c @@ -574,10 +574,10 @@ LADSPA_Descriptor * stereo_descriptor = NULL; -/* _init() is called automatically when the plugin library is first +/* __attribute__((constructor)) tap_init() is called automatically when the plugin library is first loaded. */ void - _init() { +__attribute__((constructor)) tap_init() { char ** port_names; LADSPA_PortDescriptor * port_descriptors; @@ -717,9 +717,9 @@ delete_descriptor(LADSPA_Descriptor * descriptor) { } -/* _fini() is called automatically when the library is unloaded. */ +/* __attribute__((destructor)) tap_fini() is called automatically when the library is unloaded. */ void - _fini() { +__attribute__((destructor)) tap_fini() { delete_descriptor(stereo_descriptor); } diff --git a/plugins/LadspaEffect/tap/tap_dynamics_m.c b/plugins/LadspaEffect/tap/tap_dynamics_m.c index 6ea8d6263..559d80d3f 100644 --- a/plugins/LadspaEffect/tap/tap_dynamics_m.c +++ b/plugins/LadspaEffect/tap/tap_dynamics_m.c @@ -516,10 +516,10 @@ LADSPA_Descriptor * mono_descriptor = NULL; -/* _init() is called automatically when the plugin library is first +/* __attribute__((constructor)) tap_init() is called automatically when the plugin library is first loaded. */ void - _init() { +__attribute__((constructor)) tap_init() { char ** port_names; LADSPA_PortDescriptor * port_descriptors; @@ -646,9 +646,9 @@ delete_descriptor(LADSPA_Descriptor * descriptor) { } -/* _fini() is called automatically when the library is unloaded. */ +/* __attribute__((destructor)) tap_fini() is called automatically when the library is unloaded. */ void - _fini() { +__attribute__((destructor)) tap_fini() { delete_descriptor(mono_descriptor); } diff --git a/plugins/LadspaEffect/tap/tap_dynamics_st.c b/plugins/LadspaEffect/tap/tap_dynamics_st.c index 7a42fe1e8..045754cda 100644 --- a/plugins/LadspaEffect/tap/tap_dynamics_st.c +++ b/plugins/LadspaEffect/tap/tap_dynamics_st.c @@ -696,10 +696,10 @@ LADSPA_Descriptor * stereo_descriptor = NULL; -/* _init() is called automatically when the plugin library is first +/* __attribute__((constructor)) tap_init() is called automatically when the plugin library is first loaded. */ void - _init() { +__attribute__((constructor)) tap_init() { char ** port_names; LADSPA_PortDescriptor * port_descriptors; @@ -857,9 +857,9 @@ delete_descriptor(LADSPA_Descriptor * descriptor) { } -/* _fini() is called automatically when the library is unloaded. */ +/* __attribute__((destructor)) tap_fini() is called automatically when the library is unloaded. */ void - _fini() { +__attribute__((destructor)) tap_fini() { delete_descriptor(stereo_descriptor); } diff --git a/plugins/LadspaEffect/tap/tap_echo.c b/plugins/LadspaEffect/tap/tap_echo.c index e84cc2b51..6a0bdbb54 100644 --- a/plugins/LadspaEffect/tap/tap_echo.c +++ b/plugins/LadspaEffect/tap/tap_echo.c @@ -436,10 +436,10 @@ LADSPA_Descriptor * stereo_descriptor = NULL; -/* _init() is called automatically when the plugin library is first +/* __attribute__((constructor)) tap_init() is called automatically when the plugin library is first loaded. */ void - _init() { +__attribute__((constructor)) tap_init() { char ** port_names; LADSPA_PortDescriptor * port_descriptors; @@ -607,9 +607,9 @@ delete_descriptor(LADSPA_Descriptor * descriptor) { } -/* _fini() is called automatically when the library is unloaded. */ +/* __attribute__((destructor)) tap_fini() is called automatically when the library is unloaded. */ void - _fini() { +__attribute__((destructor)) tap_fini() { delete_descriptor(stereo_descriptor); } diff --git a/plugins/LadspaEffect/tap/tap_eq.c b/plugins/LadspaEffect/tap/tap_eq.c index 2c07cd004..daf9463a1 100644 --- a/plugins/LadspaEffect/tap/tap_eq.c +++ b/plugins/LadspaEffect/tap/tap_eq.c @@ -494,7 +494,7 @@ run_adding_eq(LADSPA_Handle instance, unsigned long sample_count) { void - _init() { +__attribute__((constructor)) tap_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; @@ -765,7 +765,7 @@ void void - _fini() { +__attribute__((destructor)) tap_fini() { if (eqDescriptor) { free((LADSPA_PortDescriptor *)eqDescriptor->PortDescriptors); diff --git a/plugins/LadspaEffect/tap/tap_eqbw.c b/plugins/LadspaEffect/tap/tap_eqbw.c index 3805d003a..fd9d15d46 100644 --- a/plugins/LadspaEffect/tap/tap_eqbw.c +++ b/plugins/LadspaEffect/tap/tap_eqbw.c @@ -596,7 +596,7 @@ run_adding_eq(LADSPA_Handle instance, unsigned long sample_count) { void - _init() { +__attribute__((constructor)) tap_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; @@ -955,7 +955,7 @@ void void - _fini() { +__attribute__((destructor)) tap_fini() { if (eqDescriptor) { free((LADSPA_PortDescriptor *)eqDescriptor->PortDescriptors); diff --git a/plugins/LadspaEffect/tap/tap_limiter.c b/plugins/LadspaEffect/tap/tap_limiter.c index 7cd829c7c..b8de945bc 100644 --- a/plugins/LadspaEffect/tap/tap_limiter.c +++ b/plugins/LadspaEffect/tap/tap_limiter.c @@ -324,10 +324,10 @@ LADSPA_Descriptor * mono_descriptor = NULL; -/* _init() is called automatically when the plugin library is first +/* __attribute__((constructor)) tap_init() is called automatically when the plugin library is first loaded. */ void - _init() { +__attribute__((constructor)) tap_init() { char ** port_names; LADSPA_PortDescriptor * port_descriptors; @@ -423,9 +423,9 @@ delete_descriptor(LADSPA_Descriptor * descriptor) { } -/* _fini() is called automatically when the library is unloaded. */ +/* __attribute__((destructor)) tap_fini() is called automatically when the library is unloaded. */ void - _fini() { +__attribute__((destructor)) tap_fini() { delete_descriptor(mono_descriptor); } diff --git a/plugins/LadspaEffect/tap/tap_pinknoise.c b/plugins/LadspaEffect/tap/tap_pinknoise.c index 5984ecee4..a71031061 100644 --- a/plugins/LadspaEffect/tap/tap_pinknoise.c +++ b/plugins/LadspaEffect/tap/tap_pinknoise.c @@ -225,10 +225,10 @@ LADSPA_Descriptor * mono_descriptor = NULL; -/* _init() is called automatically when the plugin library is first +/* __attribute__((constructor)) tap_init() is called automatically when the plugin library is first loaded. */ void - _init() { +__attribute__((constructor)) tap_init() { char ** port_names; LADSPA_PortDescriptor * port_descriptors; @@ -325,9 +325,9 @@ delete_descriptor(LADSPA_Descriptor * descriptor) { } -/* _fini() is called automatically when the library is unloaded. */ +/* __attribute__((destructor)) tap_fini() is called automatically when the library is unloaded. */ void - _fini() { +__attribute__((destructor)) tap_fini() { delete_descriptor(mono_descriptor); } diff --git a/plugins/LadspaEffect/tap/tap_pitch.c b/plugins/LadspaEffect/tap/tap_pitch.c index eec650682..4f85a49ee 100644 --- a/plugins/LadspaEffect/tap/tap_pitch.c +++ b/plugins/LadspaEffect/tap/tap_pitch.c @@ -418,10 +418,10 @@ LADSPA_Descriptor * mono_descriptor = NULL; -/* _init() is called automatically when the plugin library is first +/* __attribute__((constructor)) tap_init() is called automatically when the plugin library is first loaded. */ void - _init() { +__attribute__((constructor)) tap_init() { int i; char ** port_names; @@ -536,9 +536,9 @@ delete_descriptor(LADSPA_Descriptor * descriptor) { } -/* _fini() is called automatically when the library is unloaded. */ +/* __attribute__((destructor)) tap_fini() is called automatically when the library is unloaded. */ void - _fini() { +__attribute__((destructor)) tap_fini() { delete_descriptor(mono_descriptor); } diff --git a/plugins/LadspaEffect/tap/tap_reflector.c b/plugins/LadspaEffect/tap/tap_reflector.c index 4e8e33aa6..12af24366 100644 --- a/plugins/LadspaEffect/tap/tap_reflector.c +++ b/plugins/LadspaEffect/tap/tap_reflector.c @@ -378,10 +378,10 @@ LADSPA_Descriptor * mono_descriptor = NULL; -/* _init() is called automatically when the plugin library is first +/* __attribute__((constructor)) tap_init() is called automatically when the plugin library is first loaded. */ void - _init() { +__attribute__((constructor)) tap_init() { int i; char ** port_names; @@ -480,9 +480,9 @@ delete_descriptor(LADSPA_Descriptor * descriptor) { } -/* _fini() is called automatically when the library is unloaded. */ +/* __attribute__((destructor)) tap_fini() is called automatically when the library is unloaded. */ void - _fini() { +__attribute__((destructor)) tap_fini() { delete_descriptor(mono_descriptor); } diff --git a/plugins/LadspaEffect/tap/tap_reverb.c b/plugins/LadspaEffect/tap/tap_reverb.c index 87afa28da..e1a0fe765 100644 --- a/plugins/LadspaEffect/tap/tap_reverb.c +++ b/plugins/LadspaEffect/tap/tap_reverb.c @@ -665,10 +665,10 @@ LADSPA_Descriptor * stereo_descriptor = NULL; -/* _init() is called automatically when the plugin library is first +/* __attribute__((constructor)) tap_init() is called automatically when the plugin library is first loaded. */ void - _init() { +__attribute__((constructor)) tap_init() { char ** port_names; LADSPA_PortDescriptor * port_descriptors; @@ -815,9 +815,9 @@ delete_descriptor(LADSPA_Descriptor * descriptor) { } -/* _fini() is called automatically when the library is unloaded. */ +/* __attribute__((destructor)) tap_fini() is called automatically when the library is unloaded. */ void - _fini() { +__attribute__((destructor)) tap_fini() { delete_descriptor(stereo_descriptor); } diff --git a/plugins/LadspaEffect/tap/tap_rotspeak.c b/plugins/LadspaEffect/tap/tap_rotspeak.c index c16393c3f..0b4be0720 100644 --- a/plugins/LadspaEffect/tap/tap_rotspeak.c +++ b/plugins/LadspaEffect/tap/tap_rotspeak.c @@ -624,10 +624,10 @@ LADSPA_Descriptor * stereo_descriptor = NULL; -/* _init() is called automatically when the plugin library is first +/* __attribute__((constructor)) tap_init() is called automatically when the plugin library is first loaded. */ void - _init() { +__attribute__((constructor)) tap_init() { int i; char ** port_names; @@ -748,9 +748,9 @@ delete_descriptor(LADSPA_Descriptor * descriptor) { } -/* _fini() is called automatically when the library is unloaded. */ +/* __attribute__((destructor)) tap_fini() is called automatically when the library is unloaded. */ void - _fini() { +__attribute__((destructor)) tap_fini() { delete_descriptor(stereo_descriptor); } diff --git a/plugins/LadspaEffect/tap/tap_sigmoid.c b/plugins/LadspaEffect/tap/tap_sigmoid.c index b1d33e843..e2e2d4b20 100644 --- a/plugins/LadspaEffect/tap/tap_sigmoid.c +++ b/plugins/LadspaEffect/tap/tap_sigmoid.c @@ -228,10 +228,10 @@ cleanup_Sigmoid(LADSPA_Handle Instance) { LADSPA_Descriptor * mono_descriptor = NULL; -/* _init() is called automatically when the plugin library is first +/* __attribute__((constructor)) tap_init() is called automatically when the plugin library is first loaded. */ void - _init() { +__attribute__((constructor)) tap_init() { char ** port_names; LADSPA_PortDescriptor * port_descriptors; @@ -318,9 +318,9 @@ delete_descriptor(LADSPA_Descriptor * descriptor) { } -/* _fini() is called automatically when the library is unloaded. */ +/* __attribute__((destructor)) tap_fini() is called automatically when the library is unloaded. */ void - _fini() { +__attribute__((destructor)) tap_fini() { delete_descriptor(mono_descriptor); } diff --git a/plugins/LadspaEffect/tap/tap_tremolo.c b/plugins/LadspaEffect/tap/tap_tremolo.c index a4a929574..6ff4a3c52 100644 --- a/plugins/LadspaEffect/tap/tap_tremolo.c +++ b/plugins/LadspaEffect/tap/tap_tremolo.c @@ -220,10 +220,10 @@ LADSPA_Descriptor * mono_descriptor = NULL; -/* _init() is called automatically when the plugin library is first +/* __attribute__((constructor)) tap_init() is called automatically when the plugin library is first loaded. */ void - _init() { +__attribute__((constructor)) tap_init() { char ** port_names; LADSPA_PortDescriptor * port_descriptors; @@ -323,9 +323,9 @@ delete_descriptor(LADSPA_Descriptor * descriptor) { } -/* _fini() is called automatically when the library is unloaded. */ +/* __attribute__((destructor)) tap_fini() is called automatically when the library is unloaded. */ void - _fini() { +__attribute__((destructor)) tap_fini() { delete_descriptor(mono_descriptor); } diff --git a/plugins/LadspaEffect/tap/tap_tubewarmth.c b/plugins/LadspaEffect/tap/tap_tubewarmth.c index 42a0db495..2af30437c 100644 --- a/plugins/LadspaEffect/tap/tap_tubewarmth.c +++ b/plugins/LadspaEffect/tap/tap_tubewarmth.c @@ -381,10 +381,10 @@ LADSPA_Descriptor * mono_descriptor = NULL; -/* _init() is called automatically when the plugin library is first +/* __attribute__((constructor)) tap_init() is called automatically when the plugin library is first loaded. */ void - _init() { +__attribute__((constructor)) tap_init() { char ** port_names; LADSPA_PortDescriptor * port_descriptors; @@ -471,9 +471,9 @@ delete_descriptor(LADSPA_Descriptor * descriptor) { } -/* _fini() is called automatically when the library is unloaded. */ +/* __attribute__((destructor)) tap_fini() is called automatically when the library is unloaded. */ void - _fini() { +__attribute__((destructor)) tap_fini() { delete_descriptor(mono_descriptor); } diff --git a/plugins/LadspaEffect/tap/tap_vibrato.c b/plugins/LadspaEffect/tap/tap_vibrato.c index 40d14541e..c95035a93 100644 --- a/plugins/LadspaEffect/tap/tap_vibrato.c +++ b/plugins/LadspaEffect/tap/tap_vibrato.c @@ -308,10 +308,10 @@ LADSPA_Descriptor * mono_descriptor = NULL; -/* _init() is called automatically when the plugin library is first +/* __attribute__((constructor)) tap_init() is called automatically when the plugin library is first loaded. */ void -_init() { +__attribute__((constructor)) tap_init() { int i; char ** port_names; @@ -425,9 +425,9 @@ delete_descriptor(LADSPA_Descriptor * descriptor) { } -/* _fini() is called automatically when the library is unloaded. */ +/* __attribute__((destructor)) tap_fini() is called automatically when the library is unloaded. */ void -_fini() { +__attribute__((destructor)) tap_fini() { delete_descriptor(mono_descriptor); } From 059ddc2875651509178043f185ec4a5fec14cb61 Mon Sep 17 00:00:00 2001 From: Tobias Doerffel Date: Thu, 1 May 2014 23:55:19 +0200 Subject: [PATCH 15/55] CMake/FindWine: search for wineg++ executable Instead of relying on wineg++ being in PATH search for it as it might reside somewhere else. --- cmake/modules/FindWine.cmake | 1 + plugins/vst_base/CMakeLists.txt | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/cmake/modules/FindWine.cmake b/cmake/modules/FindWine.cmake index 520266ad8..a665a46e2 100644 --- a/cmake/modules/FindWine.cmake +++ b/cmake/modules/FindWine.cmake @@ -9,6 +9,7 @@ FIND_PATH(WINE_INCLUDE_DIR windows/windows.h PATH_SUFFIXES wine) FIND_LIBRARY(WINE_LIBRARY NAMES wine PATH_SUFFIXES wine) +FIND_PROGRAM(WINE_CXX NAMES wineg++) set(WINE_INCLUDE_DIRS ${WINE_INCLUDE_DIR} ) set(WINE_LIBRARIES ${WINE_LIBRARY} ) diff --git a/plugins/vst_base/CMakeLists.txt b/plugins/vst_base/CMakeLists.txt index a313ccdba..750ca9022 100644 --- a/plugins/vst_base/CMakeLists.txt +++ b/plugins/vst_base/CMakeLists.txt @@ -26,7 +26,7 @@ IF(LMMS_HOST_X86_64) SET(EXTRA_FLAGS -m32) # workaround for broken wineg++ in WINE 1.4 (shipped e.g. with Ubuntu Precise) - EXEC_PROGRAM( wineg++ ARGS "-v -m32 /dev/zero" OUTPUT_VARIABLE WINEBUILD_OUTPUT) + EXEC_PROGRAM( ${WINE_CXX} ARGS "-v -m32 /dev/zero" OUTPUT_VARIABLE WINEBUILD_OUTPUT) if("${WINEBUILD_OUTPUT}" MATCHES ".*x86_64-linux-gnu/wine/libwinecrt0.a.*") SET(EXTRA_FLAGS ${EXTRA_FLAGS} -nodefaultlibs /usr/lib/i386-linux-gnu/wine/libwinecrt0.a -luser32 -lkernel32 -lgdi32) ENDIF() @@ -34,7 +34,7 @@ ENDIF(LMMS_HOST_X86_64) ADD_CUSTOM_COMMAND( SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/RemoteVstPlugin.cpp" - COMMAND wineg++ + COMMAND ${WINE_CXX} ARGS "-I\"${CMAKE_BINARY_DIR}\"" "-I\"${CMAKE_SOURCE_DIR}/include\"" "-I\"${CMAKE_INSTALL_PREFIX}/include/wine/windows\"" "-I\"${CMAKE_INSTALL_PREFIX}/include\"" -I/usr/include/wine/windows "\"${CMAKE_CURRENT_SOURCE_DIR}/RemoteVstPlugin.cpp\"" -mwindows -lpthread ${EXTRA_FLAGS} -o RemoteVstPlugin COMMAND find -name RemoteVstPlugin.exe -exec mv "'{}'" RemoteVstPlugin "';'" TARGET vstbase From 8fb260317b4fff309f5cc9d049b985136c9d9106 Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Thu, 1 May 2014 19:37:37 -0700 Subject: [PATCH 16/55] Create mimetype for mmp,mmpz Using Info.plist, register the mmp and mmpz mimetypes with the LMMS application. --- data/scripts/create_apple_installer.sh | 83 ++++++++++++++++++-------- 1 file changed, 58 insertions(+), 25 deletions(-) diff --git a/data/scripts/create_apple_installer.sh b/data/scripts/create_apple_installer.sh index 1211dd8a5..17fb1eecf 100755 --- a/data/scripts/create_apple_installer.sh +++ b/data/scripts/create_apple_installer.sh @@ -9,7 +9,7 @@ #notes :Troubleshooting try: export DYLD_PRINT_LIBRARIES=1 #requires :deploymacqt #========================================================================================= - + # MacPorts Location MACPORTS=/opt/local @@ -18,24 +18,24 @@ CMAKE_SRC=$HOME/lmms # LMMS compiled resources CMAKE_INSTALL=$CMAKE_SRC/target - + # LMMS source build directory CMAKE_BUILD=$CMAKE_SRC/build - + # STK rawwaves directory STK_RAWWAVE=$HOME/stk-*/rawwaves - - + + # Place to create ".app" bundle APP=$HOME/Desktop/LMMS.app - + # MacPorts installs libreadline with wrong permissions LIBREADLINE=$MACPORTS/lib/libreadline.6.2.dylib - + #========================================================================================= - + echo -e "\n\nRunning..." - + # Check for u+w permissions on libreadline _perm=`stat -f "%p" $LIBREADLINE` _perm=${_perm:3:1} @@ -48,29 +48,29 @@ then echo -e "\nPLEASE ENTER SUDO PASSWORD:" sudo chmod u+w $MACPORTS/lib/libreadline.6.2.dylib fi - + # Remove any old .app bundles rm -Rf $APP - + # Create new bundle, copy our built code to it mkdir -p $APP cd $CMAKE_INSTALL mkdir $APP/Contents cp -R * $APP/Contents - + # Manually copy STK rawwaves mkdir -p $APP/Contents/share/stk/rawwaves cp $STK_RAWWAVE/*.raw $APP/Contents/share/stk/rawwaves - + # Make all libraries writable for macdeployqt cd $APP find . -type f -print0 | xargs -0 chmod u+w - + # Move lmms binary to the proper location mkdir -p $APP/Contents/MacOS mv $APP/Contents/bin/lmms $APP/Contents/MacOS rm -rf $APP/Contents/bin - + # Move libraries to proper locations mkdir -p $APP/Contents/Frameworks mv $APP/Contents/lib/lmms/libZynAddSubFxCore.dylib \ @@ -78,25 +78,25 @@ mv $APP/Contents/lib/lmms/libZynAddSubFxCore.dylib \ mv $APP/Contents/lib/lmms/RemoteZynAddSubFx \ $APP/Contents/MacOS/RemoteZynAddSubFx - + # Fix more Zyn Linking issues # install_name_tool -change $CMAKE_INSTALL/lib/lmms/libZynAddSubFxCore.dylib \ # @loader_path/../../Frameworks/libZynAddSubFxCore.dylib \ # $APP/Contents/lib/lmms/libzynaddsubfx.so - + install_name_tool -change libZynAddSubFxCore.dylib \ @loader_path/../../Frameworks/libZynAddSubFxCore.dylib \ $APP/Contents/lib/lmms/libzynaddsubfx.so - + install_name_tool -change $CMAKE_BUILD/plugins/zynaddsubfx/libZynAddSubFxCore.dylib \ @loader_path/../../Frameworks/libZynAddSubFxCore.dylib \ $APP/Contents/MacOS/RemoteZynAddSubFx - + # Build a list of shared objects in target/lib/lmms for file in $APP/Contents/lib/lmms/*.so; do _executables="$_executables -executable=$APP/Contents/lib/lmms/${file##*/}" done - + # Build a list of shared objects in target/lib/lmms/ladspa for file in $APP/Contents/lib/lmms/ladspa/*.so; do _executables="$_executables -executable=$APP/Contents/lib/lmms/ladspa/${file##*/}" @@ -105,24 +105,57 @@ done # Additional binaries that require linking _executables="$_executables -executable=$APP/Contents/MacOS/RemoteZynAddSubFx" _executables="$_executables -executable=$APP/Contents/Frameworks/libZynAddSubFxCore.dylib" - + # Build our App Package using "macdeployqt" macdeployqt $APP $_executables - + # OS X Specific Artwork cp $CMAKE_SRC/data/lmms.icns $APP/Contents/Resources/ - + # Create "Info.plist" using lmms.icns file, http://iconverticons.com/online/) echo -e "" > "$APP/Contents/Info.plist" echo -e "> "$APP/Contents/Info.plist" echo -e "\"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">" >> "$APP/Contents/Info.plist" -echo -e " " >> "$APP/Contents/Info.plist" +echo -e "" >> "$APP/Contents/Info.plist" echo -e " " >> "$APP/Contents/Info.plist" echo -e " CFBundleIconFile" >> "$APP/Contents/Info.plist" echo -e " lmms.icns" >> "$APP/Contents/Info.plist" echo -e " " >> "$APP/Contents/Info.plist" +echo -e " " >> "$APP/Contents/Info.plist" +echo -e " CFBundleTypeExtensions" >> "$APP/Contents/Info.plist" +echo -e " " >> "$APP/Contents/Info.plist" +echo -e " mmpz" >> "$APP/Contents/Info.plist" +echo -e " " >> "$APP/Contents/Info.plist" +echo -e " CFBundleTypeIconFile" >> "$APP/Contents/Info.plist" +echo -e " project.icns" >> "$APP/Contents/Info.plist" +echo -e " CFBundleTypeMIMETypes" >> "$APP/Contents/Info.plist" +echo -e " " >> "$APP/Contents/Info.plist" +echo -e " application/x-lmms-project" >> "$APP/Contents/Info.plist" +echo -e " " >> "$APP/Contents/Info.plist" +echo -e " CFBundleTypeName" >> "$APP/Contents/Info.plist" +echo -e " LMMS Project" >> "$APP/Contents/Info.plist" +echo -e " CFBundleTypeRole" >> "$APP/Contents/Info.plist" +echo -e " Editor" >> "$APP/Contents/Info.plist" +echo -e " LSIsAppleDefaultForType " >> "$APP/Contents/Info.plist" +echo -e " " >> "$APP/Contents/Info.plist" +echo -e " " >> "$APP/Contents/Info.plist" +echo -e " CFBundleTypeExtensions" >> "$APP/Contents/Info.plist" +echo -e " " >> "$APP/Contents/Info.plist" +echo -e " mmp" >> "$APP/Contents/Info.plist" +echo -e " " >> "$APP/Contents/Info.plist" +echo -e " CFBundleTypeIconFile" >> "$APP/Contents/Info.plist" +echo -e " project.icns" >> "$APP/Contents/Info.plist" +echo -e " CFBundleTypeMIMETypes" >> "$APP/Contents/Info.plist" +echo -e " " >> "$APP/Contents/Info.plist" +echo -e " application/x-lmms-project" >> "$APP/Contents/Info.plist" +echo -e " " >> "$APP/Contents/Info.plist" +echo -e " CFBundleTypeName" >> "$APP/Contents/Info.plist" +echo -e " LMMS Project" >> "$APP/Contents/Info.plist" +echo -e " CFBundleTypeRole" >> "$APP/Contents/Info.plist" +echo -e " Editor" >> "$APP/Contents/Info.plist" +echo -e " " >> "$APP/Contents/Info.plist" echo -e "" >> "$APP/Contents/Info.plist" - + # Done. Ready to build DMG echo -e "\nFinished.\n\nPlease run \"create_apple_dmg.sh\" from the Desktop to build the installer.\n" echo -e "Note: You can drag/drop it into this terminal window.)\n" From 2835c997832d622351fe359eff78bd3cf5db075d Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Thu, 1 May 2014 22:44:25 -0400 Subject: [PATCH 17/55] Mimetype icon, Apple formatted --- data/project.icns | Bin 0 -> 205223 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 data/project.icns diff --git a/data/project.icns b/data/project.icns new file mode 100644 index 0000000000000000000000000000000000000000..930afc21792261e98e5cbe92e188be8b27684a16 GIT binary patch literal 205223 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%0D5W){wgRdp&dqTNCGMMGNn6_YbFhuI{b`cd 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 literal 0 HcmV?d00001 From d0c072b37267f5c89d0bef6fb9cbf31d345cf2af Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Thu, 1 May 2014 19:48:16 -0700 Subject: [PATCH 18/55] Copy project.icns to Resources directory --- data/scripts/create_apple_installer.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/data/scripts/create_apple_installer.sh b/data/scripts/create_apple_installer.sh index 17fb1eecf..7836ca749 100755 --- a/data/scripts/create_apple_installer.sh +++ b/data/scripts/create_apple_installer.sh @@ -111,6 +111,7 @@ macdeployqt $APP $_executables # OS X Specific Artwork cp $CMAKE_SRC/data/lmms.icns $APP/Contents/Resources/ +cp $CMAKE_SRC/data/project.icns $APP/Contents/Resources/ # Create "Info.plist" using lmms.icns file, http://iconverticons.com/online/) echo -e "" > "$APP/Contents/Info.plist" From e2c3e657673c588e85d5918a6ebe4bdf38c8264c Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Thu, 1 May 2014 22:13:14 -0700 Subject: [PATCH 19/55] Clang comp. fix unnecessary else --- plugins/LadspaEffect/swh/util/waveguide_nl.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/plugins/LadspaEffect/swh/util/waveguide_nl.h b/plugins/LadspaEffect/swh/util/waveguide_nl.h index 64a322278..398518eb0 100644 --- a/plugins/LadspaEffect/swh/util/waveguide_nl.h +++ b/plugins/LadspaEffect/swh/util/waveguide_nl.h @@ -115,7 +115,8 @@ inline void waveguide_nl_process(waveguide_nl *wg, float in0, float in1, float * b = (*out0 + 1.0) * 6.0f; if (b > 1.0f) { b = 1.0f; - } else if (b < 0.0f) { + } + if (b < 0.0f) { b = 0.0f; } a1 = b * wg->a1a + (1.0f - b) * wg->a1b; @@ -129,7 +130,8 @@ inline void waveguide_nl_process(waveguide_nl *wg, float in0, float in1, float * b = (*out1 + 1.0) * 6.0f; if (b > 1.0f) { b = 1.0f; - } else if (b < 0.0f) { + } + if (b < 0.0f) { b = 0.0f; } a1 = b * wg->a1a + (1.0f - b) * wg->a1b; From a5d773cfce14b07ec82ba1359b867b6ff7fe402e Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Thu, 1 May 2014 22:15:23 -0700 Subject: [PATCH 20/55] Re-enabled SWH for Apple --- CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 619344045..2b63f2e44 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -47,7 +47,6 @@ OPTION(WANT_WINMM "Include WinMM MIDI support" OFF) IF(LMMS_BUILD_APPLE) SET(WANT_ALSA OFF) SET(WANT_PULSEAUDIO OFF) - SET(WANT_SWH OFF) SET(WANT_VST OFF) SET(STATUS_ALSA "") SET(STATUS_PULSEAUDIO "") From 96e41491adde583c2cc192ad379b0144c49f4936 Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Fri, 2 May 2014 10:51:42 -0700 Subject: [PATCH 21/55] Fix incorrect C99 loop declaration --- plugins/LadspaEffect/swh/imp_1199.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/plugins/LadspaEffect/swh/imp_1199.c b/plugins/LadspaEffect/swh/imp_1199.c index 599bedb81..f392ef8b4 100644 --- a/plugins/LadspaEffect/swh/imp_1199.c +++ b/plugins/LadspaEffect/swh/imp_1199.c @@ -99,8 +99,10 @@ inline void impulse2freq(int id, float *imp, unsigned int length, fftw_real *out for (i=0; i=last) impulse_time[i] = 0.0f; } #ifdef FFTW3 fftwf_execute(tmp_plan); From 3d95f82f30f0a2315b80d6615abcaf29d699181c Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Fri, 2 May 2014 14:01:59 -0700 Subject: [PATCH 22/55] Remove inline function recursion for Apple q_sort is an inline function which recurses upon itself. Some compilers such as MSVC limit this which can be overridden with a parameter. Since I could find no such parameter for clang, this #IFDEF allows the sifter plugin to compile successfully. If this approach has negative side effects, it should only affect apple. If there's a better approach to this, please reject the pull request and submit your own. --- plugins/LadspaEffect/swh/sifter_1210.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plugins/LadspaEffect/swh/sifter_1210.c b/plugins/LadspaEffect/swh/sifter_1210.c index 891e56ee1..8650da084 100644 --- a/plugins/LadspaEffect/swh/sifter_1210.c +++ b/plugins/LadspaEffect/swh/sifter_1210.c @@ -33,7 +33,11 @@ void _init(); // forward declaration inline int partition(LADSPA_Data array[], int left, int right); +#ifdef LMMS_BUILD_APPLE +void q_sort(LADSPA_Data array[], int left, int right) { +#else inline void q_sort(LADSPA_Data array[], int left, int right) { +#endif float pivot = partition(array, left, right); if (left < pivot) { From 19130e5fce911232ab20b3f87d0bf3f16c73548a Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Sat, 3 May 2014 09:00:32 -0700 Subject: [PATCH 23/55] Apple specific build path Remove another offending inline function declaration for Apple compat. --- plugins/LadspaEffect/swh/impulses/all.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plugins/LadspaEffect/swh/impulses/all.h b/plugins/LadspaEffect/swh/impulses/all.h index cf597bfeb..bc79a8755 100644 --- a/plugins/LadspaEffect/swh/impulses/all.h +++ b/plugins/LadspaEffect/swh/impulses/all.h @@ -24,7 +24,11 @@ #include "impulses/20-matchless-chieftain-sm57.h" #include "impulses/21-matchless-chieftain-sm57-off.h" +#ifdef LMMS_BULD_APPLE +void mk_imps(fftw_real **impulse_freq) +#else inline void mk_imps(fftw_real **impulse_freq) +#endif { int c = 0; MK_IMP(unit); From ae67c792fe9bd18bc709f448fab754aceff951de Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Sat, 3 May 2014 09:30:15 -0700 Subject: [PATCH 24/55] Remove inline function declaration for Apple Typo :) --- plugins/LadspaEffect/swh/impulses/all.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/LadspaEffect/swh/impulses/all.h b/plugins/LadspaEffect/swh/impulses/all.h index bc79a8755..5ea04fc6a 100644 --- a/plugins/LadspaEffect/swh/impulses/all.h +++ b/plugins/LadspaEffect/swh/impulses/all.h @@ -24,7 +24,7 @@ #include "impulses/20-matchless-chieftain-sm57.h" #include "impulses/21-matchless-chieftain-sm57-off.h" -#ifdef LMMS_BULD_APPLE +#ifdef LMMS_BUILD_APPLE void mk_imps(fftw_real **impulse_freq) #else inline void mk_imps(fftw_real **impulse_freq) From b0ffa4501151d1cf01dd129a9cd6341093387d9b Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Sat, 3 May 2014 11:34:16 -0700 Subject: [PATCH 25/55] Include lmmsconfig.h for OS #ifdef --- plugins/LadspaEffect/swh/impulses/all.h | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/LadspaEffect/swh/impulses/all.h b/plugins/LadspaEffect/swh/impulses/all.h index 5ea04fc6a..b6f2c0346 100644 --- a/plugins/LadspaEffect/swh/impulses/all.h +++ b/plugins/LadspaEffect/swh/impulses/all.h @@ -2,6 +2,7 @@ #define IMPULSES 21 +#include "lmmsconfig.h" #include "impulses/01-unit.h" #include "impulses/02-steves-flat.h" #include "impulses/03-stk-m1.h" From b987d3ed04210930f5958bf301f77376c799391b Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Sat, 3 May 2014 11:44:58 -0700 Subject: [PATCH 26/55] Replace LMMS_BULD_APPLE with __clang__ --- plugins/LadspaEffect/swh/impulses/all.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/plugins/LadspaEffect/swh/impulses/all.h b/plugins/LadspaEffect/swh/impulses/all.h index b6f2c0346..3355f327f 100644 --- a/plugins/LadspaEffect/swh/impulses/all.h +++ b/plugins/LadspaEffect/swh/impulses/all.h @@ -2,7 +2,6 @@ #define IMPULSES 21 -#include "lmmsconfig.h" #include "impulses/01-unit.h" #include "impulses/02-steves-flat.h" #include "impulses/03-stk-m1.h" @@ -25,7 +24,7 @@ #include "impulses/20-matchless-chieftain-sm57.h" #include "impulses/21-matchless-chieftain-sm57-off.h" -#ifdef LMMS_BUILD_APPLE +#ifdef __clang__ void mk_imps(fftw_real **impulse_freq) #else inline void mk_imps(fftw_real **impulse_freq) From a80dbd67e4ffc0fab6ea2a163205f69aa03dfc7f Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Sat, 3 May 2014 11:46:02 -0700 Subject: [PATCH 27/55] Replace LMMS_BULD_APPLE with __clang__ --- plugins/LadspaEffect/swh/sifter_1210.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/LadspaEffect/swh/sifter_1210.c b/plugins/LadspaEffect/swh/sifter_1210.c index 8650da084..06184ab40 100644 --- a/plugins/LadspaEffect/swh/sifter_1210.c +++ b/plugins/LadspaEffect/swh/sifter_1210.c @@ -33,7 +33,7 @@ void _init(); // forward declaration inline int partition(LADSPA_Data array[], int left, int right); -#ifdef LMMS_BUILD_APPLE +#ifdef __clang__ void q_sort(LADSPA_Data array[], int left, int right) { #else inline void q_sort(LADSPA_Data array[], int left, int right) { From 55217ac637b1eb775ec675d46e088ecb21317ae6 Mon Sep 17 00:00:00 2001 From: Tobias Doerffel Date: Sat, 3 May 2014 21:55:23 +0200 Subject: [PATCH 28/55] Made 1.0.2 release This is a maintenance release of the 1.0.x series. Bumped version number to 1.0.2 in CMakeLists.txt, README and lmms.rc.in. --- CMakeLists.txt | 2 +- README | 2 +- lmms.rc.in | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 211209393..55c79a8ff 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,7 +15,7 @@ INCLUDE(FindPkgConfig) SET(VERSION_MAJOR "1") SET(VERSION_MINOR "0") -SET(VERSION_PATCH "1") +SET(VERSION_PATCH "2") #SET(VERSION_SUFFIX "") SET(VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}") IF(VERSION_SUFFIX) diff --git a/README b/README index f256df665..65f60c8e6 100644 --- a/README +++ b/README @@ -1,4 +1,4 @@ -LMMS 1.0.1 +LMMS 1.0.2 =========== Copyright (c) 2004-2014 by LMMS developers diff --git a/lmms.rc.in b/lmms.rc.in index 0cf6c17c6..620a7dfd5 100644 --- a/lmms.rc.in +++ b/lmms.rc.in @@ -2,7 +2,7 @@ lmmsicon ICON data/lmms.ico #include VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,0,1,0 + FILEVERSION 1,0,2,0 FILEFLAGSMASK VS_FFI_FILEFLAGSMASK FILEOS VOS_NT_WINDOWS32 FILETYPE VFT_APP From de89f683afe5a8cc7e2d4b0e46f08fc5f3c25ad1 Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Sun, 4 May 2014 00:46:26 -0400 Subject: [PATCH 29/55] Rename apple scripts for automatic configure Renamed from create_apple_x.sh to create_apple_x.sh.in Changed vars to use CMake @PARAMS@ --- data/scripts/create_apple_bundle.sh.in | 123 +++++++++++++ ...te_apple_dmg.sh => create_apple_dmg.sh.in} | 6 +- data/scripts/create_apple_installer.sh | 164 ------------------ 3 files changed, 126 insertions(+), 167 deletions(-) create mode 100644 data/scripts/create_apple_bundle.sh.in rename data/scripts/{create_apple_dmg.sh => create_apple_dmg.sh.in} (97%) mode change 100755 => 100644 delete mode 100755 data/scripts/create_apple_installer.sh diff --git a/data/scripts/create_apple_bundle.sh.in b/data/scripts/create_apple_bundle.sh.in new file mode 100644 index 000000000..fa6df3454 --- /dev/null +++ b/data/scripts/create_apple_bundle.sh.in @@ -0,0 +1,123 @@ +#!/bin/bash +#title :create_applet_installer.sh +#description :Creates Apple ".app" bundle for LMMS +#author :Tres Finocchiaro +#date :20140331 +#version :1.0 +#usage :bash create_applet_installer.sh +#notes :See also https://github.com/LMMS +#notes :Troubleshooting try: export DYLD_PRINT_LIBRARIES=1 +#requires :deploymacqt +#========================================================================================= + +# MacPorts Location +MACPORTS=/opt/local + + # LMMS project root directory (extracted source) +CMAKE_SRC=@CMAKE_SOURCE_DIR@ + +# LMMS compiled (install) resources +CMAKE_INSTALL=@CMAKE_INSTALL_PREFIX@ + +# LMMS working build directory +CMAKE_BUILD=@CMAKE_CURRENT_BINARY_DIR@ + +# STK rawwaves directory +STK_RAWWAVE=$HOME/stk-*/rawwaves + + +# Place to create ".app" bundle +APP=$HOME/Desktop/LMMS.app + +# MacPorts installs libreadline with wrong permissions +LIBREADLINE=$MACPORTS/lib/libreadline.6.2.dylib + +#========================================================================================= + +echo -e "\n\nRunning..." + +# Check for u+w permissions on libreadline +_perm=`stat -f "%p" $LIBREADLINE` +_perm=${_perm:3:1} +if [ ${_perm} != "7" ] +then + echo -e "\n\n\t\t\t\t***********\n\t\t\t\t* WARNING *\n\t\t\t\t***********" + echo -e "File $LIBREADLINE is not marked as user writable." + echo -e "This will break macdeployqt's linking process after it is copied." + echo -e "A sudo password is required to elevate and fix using chmod u+w." + echo -e "\nPLEASE ENTER SUDO PASSWORD:" + sudo chmod u+w "$MACPORTS/lib/libreadline.6.2.dylib" +fi + +# Remove any old .app bundles +rm -Rf "$APP" + +# Create new bundle, copy our built code to it +mkdir -p "$APP" +cd "$CMAKE_INSTALL" +mkdir "$APP/Contents" +cp -R * "$APP/Contents" + +# Manually copy STK rawwaves +mkdir -p "$APP/Contents/share/stk/rawwaves" +cp "$STK_RAWWAVE/*.raw" "$APP/Contents/share/stk/rawwaves" + +# Make all libraries writable for macdeployqt +cd "$APP" +find . -type f -print0 | xargs -0 chmod u+w + +# Move lmms binary to the proper location +mkdir -p "$APP/Contents/MacOS" +mv "$APP/Contents/bin/lmms" "$APP/Contents/MacOS" +rm -rf "$APP/Contents/bin" + +# Move libraries to proper locations +mkdir -p "$APP/Contents/Frameworks" +mv "$APP/Contents/lib/lmms/libZynAddSubFxCore.dylib" \ + "$APP/Contents/Frameworks/libZynAddSubFxCore.dylib" + +mv "$APP/Contents/lib/lmms/RemoteZynAddSubFx" \ + "$APP/Contents/MacOS/RemoteZynAddSubFx" + +# Fix more Zyn Linking issues +# install_name_tool -change $CMAKE_INSTALL/lib/lmms/libZynAddSubFxCore.dylib \ +# @loader_path/../../Frameworks/libZynAddSubFxCore.dylib \ +# $APP/Contents/lib/lmms/libzynaddsubfx.so + +install_name_tool -change libZynAddSubFxCore.dylib \ + @loader_path/../../Frameworks/libZynAddSubFxCore.dylib \ + "$APP/Contents/lib/lmms/libzynaddsubfx.so" + +install_name_tool -change "$CMAKE_BUILD/plugins/zynaddsubfx/libZynAddSubFxCore.dylib" \ + @loader_path/../../Frameworks/libZynAddSubFxCore.dylib \ + "$APP/Contents/MacOS/RemoteZynAddSubFx" + +# Build a list of shared objects in target/lib/lmms +for file in "$APP/Contents/lib/lmms/*.so"; do + _executables="$_executables -executable=\"$APP/Contents/lib/lmms/${file##*/}\"" +done + +# Build a list of shared objects in target/lib/lmms/ladspa +for file in "$APP/Contents/lib/lmms/ladspa/*.so"; do + _executables="$_executables -executable=\"$APP/Contents/lib/lmms/ladspa/${file##*/}\"" +done + +# Additional binaries that require linking +_executables="$_executables -executable=\"$APP/Contents/MacOS/RemoteZynAddSubFx\"" +_executables="$_executables -executable=\"$APP/Contents/Frameworks/libZynAddSubFxCore.dylib\"" + +# Build our App Package using "macdeployqt" +macdeployqt "$APP" $_executables + +# OS X Specific Artwork +cp "$CMAKE_SRC/data/lmms.icns" "$APP/Contents/Resources/" +cp "$CMAKE_SRC/data/project.icns" "$APP/Contents/Resources/" + +# Copy "Info.plist" into bundle +cp "$CMAKE_BUILD/Info.plist" "$APP/Contents/Info.plist" + +# Done. Ready to build DMG +echo -e "\nFinished.\n\nPlease run \"create_apple_dmg.sh\" from the Desktop to build the installer.\n" +echo -e "Note: You can drag/drop it into this terminal window.)\n" +cp "CMAKE_INSTALL/create_apple_dmg.sh" "$HOME/Desktop/" +chmod +x "$HOME/Desktop/create_apple_dmg.sh" diff --git a/data/scripts/create_apple_dmg.sh b/data/scripts/create_apple_dmg.sh.in old mode 100755 new mode 100644 similarity index 97% rename from data/scripts/create_apple_dmg.sh rename to data/scripts/create_apple_dmg.sh.in index be50c2b81..0116f1f69 --- a/data/scripts/create_apple_dmg.sh +++ b/data/scripts/create_apple_dmg.sh.in @@ -10,10 +10,10 @@ if [ -d "$dir" ]; then fi # set up your app name, version number, and background image file name -APP_NAME="LMMS" -VERSION="1.0.0" +APP_NAME="@MACOSX_BUNDLE_BUNDLE_NAME@" +VERSION="@MACOSX_BUNDLE_LONG_VERSION@" DMG_BACKGROUND_IMG="dmg_branding.png" -cp $HOME/lmms/data/$DMG_BACKGROUND_IMG . +cp "@CMAKE_INSTALL_PREFIX@/data/$DMG_BACKGROUND_IMG" . # you should not need to change these APP_LOWERCASE=$(echo $APP_NAME|tr '[:upper:]' '[:lower:]') diff --git a/data/scripts/create_apple_installer.sh b/data/scripts/create_apple_installer.sh deleted file mode 100755 index 7836ca749..000000000 --- a/data/scripts/create_apple_installer.sh +++ /dev/null @@ -1,164 +0,0 @@ -#!/bin/bash -#title :create_applet_installer.sh -#description :Creates Apple ".app" bundle for LMMS -#author :Tres Finocchiaro -#date :20140331 -#version :1.0 -#usage :bash create_applet_installer.sh -#notes :See also https://github.com/LMMS -#notes :Troubleshooting try: export DYLD_PRINT_LIBRARIES=1 -#requires :deploymacqt -#========================================================================================= - -# MacPorts Location -MACPORTS=/opt/local - - # LMMS source directory -CMAKE_SRC=$HOME/lmms - -# LMMS compiled resources -CMAKE_INSTALL=$CMAKE_SRC/target - -# LMMS source build directory -CMAKE_BUILD=$CMAKE_SRC/build - -# STK rawwaves directory -STK_RAWWAVE=$HOME/stk-*/rawwaves - - -# Place to create ".app" bundle -APP=$HOME/Desktop/LMMS.app - -# MacPorts installs libreadline with wrong permissions -LIBREADLINE=$MACPORTS/lib/libreadline.6.2.dylib - -#========================================================================================= - -echo -e "\n\nRunning..." - -# Check for u+w permissions on libreadline -_perm=`stat -f "%p" $LIBREADLINE` -_perm=${_perm:3:1} -if [ ${_perm} != "7" ] -then - echo -e "\n\n\t\t\t\t***********\n\t\t\t\t* WARNING *\n\t\t\t\t***********" - echo -e "File $LIBREADLINE is not marked as user writable." - echo -e "This will break macdeployqt's linking process after it is copied." - echo -e "A sudo password is required to elevate and fix using chmod u+w." - echo -e "\nPLEASE ENTER SUDO PASSWORD:" - sudo chmod u+w $MACPORTS/lib/libreadline.6.2.dylib -fi - -# Remove any old .app bundles -rm -Rf $APP - -# Create new bundle, copy our built code to it -mkdir -p $APP -cd $CMAKE_INSTALL -mkdir $APP/Contents -cp -R * $APP/Contents - -# Manually copy STK rawwaves -mkdir -p $APP/Contents/share/stk/rawwaves -cp $STK_RAWWAVE/*.raw $APP/Contents/share/stk/rawwaves - -# Make all libraries writable for macdeployqt -cd $APP -find . -type f -print0 | xargs -0 chmod u+w - -# Move lmms binary to the proper location -mkdir -p $APP/Contents/MacOS -mv $APP/Contents/bin/lmms $APP/Contents/MacOS -rm -rf $APP/Contents/bin - -# Move libraries to proper locations -mkdir -p $APP/Contents/Frameworks -mv $APP/Contents/lib/lmms/libZynAddSubFxCore.dylib \ - $APP/Contents/Frameworks/libZynAddSubFxCore.dylib - -mv $APP/Contents/lib/lmms/RemoteZynAddSubFx \ - $APP/Contents/MacOS/RemoteZynAddSubFx - -# Fix more Zyn Linking issues -# install_name_tool -change $CMAKE_INSTALL/lib/lmms/libZynAddSubFxCore.dylib \ -# @loader_path/../../Frameworks/libZynAddSubFxCore.dylib \ -# $APP/Contents/lib/lmms/libzynaddsubfx.so - -install_name_tool -change libZynAddSubFxCore.dylib \ - @loader_path/../../Frameworks/libZynAddSubFxCore.dylib \ - $APP/Contents/lib/lmms/libzynaddsubfx.so - -install_name_tool -change $CMAKE_BUILD/plugins/zynaddsubfx/libZynAddSubFxCore.dylib \ - @loader_path/../../Frameworks/libZynAddSubFxCore.dylib \ - $APP/Contents/MacOS/RemoteZynAddSubFx - -# Build a list of shared objects in target/lib/lmms -for file in $APP/Contents/lib/lmms/*.so; do - _executables="$_executables -executable=$APP/Contents/lib/lmms/${file##*/}" -done - -# Build a list of shared objects in target/lib/lmms/ladspa -for file in $APP/Contents/lib/lmms/ladspa/*.so; do - _executables="$_executables -executable=$APP/Contents/lib/lmms/ladspa/${file##*/}" -done - -# Additional binaries that require linking -_executables="$_executables -executable=$APP/Contents/MacOS/RemoteZynAddSubFx" -_executables="$_executables -executable=$APP/Contents/Frameworks/libZynAddSubFxCore.dylib" - -# Build our App Package using "macdeployqt" -macdeployqt $APP $_executables - -# OS X Specific Artwork -cp $CMAKE_SRC/data/lmms.icns $APP/Contents/Resources/ -cp $CMAKE_SRC/data/project.icns $APP/Contents/Resources/ - -# Create "Info.plist" using lmms.icns file, http://iconverticons.com/online/) -echo -e "" > "$APP/Contents/Info.plist" -echo -e "> "$APP/Contents/Info.plist" -echo -e "\"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">" >> "$APP/Contents/Info.plist" -echo -e "" >> "$APP/Contents/Info.plist" -echo -e " " >> "$APP/Contents/Info.plist" -echo -e " CFBundleIconFile" >> "$APP/Contents/Info.plist" -echo -e " lmms.icns" >> "$APP/Contents/Info.plist" -echo -e " " >> "$APP/Contents/Info.plist" -echo -e " " >> "$APP/Contents/Info.plist" -echo -e " CFBundleTypeExtensions" >> "$APP/Contents/Info.plist" -echo -e " " >> "$APP/Contents/Info.plist" -echo -e " mmpz" >> "$APP/Contents/Info.plist" -echo -e " " >> "$APP/Contents/Info.plist" -echo -e " CFBundleTypeIconFile" >> "$APP/Contents/Info.plist" -echo -e " project.icns" >> "$APP/Contents/Info.plist" -echo -e " CFBundleTypeMIMETypes" >> "$APP/Contents/Info.plist" -echo -e " " >> "$APP/Contents/Info.plist" -echo -e " application/x-lmms-project" >> "$APP/Contents/Info.plist" -echo -e " " >> "$APP/Contents/Info.plist" -echo -e " CFBundleTypeName" >> "$APP/Contents/Info.plist" -echo -e " LMMS Project" >> "$APP/Contents/Info.plist" -echo -e " CFBundleTypeRole" >> "$APP/Contents/Info.plist" -echo -e " Editor" >> "$APP/Contents/Info.plist" -echo -e " LSIsAppleDefaultForType " >> "$APP/Contents/Info.plist" -echo -e " " >> "$APP/Contents/Info.plist" -echo -e " " >> "$APP/Contents/Info.plist" -echo -e " CFBundleTypeExtensions" >> "$APP/Contents/Info.plist" -echo -e " " >> "$APP/Contents/Info.plist" -echo -e " mmp" >> "$APP/Contents/Info.plist" -echo -e " " >> "$APP/Contents/Info.plist" -echo -e " CFBundleTypeIconFile" >> "$APP/Contents/Info.plist" -echo -e " project.icns" >> "$APP/Contents/Info.plist" -echo -e " CFBundleTypeMIMETypes" >> "$APP/Contents/Info.plist" -echo -e " " >> "$APP/Contents/Info.plist" -echo -e " application/x-lmms-project" >> "$APP/Contents/Info.plist" -echo -e " " >> "$APP/Contents/Info.plist" -echo -e " CFBundleTypeName" >> "$APP/Contents/Info.plist" -echo -e " LMMS Project" >> "$APP/Contents/Info.plist" -echo -e " CFBundleTypeRole" >> "$APP/Contents/Info.plist" -echo -e " Editor" >> "$APP/Contents/Info.plist" -echo -e " " >> "$APP/Contents/Info.plist" -echo -e "" >> "$APP/Contents/Info.plist" - -# Done. Ready to build DMG -echo -e "\nFinished.\n\nPlease run \"create_apple_dmg.sh\" from the Desktop to build the installer.\n" -echo -e "Note: You can drag/drop it into this terminal window.)\n" -cp $CMAKE_SRC/data/scripts/create_apple_dmg.sh $HOME/Desktop/ -chmod +x $HOME/Desktop/create_apple_dmg.sh From 245a223924162b83be4ec1f83cb795ce61caa38a Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Sun, 4 May 2014 00:49:09 -0400 Subject: [PATCH 30/55] Add/Fix Apple specific VARS for Bundle Added MIMETYPE, Changed ICON_FILE, dynamically builds shell scripts using CMake @VARS@ --- CMakeLists.txt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2b63f2e44..df603e3cc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -655,13 +655,19 @@ IF(WIN64) InstallDir \\\"\\\$PROGRAMFILES64\\\\${CPACK_PACKAGE_INSTALL_DIRECTORY}\\\"") ENDIF(WIN64) -SET(MACOSX_BUNDLE_ICON_FILE "${CMAKE_SOURCE_DIR}/data/themes/default/icon.png") +SET(MACOSX_BUNDLE_ICON_FILE "lmms.icns") SET(MACOSX_BUNDLE_GUI_IDENTIFIER "LMMS") SET(MACOSX_BUNDLE_LONG_VERSION_STRING "${VERSION}") SET(MACOSX_BUNDLE_BUNDLE_NAME "LMMS") SET(MACOSX_BUNDLE_SHORT_VERSION_STRING "${VERSION}") SET(MACOSX_BUNDLE_BUNDLE_VERSION "${VERSION}") SET(MACOSX_BUNDLE_COPYRIGHT "Tobias Doerffel, 2008-2010") +SET(MACOSX_BUNDLE_MIMETYPE "application/x-lmms-project") +#ifdef LMMS_BUILD_APPLE +CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/data/lmms.plist.in" "${CMAKE_INSTALL_PREFIX}/Info.plist") +CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/data/scripts/create_apple_bundle.sh.in" "${CMAKE_INSTALL_PREFIX}/create_apple_bundle.sh") +CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/data/scripts/create_apple_dmg.sh.in" "${CMAKE_INSTALL_PREFIX}/create_apple_dmg.sh") +#endif SET(CPACK_SOURCE_GENERATOR "TBZ2") SET(CPACK_SOURCE_PACKAGE_FILE_NAME "lmms-${VERSION}") From 3d274078ce8fc87262af63b0d3b251dea9ec2817 Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Sun, 4 May 2014 00:49:54 -0400 Subject: [PATCH 31/55] New Info.plist resource for Apple Bundle --- data/lmms.plist.in | 54 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 data/lmms.plist.in diff --git a/data/lmms.plist.in b/data/lmms.plist.in new file mode 100644 index 000000000..2d2834f40 --- /dev/null +++ b/data/lmms.plist.in @@ -0,0 +1,54 @@ + + + + + + CFBundleExecutable + @MACOSX_BUNDLE_GUI_IDENTIFIER@ + CFBundleGetInfoString + @MACOSX_BUNDLE_GUI_IDENTIFIER@ @MACOSX_BUNDLE_LONG_VERSION_STRING@ + CFBundleIdentifier + net.sourceforge.lmms + CFBundleIconFile + @MACOSX_BUNDLE_ICON_FILE@ + CFBundleName + @MACOSX_BUNDLE_BUNDLE_NAME@ + CFBundlePackageType + APPL + CFBundleDevelopmentRegion + English + CFBundleInfoDictionaryVersion + 6.0 + CFBundleVersion + @MACOSX_BUNDLE_LONG_VERSION_STRING@ + CFBundleDocumentTypes + + + CFBundleTypeExtensions + + mmp + MMP + mmpz + MMPZ + + LSItemContentTypes + + public.mmp + public.mmpz + + CFBundleTypeIconFile + project.icns + CFBundleTypeName + @MACOSX_BUNDLE_GUI_IDENTIFIER@ Project + CFBundleTypeRole + Editor + CFBundleTypeMIMETypes + + @MACOSX_BUNDLE_MIMETYPE@ + + NSDocumentClass + @MACOSX_BUNDLE_GUI_IDENTIFIER@ Project + + + + \ No newline at end of file From bca86d9c1acc879f47a766e583d8de202bf87cb6 Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Sun, 4 May 2014 01:10:52 -0400 Subject: [PATCH 32/55] Apple Bundle fixes --- CMakeLists.txt | 2 ++ data/scripts/create_apple_bundle.sh.in | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index df603e3cc..475170cec 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -667,6 +667,8 @@ SET(MACOSX_BUNDLE_MIMETYPE "application/x-lmms-project") CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/data/lmms.plist.in" "${CMAKE_INSTALL_PREFIX}/Info.plist") CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/data/scripts/create_apple_bundle.sh.in" "${CMAKE_INSTALL_PREFIX}/create_apple_bundle.sh") CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/data/scripts/create_apple_dmg.sh.in" "${CMAKE_INSTALL_PREFIX}/create_apple_dmg.sh") +# Add execute permissions to bundle script +FILE(COPY "${CMAKE_INSTALL_PREFIX}/create_apple_bundle.sh" DESTINATION "${CMAKE_INSTALL_PREFIX}/create_apple_bundle.sh" FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) #endif SET(CPACK_SOURCE_GENERATOR "TBZ2") diff --git a/data/scripts/create_apple_bundle.sh.in b/data/scripts/create_apple_bundle.sh.in index fa6df3454..49b83baf0 100644 --- a/data/scripts/create_apple_bundle.sh.in +++ b/data/scripts/create_apple_bundle.sh.in @@ -119,5 +119,5 @@ cp "$CMAKE_BUILD/Info.plist" "$APP/Contents/Info.plist" # Done. Ready to build DMG echo -e "\nFinished.\n\nPlease run \"create_apple_dmg.sh\" from the Desktop to build the installer.\n" echo -e "Note: You can drag/drop it into this terminal window.)\n" -cp "CMAKE_INSTALL/create_apple_dmg.sh" "$HOME/Desktop/" +cp "$CMAKE_INSTALL/create_apple_dmg.sh" "$HOME/Desktop/" chmod +x "$HOME/Desktop/create_apple_dmg.sh" From 9a0f930416822bdefd5de07c1db462f498c313bd Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Sun, 4 May 2014 01:40:10 -0400 Subject: [PATCH 33/55] Apple Bundle Work --- CMakeLists.txt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 475170cec..5dfded6c0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -668,7 +668,10 @@ CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/data/lmms.plist.in" "${CMAKE_INSTALL_PREFIX} CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/data/scripts/create_apple_bundle.sh.in" "${CMAKE_INSTALL_PREFIX}/create_apple_bundle.sh") CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/data/scripts/create_apple_dmg.sh.in" "${CMAKE_INSTALL_PREFIX}/create_apple_dmg.sh") # Add execute permissions to bundle script -FILE(COPY "${CMAKE_INSTALL_PREFIX}/create_apple_bundle.sh" DESTINATION "${CMAKE_INSTALL_PREFIX}/create_apple_bundle.sh" FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) +SET(CHMOD_CMD "chmod") +SET(CHMOD_ARG1 "u+x") +SET(CHMOD_ARG2 "chmod u+x "${CMAKE_INSTALL_PREFIX}/create_apple_bundle.sh") +EXECUTE_PROCESS(COMMAND ${CHMOD_CMD} ${CHMOD_ARG1} ${CHMOD_ARG2}) #endif SET(CPACK_SOURCE_GENERATOR "TBZ2") From 3e9314bb636294b21dfe153fc4bbd309e612f2ee Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Sun, 4 May 2014 02:13:05 -0400 Subject: [PATCH 34/55] Apple Bundle Fix --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5dfded6c0..82f667401 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -670,7 +670,7 @@ CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/data/scripts/create_apple_dmg.sh.in" "${CMAK # Add execute permissions to bundle script SET(CHMOD_CMD "chmod") SET(CHMOD_ARG1 "u+x") -SET(CHMOD_ARG2 "chmod u+x "${CMAKE_INSTALL_PREFIX}/create_apple_bundle.sh") +SET(CHMOD_ARG2 "${CMAKE_INSTALL_PREFIX}/create_apple_bundle.sh") EXECUTE_PROCESS(COMMAND ${CHMOD_CMD} ${CHMOD_ARG1} ${CHMOD_ARG2}) #endif From 1be0823f5b6c2cad58ba7736ef5c8b5890575dd2 Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Sun, 4 May 2014 00:12:22 -0700 Subject: [PATCH 35/55] Apple Bundle Fix --- data/scripts/create_apple_bundle.sh.in | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/data/scripts/create_apple_bundle.sh.in b/data/scripts/create_apple_bundle.sh.in index 49b83baf0..81b8963e0 100644 --- a/data/scripts/create_apple_bundle.sh.in +++ b/data/scripts/create_apple_bundle.sh.in @@ -37,9 +37,9 @@ LIBREADLINE=$MACPORTS/lib/libreadline.6.2.dylib echo -e "\n\nRunning..." # Check for u+w permissions on libreadline -_perm=`stat -f "%p" $LIBREADLINE` -_perm=${_perm:3:1} -if [ ${_perm} != "7" ] +CHECKREADLINE=$(stat -f "%p" $LIBREADLINE) +CHECKREADLINE=${CHECKREADLINE:3:1} +if [ "$CHECKREADLINE" != "7" ] then echo -e "\n\n\t\t\t\t***********\n\t\t\t\t* WARNING *\n\t\t\t\t***********" echo -e "File $LIBREADLINE is not marked as user writable." From 42f7a5fb1ef9d8aa193ef311a69e1c9bb98c8940 Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Sun, 4 May 2014 00:36:33 -0700 Subject: [PATCH 36/55] Apple Bundle Fix --- data/scripts/create_apple_bundle.sh.in | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/data/scripts/create_apple_bundle.sh.in b/data/scripts/create_apple_bundle.sh.in index 81b8963e0..2ccd36665 100644 --- a/data/scripts/create_apple_bundle.sh.in +++ b/data/scripts/create_apple_bundle.sh.in @@ -14,13 +14,13 @@ MACPORTS=/opt/local # LMMS project root directory (extracted source) -CMAKE_SRC=@CMAKE_SOURCE_DIR@ +CMAKE_SRC=/Users/tres/lmms # LMMS compiled (install) resources -CMAKE_INSTALL=@CMAKE_INSTALL_PREFIX@ +CMAKE_INSTALL=/Users/tres/lmms/target # LMMS working build directory -CMAKE_BUILD=@CMAKE_CURRENT_BINARY_DIR@ +CMAKE_BUILD=/Users/tres/lmms/build # STK rawwaves directory STK_RAWWAVE=$HOME/stk-*/rawwaves @@ -60,7 +60,7 @@ cp -R * "$APP/Contents" # Manually copy STK rawwaves mkdir -p "$APP/Contents/share/stk/rawwaves" -cp "$STK_RAWWAVE/*.raw" "$APP/Contents/share/stk/rawwaves" +cp $STK_RAWWAVE/*.raw "$APP/Contents/share/stk/rawwaves" # Make all libraries writable for macdeployqt cd "$APP" @@ -93,18 +93,18 @@ install_name_tool -change "$CMAKE_BUILD/plugins/zynaddsubfx/libZynAddSubFxCore.d "$APP/Contents/MacOS/RemoteZynAddSubFx" # Build a list of shared objects in target/lib/lmms -for file in "$APP/Contents/lib/lmms/*.so"; do - _executables="$_executables -executable=\"$APP/Contents/lib/lmms/${file##*/}\"" +for file in $APP/Contents/lib/lmms/*.so; do + _executables="$_executables -executable=$APP/Contents/lib/lmms/${file##*/}" done # Build a list of shared objects in target/lib/lmms/ladspa -for file in "$APP/Contents/lib/lmms/ladspa/*.so"; do - _executables="$_executables -executable=\"$APP/Contents/lib/lmms/ladspa/${file##*/}\"" +for file in $APP/Contents/lib/lmms/ladspa/*.so; do + _executables="$_executables -executable=$APP/Contents/lib/lmms/ladspa/${file##*/}" done # Additional binaries that require linking -_executables="$_executables -executable=\"$APP/Contents/MacOS/RemoteZynAddSubFx\"" -_executables="$_executables -executable=\"$APP/Contents/Frameworks/libZynAddSubFxCore.dylib\"" +_executables="$_executables -executable=$APP/Contents/MacOS/RemoteZynAddSubFx" +_executables="$_executables -executable=$APP/Contents/Frameworks/libZynAddSubFxCore.dylib" # Build our App Package using "macdeployqt" macdeployqt "$APP" $_executables @@ -114,7 +114,7 @@ cp "$CMAKE_SRC/data/lmms.icns" "$APP/Contents/Resources/" cp "$CMAKE_SRC/data/project.icns" "$APP/Contents/Resources/" # Copy "Info.plist" into bundle -cp "$CMAKE_BUILD/Info.plist" "$APP/Contents/Info.plist" +cp "$CMAKE_INSTALL/Info.plist" "$APP/Contents/Info.plist" # Done. Ready to build DMG echo -e "\nFinished.\n\nPlease run \"create_apple_dmg.sh\" from the Desktop to build the installer.\n" From 83e8a9e1b969cb10a34e92fb4e5cc627ab686274 Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Sun, 4 May 2014 21:04:55 -0700 Subject: [PATCH 37/55] Apple Bundle Fix --- CMakeLists.txt | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 82f667401..e0f2e818f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -663,16 +663,16 @@ SET(MACOSX_BUNDLE_SHORT_VERSION_STRING "${VERSION}") SET(MACOSX_BUNDLE_BUNDLE_VERSION "${VERSION}") SET(MACOSX_BUNDLE_COPYRIGHT "Tobias Doerffel, 2008-2010") SET(MACOSX_BUNDLE_MIMETYPE "application/x-lmms-project") -#ifdef LMMS_BUILD_APPLE -CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/data/lmms.plist.in" "${CMAKE_INSTALL_PREFIX}/Info.plist") -CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/data/scripts/create_apple_bundle.sh.in" "${CMAKE_INSTALL_PREFIX}/create_apple_bundle.sh") -CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/data/scripts/create_apple_dmg.sh.in" "${CMAKE_INSTALL_PREFIX}/create_apple_dmg.sh") -# Add execute permissions to bundle script -SET(CHMOD_CMD "chmod") -SET(CHMOD_ARG1 "u+x") -SET(CHMOD_ARG2 "${CMAKE_INSTALL_PREFIX}/create_apple_bundle.sh") -EXECUTE_PROCESS(COMMAND ${CHMOD_CMD} ${CHMOD_ARG1} ${CHMOD_ARG2}) -#endif +IF(LMMS_BUILD_APPLE) + CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/data/lmms.plist.in" "${CMAKE_INSTALL_PREFIX}/Info.plist") + CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/data/scripts/create_apple_bundle.sh.in" "${CMAKE_CURRENT_BINARY_DIR}/create_apple_bundle.sh" @ONLY) + CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/data/scripts/create_apple_dmg.sh.in" "${CMAKE_CURRENT_BINARY_DIR}/create_apple_dmg.sh" @ONLY) + # Add execute permissions to bundle script + SET(CHMOD_CMD "chmod") + SET(CHMOD_ARG1 "u+x") + SET(CHMOD_ARG2 "${CMAKE_CURRENT_BINARY_DIR}/create_apple_bundle.sh") + EXECUTE_PROCESS(COMMAND ${CHMOD_CMD} ${CHMOD_ARG1} ${CHMOD_ARG2}) +ENDIF(LMMS_BUILD_APPLE) SET(CPACK_SOURCE_GENERATOR "TBZ2") SET(CPACK_SOURCE_PACKAGE_FILE_NAME "lmms-${VERSION}") From 478cef528aca9c9dea0bf8a792a752ef16ebd370 Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Mon, 5 May 2014 09:43:19 -0400 Subject: [PATCH 38/55] Apple Bundle Fix : Move Bundle Declarations The "MACOSX_BUNDLE..." declarations must occur before ADD_SUBDIRECTORY(plugins) in order for the child CMake to inherit the properties from the parent. This is needed for scripts/create_apple_dmg.sh to inherit "MACOS_BUNDLE_BUNDLE_VERSION", etc. --- CMakeLists.txt | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e0f2e818f..8095f8554 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -387,7 +387,15 @@ ELSE(WIN32) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -DPIC") ENDIF(WIN32) - +# set up apple vars before traversing into data/scripts +SET(MACOSX_BUNDLE_ICON_FILE "lmms.icns") +SET(MACOSX_BUNDLE_GUI_IDENTIFIER "LMMS") +SET(MACOSX_BUNDLE_LONG_VERSION_STRING "${VERSION}") +SET(MACOSX_BUNDLE_BUNDLE_NAME "LMMS") +SET(MACOSX_BUNDLE_SHORT_VERSION_STRING "${VERSION}") +SET(MACOSX_BUNDLE_BUNDLE_VERSION "${VERSION}") +SET(MACOSX_BUNDLE_COPYRIGHT "Tobias Doerffel, 2008-2010") +SET(MACOSX_BUNDLE_MIMETYPE "application/x-lmms-project") # make sub-directories ADD_SUBDIRECTORY(plugins) @@ -663,16 +671,6 @@ SET(MACOSX_BUNDLE_SHORT_VERSION_STRING "${VERSION}") SET(MACOSX_BUNDLE_BUNDLE_VERSION "${VERSION}") SET(MACOSX_BUNDLE_COPYRIGHT "Tobias Doerffel, 2008-2010") SET(MACOSX_BUNDLE_MIMETYPE "application/x-lmms-project") -IF(LMMS_BUILD_APPLE) - CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/data/lmms.plist.in" "${CMAKE_INSTALL_PREFIX}/Info.plist") - CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/data/scripts/create_apple_bundle.sh.in" "${CMAKE_CURRENT_BINARY_DIR}/create_apple_bundle.sh" @ONLY) - CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/data/scripts/create_apple_dmg.sh.in" "${CMAKE_CURRENT_BINARY_DIR}/create_apple_dmg.sh" @ONLY) - # Add execute permissions to bundle script - SET(CHMOD_CMD "chmod") - SET(CHMOD_ARG1 "u+x") - SET(CHMOD_ARG2 "${CMAKE_CURRENT_BINARY_DIR}/create_apple_bundle.sh") - EXECUTE_PROCESS(COMMAND ${CHMOD_CMD} ${CHMOD_ARG1} ${CHMOD_ARG2}) -ENDIF(LMMS_BUILD_APPLE) SET(CPACK_SOURCE_GENERATOR "TBZ2") SET(CPACK_SOURCE_PACKAGE_FILE_NAME "lmms-${VERSION}") From bc81274fa8f1ebe7091fbfa3512962a4cd59501f Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Mon, 5 May 2014 09:45:01 -0400 Subject: [PATCH 39/55] Apple Bundle Fix : Allow %VARS% for Bundle Script --- data/scripts/create_apple_bundle.sh.in | 108 ++++++++++++------------- 1 file changed, 53 insertions(+), 55 deletions(-) diff --git a/data/scripts/create_apple_bundle.sh.in b/data/scripts/create_apple_bundle.sh.in index 2ccd36665..8b335cb0d 100644 --- a/data/scripts/create_apple_bundle.sh.in +++ b/data/scripts/create_apple_bundle.sh.in @@ -2,11 +2,11 @@ #title :create_applet_installer.sh #description :Creates Apple ".app" bundle for LMMS #author :Tres Finocchiaro -#date :20140331 -#version :1.0 +#date :20140504 +#version :1.1 #usage :bash create_applet_installer.sh #notes :See also https://github.com/LMMS -#notes :Troubleshooting try: export DYLD_PRINT_LIBRARIES=1 +#notes :Troubleshooting try: export DYLD_PRINT_LIBRARIES=1; export VERBOSE=1; #requires :deploymacqt #========================================================================================= @@ -14,110 +14,108 @@ MACPORTS=/opt/local # LMMS project root directory (extracted source) -CMAKE_SRC=/Users/tres/lmms +CMAKE_SRC=@CMAKE_SOURCE_DIR@ # LMMS compiled (install) resources -CMAKE_INSTALL=/Users/tres/lmms/target +CMAKE_INSTALL=@CMAKE_INSTALL_PREFIX@ # LMMS working build directory -CMAKE_BUILD=/Users/tres/lmms/build - +CMAKE_BUILD=$(cd @CMAKE_CURRENT_BINARY_DIR@/../..; pwd) + # STK rawwaves directory -STK_RAWWAVE=$HOME/stk-*/rawwaves - +STK_RAWWAVE=${HOME}/stk-*/rawwaves # Place to create ".app" bundle -APP=$HOME/Desktop/LMMS.app +APP=${HOME}/Desktop/LMMS.app # MacPorts installs libreadline with wrong permissions -LIBREADLINE=$MACPORTS/lib/libreadline.6.2.dylib +LIBREADLINE=${MACPORTS}/lib/libreadline.6.2.dylib + +# The DMG packager script location +DMG_SCRIPT_SRC=${CMAKE_BUILD}/create_apple_dmg.sh +DMG_SCRIPT_DST=${HOME}/Desktop/create_apple_dmg.sh #========================================================================================= - -echo -e "\n\nRunning..." + +MSG_COLOR='\x1B[1;36m' +COLOR_RESET='\x1B[0m' +echo -e "${MSG_COLOR}\n\nCreating App Bundle \"${APP}\"...${COLOR_RESET}" # Check for u+w permissions on libreadline CHECKREADLINE=$(stat -f "%p" $LIBREADLINE) CHECKREADLINE=${CHECKREADLINE:3:1} -if [ "$CHECKREADLINE" != "7" ] +if [ "${CHECKREADLINE}" != "7" ] then echo -e "\n\n\t\t\t\t***********\n\t\t\t\t* WARNING *\n\t\t\t\t***********" - echo -e "File $LIBREADLINE is not marked as user writable." + echo -e "File ${LIBREADLINE} is not marked as user writable." echo -e "This will break macdeployqt's linking process after it is copied." echo -e "A sudo password is required to elevate and fix using chmod u+w." echo -e "\nPLEASE ENTER SUDO PASSWORD:" - sudo chmod u+w "$MACPORTS/lib/libreadline.6.2.dylib" + sudo chmod u+w "${MACPORTS}/lib/libreadline.6.2.dylib" fi # Remove any old .app bundles -rm -Rf "$APP" +rm -Rf ${APP} # Create new bundle, copy our built code to it -mkdir -p "$APP" -cd "$CMAKE_INSTALL" -mkdir "$APP/Contents" -cp -R * "$APP/Contents" +mkdir -p ${APP} +cd ${CMAKE_INSTALL} +mkdir ${APP}/Contents +cp -R * ${APP}/Contents # Manually copy STK rawwaves -mkdir -p "$APP/Contents/share/stk/rawwaves" -cp $STK_RAWWAVE/*.raw "$APP/Contents/share/stk/rawwaves" +mkdir -p ${APP}/Contents/share/stk/rawwaves +cp ${STK_RAWWAVE}/*.raw ${APP}/Contents/share/stk/rawwaves # Make all libraries writable for macdeployqt -cd "$APP" +cd ${APP} find . -type f -print0 | xargs -0 chmod u+w # Move lmms binary to the proper location -mkdir -p "$APP/Contents/MacOS" -mv "$APP/Contents/bin/lmms" "$APP/Contents/MacOS" -rm -rf "$APP/Contents/bin" +mkdir -p ${APP}/Contents/MacOS +mv ${APP}/Contents/bin/lmms ${APP}/Contents/MacOS +rm -rf ${APP}/Contents/bin # Move libraries to proper locations -mkdir -p "$APP/Contents/Frameworks" -mv "$APP/Contents/lib/lmms/libZynAddSubFxCore.dylib" \ - "$APP/Contents/Frameworks/libZynAddSubFxCore.dylib" +mkdir -p ${APP}/Contents/Frameworks +mv ${APP}/Contents/lib/lmms/libZynAddSubFxCore.dylib \ + ${APP}/Contents/Frameworks/libZynAddSubFxCore.dylib -mv "$APP/Contents/lib/lmms/RemoteZynAddSubFx" \ - "$APP/Contents/MacOS/RemoteZynAddSubFx" +mv ${APP}/Contents/lib/lmms/RemoteZynAddSubFx \ + ${APP}/Contents/MacOS/RemoteZynAddSubFx # Fix more Zyn Linking issues -# install_name_tool -change $CMAKE_INSTALL/lib/lmms/libZynAddSubFxCore.dylib \ -# @loader_path/../../Frameworks/libZynAddSubFxCore.dylib \ -# $APP/Contents/lib/lmms/libzynaddsubfx.so - install_name_tool -change libZynAddSubFxCore.dylib \ @loader_path/../../Frameworks/libZynAddSubFxCore.dylib \ - "$APP/Contents/lib/lmms/libzynaddsubfx.so" + ${APP}/Contents/lib/lmms/libzynaddsubfx.so -install_name_tool -change "$CMAKE_BUILD/plugins/zynaddsubfx/libZynAddSubFxCore.dylib" \ +install_name_tool -change ${CMAKE_BUILD}/plugins/zynaddsubfx/libZynAddSubFxCore.dylib \ @loader_path/../../Frameworks/libZynAddSubFxCore.dylib \ - "$APP/Contents/MacOS/RemoteZynAddSubFx" + ${APP}/Contents/MacOS/RemoteZynAddSubFx # Build a list of shared objects in target/lib/lmms -for file in $APP/Contents/lib/lmms/*.so; do - _executables="$_executables -executable=$APP/Contents/lib/lmms/${file##*/}" +for file in ${APP}/Contents/lib/lmms/*.so; do + _executables="${_executables} -executable=${APP}/Contents/lib/lmms/${file##*/}" done # Build a list of shared objects in target/lib/lmms/ladspa -for file in $APP/Contents/lib/lmms/ladspa/*.so; do - _executables="$_executables -executable=$APP/Contents/lib/lmms/ladspa/${file##*/}" +for file in ${APP}/Contents/lib/lmms/ladspa/*.so; do +_executables="${_executables} -executable=${APP}/Contents/lib/lmms/ladspa/${file##*/}" done # Additional binaries that require linking -_executables="$_executables -executable=$APP/Contents/MacOS/RemoteZynAddSubFx" -_executables="$_executables -executable=$APP/Contents/Frameworks/libZynAddSubFxCore.dylib" +_executables="${_executables} -executable=${APP}/Contents/MacOS/RemoteZynAddSubFx" +_executables="${_executables} -executable=${APP}/Contents/Frameworks/libZynAddSubFxCore.dylib" # Build our App Package using "macdeployqt" -macdeployqt "$APP" $_executables +macdeployqt ${APP} $_executables # OS X Specific Artwork -cp "$CMAKE_SRC/data/lmms.icns" "$APP/Contents/Resources/" -cp "$CMAKE_SRC/data/project.icns" "$APP/Contents/Resources/" - -# Copy "Info.plist" into bundle -cp "$CMAKE_INSTALL/Info.plist" "$APP/Contents/Info.plist" +cp ${CMAKE_SRC}/data/*.icns ${APP}/Contents/Resources/ # Done. Ready to build DMG -echo -e "\nFinished.\n\nPlease run \"create_apple_dmg.sh\" from the Desktop to build the installer.\n" -echo -e "Note: You can drag/drop it into this terminal window.)\n" -cp "$CMAKE_INSTALL/create_apple_dmg.sh" "$HOME/Desktop/" -chmod +x "$HOME/Desktop/create_apple_dmg.sh" +echo -e "\nFinished.\n\nYou may run LMMS from the Desktop." +echo -e "\nTo create an Apple DMG Package run ${MSG_COLOR}\"${DMG_SCRIPT_DST}\"${COLOR_RESET}.\n" +echo -e "(Note: You can drag/drop the script directly into this terminal window.)\n" +cp ${DMG_SCRIPT_SRC} ${DMG_SCRIPT_DST} +chmod +x ${DMG_SCRIPT_DST} From ca778dd487c7d5b7b0056eaf46ee479ff81d5826 Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Mon, 5 May 2014 09:45:32 -0400 Subject: [PATCH 40/55] Apple DMG Fix : Fix %VARS% for DMG Script --- data/scripts/create_apple_dmg.sh.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/data/scripts/create_apple_dmg.sh.in b/data/scripts/create_apple_dmg.sh.in index 0116f1f69..eb77b75bb 100644 --- a/data/scripts/create_apple_dmg.sh.in +++ b/data/scripts/create_apple_dmg.sh.in @@ -11,9 +11,9 @@ fi # set up your app name, version number, and background image file name APP_NAME="@MACOSX_BUNDLE_BUNDLE_NAME@" -VERSION="@MACOSX_BUNDLE_LONG_VERSION@" +VERSION="@MACOSX_BUNDLE_LONG_VERSION_STRING@" DMG_BACKGROUND_IMG="dmg_branding.png" -cp "@CMAKE_INSTALL_PREFIX@/data/$DMG_BACKGROUND_IMG" . +cp "@CMAKE_SOURCE_DIR@/data/${DMG_BACKGROUND_IMG}" . # you should not need to change these APP_LOWERCASE=$(echo $APP_NAME|tr '[:upper:]' '[:lower:]') From 6b5f3565d8ddb30792aff89fe571bbe5ba64e007 Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Mon, 5 May 2014 09:47:06 -0400 Subject: [PATCH 41/55] Apple Bundle Fix : Move tasks from / to /data/scripts --- data/scripts/CMakeLists.txt | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 data/scripts/CMakeLists.txt diff --git a/data/scripts/CMakeLists.txt b/data/scripts/CMakeLists.txt new file mode 100644 index 000000000..405b5f65c --- /dev/null +++ b/data/scripts/CMakeLists.txt @@ -0,0 +1,13 @@ +SET(BUILD_ROOT "${CMAKE_CURRENT_BINARY_DIR}/../../") +IF(LMMS_BUILD_APPLE) + CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/data/scripts/create_apple_bundle.sh.in" + "${BUILD_ROOT}/create_apple_bundle.sh" @ONLY) + CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/data/scripts/create_apple_dmg.sh.in" + "${BUILD_ROOT}/create_apple_dmg.sh" @ONLY) + # Add execute permissions to bundle script + SET(CHMOD_CMD "chmod") + SET(CHMOD_ARG1 "u+x") + SET(CHMOD_ARG2 "${BUILD_ROOT}/create_apple_bundle.sh") + EXECUTE_PROCESS(COMMAND ${CHMOD_CMD} ${CHMOD_ARG1} ${CHMOD_ARG2}) + INSTALL(CODE "EXECUTE_PROCESS(COMMAND ${BUILD_ROOT}/create_apple_bundle.sh)") +ENDIF(LMMS_BUILD_APPLE) \ No newline at end of file From a88b89682a21fbd8f004c5872b027e6d826a581f Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Mon, 5 May 2014 09:48:22 -0400 Subject: [PATCH 42/55] Apple Bundle Fix : Move Info.plist task to /data Also ADD_SUBDIRECTORY /data/scripts for recent Apple Installer changes. --- data/CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/data/CMakeLists.txt b/data/CMakeLists.txt index e385d2f13..c7f5a9d62 100644 --- a/data/CMakeLists.txt +++ b/data/CMakeLists.txt @@ -4,6 +4,7 @@ ADD_SUBDIRECTORY(presets) ADD_SUBDIRECTORY(projects) ADD_SUBDIRECTORY(samples) ADD_SUBDIRECTORY(themes) +ADD_SUBDIRECTORY(scripts) IF(LMMS_BUILD_LINUX) INSTALL(FILES themes/default/icon.png DESTINATION "${DATA_DIR}/pixmaps" RENAME lmms.png) @@ -17,3 +18,6 @@ IF(LMMS_BUILD_WIN32) INSTALL(FILES ${RAWWAVES} DESTINATION "${DATA_DIR}/stk/rawwaves") ENDIF(LMMS_BUILD_WIN32) +IF(LMMS_BUILD_APPLE) + CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/data/lmms.plist.in" "${CMAKE_INSTALL_PREFIX}/Info.plist") +ENDIF(LMMS_BUILD_APPLE) \ No newline at end of file From 3b0fd9dfca5b39b00f23ea80464bb8e27d5d4af8 Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Mon, 5 May 2014 09:54:12 -0400 Subject: [PATCH 43/55] Apple Bundle Fix : Move Bundle Declarations #2 --- CMakeLists.txt | 9 --------- 1 file changed, 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8095f8554..0dab237f7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -663,15 +663,6 @@ IF(WIN64) InstallDir \\\"\\\$PROGRAMFILES64\\\\${CPACK_PACKAGE_INSTALL_DIRECTORY}\\\"") ENDIF(WIN64) -SET(MACOSX_BUNDLE_ICON_FILE "lmms.icns") -SET(MACOSX_BUNDLE_GUI_IDENTIFIER "LMMS") -SET(MACOSX_BUNDLE_LONG_VERSION_STRING "${VERSION}") -SET(MACOSX_BUNDLE_BUNDLE_NAME "LMMS") -SET(MACOSX_BUNDLE_SHORT_VERSION_STRING "${VERSION}") -SET(MACOSX_BUNDLE_BUNDLE_VERSION "${VERSION}") -SET(MACOSX_BUNDLE_COPYRIGHT "Tobias Doerffel, 2008-2010") -SET(MACOSX_BUNDLE_MIMETYPE "application/x-lmms-project") - SET(CPACK_SOURCE_GENERATOR "TBZ2") SET(CPACK_SOURCE_PACKAGE_FILE_NAME "lmms-${VERSION}") INCLUDE(CPack) From 1c4ab566d96e46242e067ba3ca0ca62292fb8374 Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Mon, 5 May 2014 21:51:46 -0700 Subject: [PATCH 44/55] Fix "No documents could be created" when opening (Apple) --- data/lmms.plist.in | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/data/lmms.plist.in b/data/lmms.plist.in index 2d2834f40..e6aad9e96 100644 --- a/data/lmms.plist.in +++ b/data/lmms.plist.in @@ -24,31 +24,25 @@ CFBundleDocumentTypes - CFBundleTypeExtensions - - mmp - MMP - mmpz - MMPZ - - LSItemContentTypes - - public.mmp - public.mmpz - CFBundleTypeIconFile project.icns CFBundleTypeName @MACOSX_BUNDLE_GUI_IDENTIFIER@ Project CFBundleTypeRole Editor - CFBundleTypeMIMETypes + LSIsAppleDefaultForType + + LSItemContentTypes - @MACOSX_BUNDLE_MIMETYPE@ + public.mmp + public.mmpz + + CFBundleTypeExtensions + + mmp + mmpz - NSDocumentClass - @MACOSX_BUNDLE_GUI_IDENTIFIER@ Project - \ No newline at end of file + From 76a990dbdcc3e2e252ec46fa07820d99c33624de Mon Sep 17 00:00:00 2001 From: Jonathan Aquilina Date: Wed, 7 May 2014 18:17:24 +0200 Subject: [PATCH 45/55] updated README to give link to github wiki instead of SF --- README | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/README b/README index 65f60c8e6..80e38a000 100644 --- a/README +++ b/README @@ -93,13 +93,9 @@ can be found at http://lmms.sourceforge.net -Details on development can be found at +Details on development can be found in the Wiki: -http://lmms.sourceforge.net/development.php - -or in the Wiki: - -http://lmms.sourceforge.net/wiki/ +https://github.com/LMMS/lmms/wiki Before coding a new big feature, please ALWAYS post your idea and suggestions about your feature and about the intended implementation to the From 2037f082d2c6079c114d1e209a9036043630d3d8 Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Wed, 7 May 2014 12:46:58 -0700 Subject: [PATCH 46/55] Update CMakeLists.txt --- CMakeLists.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0dab237f7..fae79f653 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -396,6 +396,10 @@ SET(MACOSX_BUNDLE_SHORT_VERSION_STRING "${VERSION}") SET(MACOSX_BUNDLE_BUNDLE_VERSION "${VERSION}") SET(MACOSX_BUNDLE_COPYRIGHT "Tobias Doerffel, 2008-2010") SET(MACOSX_BUNDLE_MIMETYPE "application/x-lmms-project") +SET(MACOSX_BUNDLE_MIMETYPE_ICON "project.icns") +SET(MACOSX_BUNDLE_MIMETYPE_ID "net.sourceforget.lmms") +SET(MACOSX_BUNDLE_PROJECT_URL "http://lmms.sourceforge.net") + # make sub-directories ADD_SUBDIRECTORY(plugins) From 3e2fea65dc2dd4e080bd13619f894964d16e123b Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Wed, 7 May 2014 13:12:07 -0700 Subject: [PATCH 47/55] Apple mimetype support --- data/lmms.plist.in | 159 +++++++++++++++++++++++++++++++++------------ 1 file changed, 119 insertions(+), 40 deletions(-) diff --git a/data/lmms.plist.in b/data/lmms.plist.in index e6aad9e96..0b98a817f 100644 --- a/data/lmms.plist.in +++ b/data/lmms.plist.in @@ -1,48 +1,127 @@ - - - CFBundleExecutable - @MACOSX_BUNDLE_GUI_IDENTIFIER@ - CFBundleGetInfoString - @MACOSX_BUNDLE_GUI_IDENTIFIER@ @MACOSX_BUNDLE_LONG_VERSION_STRING@ - CFBundleIdentifier - net.sourceforge.lmms - CFBundleIconFile - @MACOSX_BUNDLE_ICON_FILE@ - CFBundleName - @MACOSX_BUNDLE_BUNDLE_NAME@ - CFBundlePackageType - APPL - CFBundleDevelopmentRegion - English - CFBundleInfoDictionaryVersion - 6.0 - CFBundleVersion - @MACOSX_BUNDLE_LONG_VERSION_STRING@ - CFBundleDocumentTypes + + + CFBundleIconFile + @MACOSX_BUNDLE_ICON_FILE@ + + CFBundlePackageType + APPL + + CFBundleGetInfoString + @MACOSX_BUNDLE_GUI_IDENTIFIER@ @MACOSX_BUNDLE_LONG_VERSION_STRING@ + + + CFBundleSignature + @MACOSX_BUNDLE_GUI_IDENTIFIER@ + + CFBundleExecutable + @MACOSX_BUNDLE_GUI_IDENTIFIER@ + + CFBundleVersion + @MACOSX_BUNDLE_LONG_VERSION_STRING@ + + CFBundleShortVersionString + @MACOSX_BUNDLE_LONG_VERSION_STRING@ + + CFBundleName + @MACOSX_BUNDLE_BUNDLE_NAME@ + + CFBundleInfoDictionaryVersion + 6.0 + + CFBundleIdentifier + net.sourceforge.lmms + + CFBundleDocumentTypes + + + CFBundleTypeExtensions + + mmpz + mmp + + CFBundleTypeIconFile + @MACOSX_BUNDLE_MIMETYPE_ICON@ + CFBundleTypeName + @MACOSX_BUNDLE_GUI_IDENTIFIER@ Project + CFBundleTypeOSTypes + + mmpz + mmp + + CFBundleTypeRole + Editor + + + + UTExportedTypeDeclarations + + UTTypeIdentifier + @MACOSX_BUNDLE_MIMETYPE_ID@.mmpz + UTTypeReferenceURL + @MACOSX_BUNDLE_PROJECT_URL@ + UTTypeDescription + @MACOSX_BUNDLE_GUI_IDENTIFIER@ Project + UTTypeIconFile + @MACOSX_BUNDLE_MIMETYPE_ICON@ + UTTypeConformsTo + + public.data + + UTTypeTagSpecification - CFBundleTypeIconFile - project.icns - CFBundleTypeName - @MACOSX_BUNDLE_GUI_IDENTIFIER@ Project - CFBundleTypeRole - Editor - LSIsAppleDefaultForType - - LSItemContentTypes - - public.mmp - public.mmpz - - CFBundleTypeExtensions - - mmp - mmpz - + @MACOSX_BUNDLE_MIMETYPE_ID@.mmpz + MMPZ + public.filename-extension + + mmpz + + public.mime-type + @MACOSX_BUNDLE_MIMETYPE@ + + + + UTTypeIdentifier + @MACOSX_BUNDLE_MIMETYPE_ID@.mmp + UTTypeReferenceURL + @MACOSX_BUNDLE_PROJECT_URL@ + UTTypeDescription + LMMS Project + UTTypeIconFile + @MACOSX_BUNDLE_MIMETYPE_ICON@ + UTTypeConformsTo + + public.xml + public.data + + UTTypeTagSpecification + + @MACOSX_BUNDLE_MIMETYPE_ID@.mmp + MMP + public.filename-extension + + mmp + + public.mime-type + @MACOSX_BUNDLE_MIMETYPE@ + + - + From 26a48e1c3a3b72abece60fdef610760069d0402a Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Wed, 7 May 2014 13:26:04 -0700 Subject: [PATCH 48/55] Update lmms.plist.in --- data/lmms.plist.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/lmms.plist.in b/data/lmms.plist.in index 0b98a817f..a2ed427a6 100644 --- a/data/lmms.plist.in +++ b/data/lmms.plist.in @@ -44,7 +44,7 @@ 6.0 CFBundleIdentifier - net.sourceforge.lmms + @MACOSX_BUNDLE_MIMETYPE_ID@ CFBundleDocumentTypes From 6ac9c28feec4c34760cf9d4c60bed2a9683fd876 Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Wed, 7 May 2014 13:28:10 -0700 Subject: [PATCH 49/55] Update CMakeLists.txt --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fae79f653..f8bfc066d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -397,7 +397,7 @@ SET(MACOSX_BUNDLE_BUNDLE_VERSION "${VERSION}") SET(MACOSX_BUNDLE_COPYRIGHT "Tobias Doerffel, 2008-2010") SET(MACOSX_BUNDLE_MIMETYPE "application/x-lmms-project") SET(MACOSX_BUNDLE_MIMETYPE_ICON "project.icns") -SET(MACOSX_BUNDLE_MIMETYPE_ID "net.sourceforget.lmms") +SET(MACOSX_BUNDLE_MIMETYPE_ID "net.sourceforge.lmms") SET(MACOSX_BUNDLE_PROJECT_URL "http://lmms.sourceforge.net") From 52e76c66b4064b8aa0d0409ced70a93cdb6cd8e9 Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Wed, 7 May 2014 13:50:45 -0700 Subject: [PATCH 50/55] Update lmms.plist.in --- data/lmms.plist.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/lmms.plist.in b/data/lmms.plist.in index a2ed427a6..a772c91c0 100644 --- a/data/lmms.plist.in +++ b/data/lmms.plist.in @@ -102,7 +102,7 @@ UTTypeReferenceURL @MACOSX_BUNDLE_PROJECT_URL@ UTTypeDescription - LMMS Project + @MACOSX_BUNDLE_GUI_IDENTIFIER@ Project UTTypeIconFile @MACOSX_BUNDLE_MIMETYPE_ICON@ UTTypeConformsTo From e979ac06c59a6ffe0d8c7f41ca312dc7a020f54e Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Wed, 7 May 2014 19:06:40 -0700 Subject: [PATCH 51/55] Update lmms.plist.in --- data/lmms.plist.in | 40 ++++++++++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/data/lmms.plist.in b/data/lmms.plist.in index a772c91c0..d5fcf7e2b 100644 --- a/data/lmms.plist.in +++ b/data/lmms.plist.in @@ -3,6 +3,9 @@ + CFBundleDevelopmentRegion + English + CFBundleIconFile @MACOSX_BUNDLE_ICON_FILE@ @@ -48,11 +51,11 @@ CFBundleDocumentTypes + CFBundleTypeExtensions mmpz - mmp CFBundleTypeIconFile @MACOSX_BUNDLE_MIMETYPE_ICON@ @@ -61,11 +64,36 @@ CFBundleTypeOSTypes mmpz + + CFBundleTypeRole + Editor + CFBundleTypeMIMETypes + + @MACOSX_BUNDLE_MIMETYPE@ + + + + + CFBundleTypeExtensions + + mmp + + CFBundleTypeIconFile + @MACOSX_BUNDLE_MIMETYPE_ICON@ + CFBundleTypeName + @MACOSX_BUNDLE_GUI_IDENTIFIER@ Project (uncompressed) + CFBundleTypeOSTypes + mmp CFBundleTypeRole Editor + CFBundleTypeMIMETypes + + @MACOSX_BUNDLE_MIMETYPE@ + + UTExportedTypeDeclarations @@ -85,14 +113,10 @@ UTTypeTagSpecification - @MACOSX_BUNDLE_MIMETYPE_ID@.mmpz - MMPZ public.filename-extension mmpz - public.mime-type - @MACOSX_BUNDLE_MIMETYPE@ @@ -102,7 +126,7 @@ UTTypeReferenceURL @MACOSX_BUNDLE_PROJECT_URL@ UTTypeDescription - @MACOSX_BUNDLE_GUI_IDENTIFIER@ Project + @MACOSX_BUNDLE_GUI_IDENTIFIER@ Project (uncompressed) UTTypeIconFile @MACOSX_BUNDLE_MIMETYPE_ICON@ UTTypeConformsTo @@ -112,14 +136,10 @@ UTTypeTagSpecification - @MACOSX_BUNDLE_MIMETYPE_ID@.mmp - MMP public.filename-extension mmp - public.mime-type - @MACOSX_BUNDLE_MIMETYPE@ From 72620542c0b52d0504943297a9c26a12e2cd249b Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Thu, 8 May 2014 14:01:27 -0400 Subject: [PATCH 52/55] OpulenZ/opl2 build fixes (Apple) - Cleaned up many non-bracketed sections for stricter compilers. - Remove custom `INLINE` keyword when building on clang. - Renable opl2 via plugins\CMakeLists.txts https://cloud.githubusercontent.com/assets/6345473/2919394/c474d668-d6da-11e3-82db-778a7ce6014d.png --- plugins/CMakeLists.txt | 4 +- plugins/opl2/fmopl.c | 1080 +++++++++++++++++++++------------------- 2 files changed, 580 insertions(+), 504 deletions(-) diff --git a/plugins/CMakeLists.txt b/plugins/CMakeLists.txt index 1835f813f..075c94ff3 100644 --- a/plugins/CMakeLists.txt +++ b/plugins/CMakeLists.txt @@ -12,9 +12,7 @@ ADD_SUBDIRECTORY(LadspaEffect) ADD_SUBDIRECTORY(lb302) #ADD_SUBDIRECTORY(lb303) ADD_SUBDIRECTORY(midi_import) -IF(NOT LMMS_BUILD_APPLE) - ADD_SUBDIRECTORY(opl2) -ENDIF() +ADD_SUBDIRECTORY(opl2) ADD_SUBDIRECTORY(organic) ADD_SUBDIRECTORY(papu) ADD_SUBDIRECTORY(patman) diff --git a/plugins/opl2/fmopl.c b/plugins/opl2/fmopl.c index f6382b6cb..c8ef05352 100644 --- a/plugins/opl2/fmopl.c +++ b/plugins/opl2/fmopl.c @@ -114,10 +114,9 @@ static int opl_dbg_maxchip,opl_dbg_chip; #define ENV_MOD_AR 0x02 /* -------------------- tables --------------------- */ -static const int slot_array[32]= -{ - 0, 2, 4, 1, 3, 5,-1,-1, - 6, 8,10, 7, 9,11,-1,-1, +static const int slot_array[32]= { + 0, 2, 4, 1, 3, 5,-1,-1, + 6, 8,10, 7, 9,11,-1,-1, 12,14,16,13,15,17,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1 }; @@ -125,57 +124,56 @@ static const int slot_array[32]= /* key scale level */ /* table is 3dB/OCT , DV converts this in TL step at 6dB/OCT */ #define DV (EG_STEP/2) -static const UINT32 KSL_TABLE[8*16]= -{ +static const UINT32 KSL_TABLE[8*16]= { /* OCT 0 */ - 0.000/DV, 0.000/DV, 0.000/DV, 0.000/DV, - 0.000/DV, 0.000/DV, 0.000/DV, 0.000/DV, - 0.000/DV, 0.000/DV, 0.000/DV, 0.000/DV, - 0.000/DV, 0.000/DV, 0.000/DV, 0.000/DV, + 0.000/DV, 0.000/DV, 0.000/DV, 0.000/DV, + 0.000/DV, 0.000/DV, 0.000/DV, 0.000/DV, + 0.000/DV, 0.000/DV, 0.000/DV, 0.000/DV, + 0.000/DV, 0.000/DV, 0.000/DV, 0.000/DV, /* OCT 1 */ - 0.000/DV, 0.000/DV, 0.000/DV, 0.000/DV, - 0.000/DV, 0.000/DV, 0.000/DV, 0.000/DV, - 0.000/DV, 0.750/DV, 1.125/DV, 1.500/DV, - 1.875/DV, 2.250/DV, 2.625/DV, 3.000/DV, + 0.000/DV, 0.000/DV, 0.000/DV, 0.000/DV, + 0.000/DV, 0.000/DV, 0.000/DV, 0.000/DV, + 0.000/DV, 0.750/DV, 1.125/DV, 1.500/DV, + 1.875/DV, 2.250/DV, 2.625/DV, 3.000/DV, /* OCT 2 */ - 0.000/DV, 0.000/DV, 0.000/DV, 0.000/DV, - 0.000/DV, 1.125/DV, 1.875/DV, 2.625/DV, - 3.000/DV, 3.750/DV, 4.125/DV, 4.500/DV, - 4.875/DV, 5.250/DV, 5.625/DV, 6.000/DV, + 0.000/DV, 0.000/DV, 0.000/DV, 0.000/DV, + 0.000/DV, 1.125/DV, 1.875/DV, 2.625/DV, + 3.000/DV, 3.750/DV, 4.125/DV, 4.500/DV, + 4.875/DV, 5.250/DV, 5.625/DV, 6.000/DV, /* OCT 3 */ - 0.000/DV, 0.000/DV, 0.000/DV, 1.875/DV, - 3.000/DV, 4.125/DV, 4.875/DV, 5.625/DV, - 6.000/DV, 6.750/DV, 7.125/DV, 7.500/DV, - 7.875/DV, 8.250/DV, 8.625/DV, 9.000/DV, + 0.000/DV, 0.000/DV, 0.000/DV, 1.875/DV, + 3.000/DV, 4.125/DV, 4.875/DV, 5.625/DV, + 6.000/DV, 6.750/DV, 7.125/DV, 7.500/DV, + 7.875/DV, 8.250/DV, 8.625/DV, 9.000/DV, /* OCT 4 */ - 0.000/DV, 0.000/DV, 3.000/DV, 4.875/DV, - 6.000/DV, 7.125/DV, 7.875/DV, 8.625/DV, - 9.000/DV, 9.750/DV,10.125/DV,10.500/DV, + 0.000/DV, 0.000/DV, 3.000/DV, 4.875/DV, + 6.000/DV, 7.125/DV, 7.875/DV, 8.625/DV, + 9.000/DV, 9.750/DV,10.125/DV,10.500/DV, 10.875/DV,11.250/DV,11.625/DV,12.000/DV, /* OCT 5 */ - 0.000/DV, 3.000/DV, 6.000/DV, 7.875/DV, - 9.000/DV,10.125/DV,10.875/DV,11.625/DV, + 0.000/DV, 3.000/DV, 6.000/DV, 7.875/DV, + 9.000/DV,10.125/DV,10.875/DV,11.625/DV, 12.000/DV,12.750/DV,13.125/DV,13.500/DV, 13.875/DV,14.250/DV,14.625/DV,15.000/DV, /* OCT 6 */ - 0.000/DV, 6.000/DV, 9.000/DV,10.875/DV, + 0.000/DV, 6.000/DV, 9.000/DV,10.875/DV, 12.000/DV,13.125/DV,13.875/DV,14.625/DV, 15.000/DV,15.750/DV,16.125/DV,16.500/DV, 16.875/DV,17.250/DV,17.625/DV,18.000/DV, /* OCT 7 */ - 0.000/DV, 9.000/DV,12.000/DV,13.875/DV, + 0.000/DV, 9.000/DV,12.000/DV,13.875/DV, 15.000/DV,16.125/DV,16.875/DV,17.625/DV, 18.000/DV,18.750/DV,19.125/DV,19.500/DV, 19.875/DV,20.250/DV,20.625/DV,21.000/DV }; #undef DV -/* sustain lebel table (3db per step) */ +/* sustain level table (3db per step) */ /* 0 - 15: 0, 3, 6, 9,12,15,18,21,24,27,30,33,36,39,42,93 (dB)*/ #define SC(db) (db*((3/EG_STEP)*(1< max ) +#endif + if ( val > max ) { val = max; - else if ( val < min ) + } else if ( val < min ) { val = min; - + } return val; } /* status set and IRQ handling */ -INLINE void OPL_STATUS_SET(FM_OPL *OPL,int flag) -{ +#ifdef __clang__ +void OPL_STATUS_SET(FM_OPL *OPL,int flag) { +#else +INLINE void OPL_STATUS_SET(FM_OPL *OPL,int flag) { +#endif /* set status flag */ OPL->status |= flag; - if(!(OPL->status & 0x80)) - { - if(OPL->status & OPL->statusmask) - { /* IRQ on */ + if ( !(OPL->status & 0x80) ) { + /* IRQ on */ + if ( OPL->status & OPL->statusmask ) { OPL->status |= 0x80; /* callback user interrupt handler (IRQ is OFF to ON) */ - if(OPL->IRQHandler) (OPL->IRQHandler)(OPL->IRQParam,1); + if (OPL->IRQHandler) { + (OPL->IRQHandler)(OPL->IRQParam,1); + } } } } /* status reset and IRQ handling */ -INLINE void OPL_STATUS_RESET(FM_OPL *OPL,int flag) -{ +#ifdef __clang__ +void OPL_STATUS_RESET(FM_OPL *OPL,int flag) { +#else +INLINE void OPL_STATUS_RESET(FM_OPL *OPL,int flag) { +#endif /* reset status flag */ OPL->status &=~flag; - if((OPL->status & 0x80)) - { - if (!(OPL->status & OPL->statusmask) ) - { + if ( (OPL->status & 0x80) ) { + if ( !(OPL->status & OPL->statusmask) ) { OPL->status &= 0x7f; /* callback user interrupt handler (IRQ is ON to OFF) */ - if(OPL->IRQHandler) (OPL->IRQHandler)(OPL->IRQParam,0); + if ( OPL->IRQHandler ) { + (OPL->IRQHandler)(OPL->IRQParam,0); + } } } } /* IRQ mask set */ -INLINE void OPL_STATUSMASK_SET(FM_OPL *OPL,int flag) -{ +#ifdef __clang__ +void OPL_STATUSMASK_SET(FM_OPL *OPL,int flag) { +#else +INLINE void OPL_STATUSMASK_SET(FM_OPL *OPL,int flag) { +#endif OPL->statusmask = flag; /* IRQ handling check */ OPL_STATUS_SET(OPL,0); @@ -295,8 +307,11 @@ INLINE void OPL_STATUSMASK_SET(FM_OPL *OPL,int flag) } /* ----- key on ----- */ -INLINE void OPL_KEYON(OPL_SLOT *SLOT) -{ +#ifdef __clang__ +void OPL_KEYON(OPL_SLOT *SLOT) { +#else +INLINE void OPL_KEYON(OPL_SLOT *SLOT) { +#endif /* sin wave restart */ SLOT->Cnt = 0; /* set attack */ @@ -306,15 +321,18 @@ INLINE void OPL_KEYON(OPL_SLOT *SLOT) SLOT->eve = EG_AED; } /* ----- key off ----- */ -INLINE void OPL_KEYOFF(OPL_SLOT *SLOT) -{ - if( SLOT->evm > ENV_MOD_RR) - { +#ifdef __clang__ +void OPL_KEYOFF(OPL_SLOT *SLOT) { +#else +INLINE void OPL_KEYOFF(OPL_SLOT *SLOT) { +#endif + if( SLOT->evm > ENV_MOD_RR) { /* set envelope counter from envleope output */ SLOT->evm = ENV_MOD_RR; - if( !(SLOT->evc&EG_DST) ) + if( !(SLOT->evc&EG_DST) ) { //SLOT->evc = (ENV_CURVE[SLOT->evc>>ENV_BITS]<evc = EG_DST; + } SLOT->eve = EG_DED; SLOT->evs = SLOT->evsr; } @@ -322,62 +340,65 @@ INLINE void OPL_KEYOFF(OPL_SLOT *SLOT) /* ---------- calcrate Envelope Generator & Phase Generator ---------- */ /* return : envelope output */ -INLINE UINT32 OPL_CALC_SLOT( OPL_SLOT *SLOT ) -{ +#ifdef __clang__ +UINT32 OPL_CALC_SLOT( OPL_SLOT *SLOT ) { +#else +INLINE UINT32 OPL_CALC_SLOT( OPL_SLOT *SLOT ) { +#endif /* calcrate envelope generator */ - if( (SLOT->evc+=SLOT->evs) >= SLOT->eve ) - { + if( (SLOT->evc+=SLOT->evs) >= SLOT->eve ) { switch( SLOT->evm ){ - case ENV_MOD_AR: /* ATTACK -> DECAY1 */ - /* next DR */ - SLOT->evm = ENV_MOD_DR; - SLOT->evc = EG_DST; - SLOT->eve = SLOT->SL; - SLOT->evs = SLOT->evsd; - break; - case ENV_MOD_DR: /* DECAY -> SL or RR */ - SLOT->evc = SLOT->SL; - SLOT->eve = EG_DED; - if(SLOT->eg_typ) - { + case ENV_MOD_AR: /* ATTACK -> DECAY1 */ + /* next DR */ + SLOT->evm = ENV_MOD_DR; + SLOT->evc = EG_DST; + SLOT->eve = SLOT->SL; + SLOT->evs = SLOT->evsd; + break; + case ENV_MOD_DR: /* DECAY -> SL or RR */ + SLOT->evc = SLOT->SL; + SLOT->eve = EG_DED; + if(SLOT->eg_typ) + { + SLOT->evs = 0; + } + else + { + SLOT->evm = ENV_MOD_RR; + SLOT->evs = SLOT->evsr; + } + break; + case ENV_MOD_RR: /* RR -> OFF */ + SLOT->evc = EG_OFF; + SLOT->eve = EG_OFF+1; SLOT->evs = 0; + break; } - else - { - SLOT->evm = ENV_MOD_RR; - SLOT->evs = SLOT->evsr; - } - break; - case ENV_MOD_RR: /* RR -> OFF */ - SLOT->evc = EG_OFF; - SLOT->eve = EG_OFF+1; - SLOT->evs = 0; - break; - } } /* calcrate envelope */ return SLOT->TLL+ENV_CURVE[SLOT->evc>>ENV_BITS]+(SLOT->ams ? ams : 0); } /* set algorythm connection */ -static void set_algorythm( OPL_CH *CH) -{ +static void set_algorythm( OPL_CH *CH) { INT32 *carrier = &outd[0]; CH->connect1 = CH->CON ? carrier : &feedback2; CH->connect2 = carrier; } /* ---------- frequency counter for operater update ---------- */ -INLINE void CALC_FCSLOT(OPL_CH *CH,OPL_SLOT *SLOT) -{ +#ifdef __clang__ +void CALC_FCSLOT(OPL_CH *CH,OPL_SLOT *SLOT) { +#else +INLINE void CALC_FCSLOT(OPL_CH *CH,OPL_SLOT *SLOT) { +#endif int ksr; /* frequency step counter */ SLOT->Incr = CH->fc * SLOT->mul; ksr = CH->kcode >> SLOT->KSR; - if( SLOT->ksr != ksr ) - { + if ( SLOT->ksr != ksr ) { SLOT->ksr = ksr; /* attack , decay rate recalcration */ SLOT->evsa = SLOT->AR[ksr]; @@ -388,8 +409,12 @@ INLINE void CALC_FCSLOT(OPL_CH *CH,OPL_SLOT *SLOT) } /* set multi,am,vib,EG-TYP,KSR,mul */ -INLINE void set_mul(FM_OPL *OPL,int slot,int v) -{ +#ifdef __clang__ +void set_mul(FM_OPL *OPL,int slot,int v) { +#else +INLINE void set_mul(FM_OPL *OPL,int slot,int v) { +#endif + OPL_CH *CH = &OPL->P_CH[slot/2]; OPL_SLOT *SLOT = &CH->SLOT[slot&1]; @@ -402,8 +427,12 @@ INLINE void set_mul(FM_OPL *OPL,int slot,int v) } /* set ksl & tl */ -INLINE void set_ksl_tl(FM_OPL *OPL,int slot,int v) -{ +#ifdef __clang__ +void set_ksl_tl(FM_OPL *OPL,int slot,int v) { +#else +INLINE void set_ksl_tl(FM_OPL *OPL,int slot,int v) { +#endif + OPL_CH *CH = &OPL->P_CH[slot/2]; OPL_SLOT *SLOT = &CH->SLOT[slot&1]; int ksl = v>>6; /* 0 / 1.5 / 3 / 6 db/OCT */ @@ -411,15 +440,18 @@ INLINE void set_ksl_tl(FM_OPL *OPL,int slot,int v) SLOT->ksl = ksl ? 3-ksl : 31; SLOT->TL = (v&0x3f)*(0.75/EG_STEP); /* 0.75db step */ - if( !(OPL->mode&0x80) ) - { /* not CSM latch total level */ + if ( !(OPL->mode&0x80) ) { /* not CSM latch total level */ SLOT->TLL = SLOT->TL + (CH->ksl_base>>SLOT->ksl); } } /* set attack rate & decay rate */ -INLINE void set_ar_dr(FM_OPL *OPL,int slot,int v) -{ +#ifdef __clang__ +void set_ar_dr(FM_OPL *OPL,int slot,int v) { +#else +INLINE void set_ar_dr(FM_OPL *OPL,int slot,int v) { +#endif + OPL_CH *CH = &OPL->P_CH[slot/2]; OPL_SLOT *SLOT = &CH->SLOT[slot&1]; int ar = v>>4; @@ -427,33 +459,48 @@ INLINE void set_ar_dr(FM_OPL *OPL,int slot,int v) SLOT->AR = ar ? &OPL->AR_TABLE[ar<<2] : RATE_0; SLOT->evsa = SLOT->AR[SLOT->ksr]; - if( SLOT->evm == ENV_MOD_AR ) SLOT->evs = SLOT->evsa; + if ( SLOT->evm == ENV_MOD_AR ) { + SLOT->evs = SLOT->evsa; + } SLOT->DR = dr ? &OPL->DR_TABLE[dr<<2] : RATE_0; SLOT->evsd = SLOT->DR[SLOT->ksr]; - if( SLOT->evm == ENV_MOD_DR ) SLOT->evs = SLOT->evsd; + + if ( SLOT->evm == ENV_MOD_DR ) { + SLOT->evs = SLOT->evsd; + } } /* set sustain level & release rate */ -INLINE void set_sl_rr(FM_OPL *OPL,int slot,int v) -{ +#ifdef __clang__ +void set_sl_rr(FM_OPL *OPL,int slot,int v) { +#else +INLINE void set_sl_rr(FM_OPL *OPL,int slot,int v) { +#endif OPL_CH *CH = &OPL->P_CH[slot/2]; OPL_SLOT *SLOT = &CH->SLOT[slot&1]; int sl = v>>4; int rr = v & 0x0f; SLOT->SL = SL_TABLE[sl]; - if( SLOT->evm == ENV_MOD_DR ) SLOT->eve = SLOT->SL; + if ( SLOT->evm == ENV_MOD_DR ) { + SLOT->eve = SLOT->SL; + } SLOT->RR = &OPL->DR_TABLE[rr<<2]; SLOT->evsr = SLOT->RR[SLOT->ksr]; - if( SLOT->evm == ENV_MOD_RR ) SLOT->evs = SLOT->evsr; + if ( SLOT->evm == ENV_MOD_RR ) { + SLOT->evs = SLOT->evsr; + } } /* operator output calcrator */ #define OP_OUT(slot,env,con) slot->wavetable[((slot->Cnt+con)/(0x1000000/SIN_ENT))&(SIN_ENT-1)][env] /* ---------- calcrate one of channel ---------- */ -INLINE void OPL_CALC_CH( OPL_CH *CH ) -{ +#ifdef __clang__ +void OPL_CALC_CH( OPL_CH *CH ) { +#else +INLINE void OPL_CALC_CH( OPL_CH *CH ) { +#endif UINT32 env_out; OPL_SLOT *SLOT; @@ -461,35 +508,35 @@ INLINE void OPL_CALC_CH( OPL_CH *CH ) /* SLOT 1 */ SLOT = &CH->SLOT[SLOT1]; env_out=OPL_CALC_SLOT(SLOT); - if( env_out < EG_ENT-1 ) - { + if( env_out < EG_ENT-1 ) { /* PG */ - if(SLOT->vib) SLOT->Cnt += (SLOT->Incr*vib/VIB_RATE); - else SLOT->Cnt += SLOT->Incr; + if (SLOT->vib) { + SLOT->Cnt += (SLOT->Incr*vib/VIB_RATE); + } else { + SLOT->Cnt += SLOT->Incr; + } /* connectoion */ - if(CH->FB) - { + if(CH->FB) { int feedback1 = (CH->op1_out[0]+CH->op1_out[1])>>CH->FB; CH->op1_out[1] = CH->op1_out[0]; *CH->connect1 += CH->op1_out[0] = OP_OUT(SLOT,env_out,feedback1); - } - else - { + } else { *CH->connect1 += OP_OUT(SLOT,env_out,0); } - }else - { + } else { CH->op1_out[1] = CH->op1_out[0]; CH->op1_out[0] = 0; } /* SLOT 2 */ SLOT = &CH->SLOT[SLOT2]; env_out=OPL_CALC_SLOT(SLOT); - if( env_out < EG_ENT-1 ) - { + if ( env_out < EG_ENT-1 ) { /* PG */ - if(SLOT->vib) SLOT->Cnt += (SLOT->Incr*vib/VIB_RATE); - else SLOT->Cnt += SLOT->Incr; + if (SLOT->vib) { + SLOT->Cnt += (SLOT->Incr*vib/VIB_RATE); + } else { + SLOT->Cnt += SLOT->Incr; + } /* connectoion */ outd[0] += OP_OUT(SLOT,env_out, feedback2); } @@ -497,8 +544,11 @@ INLINE void OPL_CALC_CH( OPL_CH *CH ) /* ---------- calcrate rythm block ---------- */ #define WHITE_NOISE_db 6.0 -INLINE void OPL_CALC_RH( OPL_CH *CH ) -{ +#ifdef __clang__ +void OPL_CALC_RH( OPL_CH *CH ) { +#else +INLINE void OPL_CALC_RH( OPL_CH *CH ) { +#endif UINT32 env_tam,env_sd,env_top,env_hh; int whitenoise = (rand()&1)*(WHITE_NOISE_db/EG_STEP); INT32 tone8; @@ -511,24 +561,22 @@ INLINE void OPL_CALC_RH( OPL_CH *CH ) /* SLOT 1 */ SLOT = &CH[6].SLOT[SLOT1]; env_out=OPL_CALC_SLOT(SLOT); - if( env_out < EG_ENT-1 ) - { + if ( env_out < EG_ENT-1 ) { /* PG */ - if(SLOT->vib) SLOT->Cnt += (SLOT->Incr*vib/VIB_RATE); - else SLOT->Cnt += SLOT->Incr; + if (SLOT->vib) { + SLOT->Cnt += (SLOT->Incr*vib/VIB_RATE); + } else { + SLOT->Cnt += SLOT->Incr; + } /* connectoion */ - if(CH[6].FB) - { + if(CH[6].FB) { int feedback1 = (CH[6].op1_out[0]+CH[6].op1_out[1])>>CH[6].FB; CH[6].op1_out[1] = CH[6].op1_out[0]; feedback2 = CH[6].op1_out[0] = OP_OUT(SLOT,env_out,feedback1); - } - else - { + } else { feedback2 = OP_OUT(SLOT,env_out,0); } - }else - { + } else { feedback2 = 0; CH[6].op1_out[1] = CH[6].op1_out[0]; CH[6].op1_out[0] = 0; @@ -536,11 +584,13 @@ INLINE void OPL_CALC_RH( OPL_CH *CH ) /* SLOT 2 */ SLOT = &CH[6].SLOT[SLOT2]; env_out=OPL_CALC_SLOT(SLOT); - if( env_out < EG_ENT-1 ) - { + if( env_out < EG_ENT-1 ) { /* PG */ - if(SLOT->vib) SLOT->Cnt += (SLOT->Incr*vib/VIB_RATE); - else SLOT->Cnt += SLOT->Incr; + if (SLOT->vib) { + SLOT->Cnt += (SLOT->Incr*vib/VIB_RATE); + } else { + SLOT->Cnt += SLOT->Incr; + } /* connectoion */ outd[0] += OP_OUT(SLOT,env_out, feedback2)*2; } @@ -555,106 +605,121 @@ INLINE void OPL_CALC_RH( OPL_CH *CH ) env_hh =OPL_CALC_SLOT(SLOT7_1) + whitenoise; /* PG */ - if(SLOT7_1->vib) SLOT7_1->Cnt += (2*SLOT7_1->Incr*vib/VIB_RATE); - else SLOT7_1->Cnt += 2*SLOT7_1->Incr; - if(SLOT7_2->vib) SLOT7_2->Cnt += ((CH[7].fc*8)*vib/VIB_RATE); - else SLOT7_2->Cnt += (CH[7].fc*8); - if(SLOT8_1->vib) SLOT8_1->Cnt += (SLOT8_1->Incr*vib/VIB_RATE); - else SLOT8_1->Cnt += SLOT8_1->Incr; - if(SLOT8_2->vib) SLOT8_2->Cnt += ((CH[8].fc*48)*vib/VIB_RATE); - else SLOT8_2->Cnt += (CH[8].fc*48); + if(SLOT7_1->vib) { + SLOT7_1->Cnt += (2*SLOT7_1->Incr*vib/VIB_RATE); + } else { + SLOT7_1->Cnt += 2*SLOT7_1->Incr; + } + if (SLOT7_2->vib) { + SLOT7_2->Cnt += ((CH[7].fc*8)*vib/VIB_RATE); + } else { + SLOT7_2->Cnt += (CH[7].fc*8); + } + if (SLOT8_1->vib) { + SLOT8_1->Cnt += (SLOT8_1->Incr*vib/VIB_RATE); + } else { + SLOT8_1->Cnt += SLOT8_1->Incr; + } + if (SLOT8_2->vib) { + SLOT8_2->Cnt += ((CH[8].fc*48)*vib/VIB_RATE); + } + else { + SLOT8_2->Cnt += (CH[8].fc*48); + } tone8 = OP_OUT(SLOT8_2,whitenoise,0 ); /* SD */ - if( env_sd < EG_ENT-1 ) + if( env_sd < EG_ENT-1 ) { outd[0] += OP_OUT(SLOT7_1,env_sd, 0)*8; + } /* TAM */ - if( env_tam < EG_ENT-1 ) + if( env_tam < EG_ENT-1 ) { outd[0] += OP_OUT(SLOT8_1,env_tam, 0)*2; + } /* TOP-CY */ - if( env_top < EG_ENT-1 ) + if( env_top < EG_ENT-1 ) { outd[0] += OP_OUT(SLOT7_2,env_top,tone8)*2; + } /* HH */ - if( env_hh < EG_ENT-1 ) + if( env_hh < EG_ENT-1 ) { outd[0] += OP_OUT(SLOT7_2,env_hh,tone8)*2; + } } /* ----------- initialize time tabls ----------- */ -static void init_timetables( FM_OPL *OPL , int ARRATE , int DRRATE ) -{ +static void init_timetables( FM_OPL *OPL , int ARRATE , int DRRATE ) { int i; double rate; /* make attack rate & decay rate tables */ - for (i = 0;i < 4;i++) OPL->AR_TABLE[i] = OPL->DR_TABLE[i] = 0; - for (i = 4;i <= 60;i++){ - rate = OPL->freqbase; /* frequency rate */ - if( i < 60 ) rate *= 1.0+(i&3)*0.25; /* b0-1 : x1 , x1.25 , x1.5 , x1.75 */ - rate *= 1<<((i>>2)-1); /* b2-5 : shift bit */ - rate *= (double)(EG_ENT<AR_TABLE[i] = rate / ARRATE; - OPL->DR_TABLE[i] = rate / DRRATE; + for ( i = 0; i < 4; i++ ) OPL->AR_TABLE[i] = OPL->DR_TABLE[i] = 0; { + for (i = 4; i <= 60; i++) { + rate = OPL->freqbase; /* frequency rate */ + if( i < 60 ) { + rate *= 1.0+(i&3)*0.25; /* b0-1 : x1 , x1.25 , x1.5 , x1.75 */ + } + rate *= 1<<((i>>2)-1); /* b2-5 : shift bit */ + rate *= (double)(EG_ENT<AR_TABLE[i] = rate / ARRATE; + OPL->DR_TABLE[i] = rate / DRRATE; + } + for ( i = 60; i < 75; i++ ) { + OPL->AR_TABLE[i] = EG_AED-1; + OPL->DR_TABLE[i] = OPL->DR_TABLE[60]; + } + #if 0 + for ( i = 0; i < 64 ; i++ ) { /* make for overflow area */ + LOG(LOG_WAR,("rate %2d , ar %f ms , dr %f ms \n",i, + ((double)(EG_ENT<AR_TABLE[i]) * (1000.0 / OPL->rate), + ((double)(EG_ENT<DR_TABLE[i]) * (1000.0 / OPL->rate) )); + } + #endif } - for (i = 60;i < 75;i++) - { - OPL->AR_TABLE[i] = EG_AED-1; - OPL->DR_TABLE[i] = OPL->DR_TABLE[60]; - } -#if 0 - for (i = 0;i < 64 ;i++){ /* make for overflow area */ - LOG(LOG_WAR,("rate %2d , ar %f ms , dr %f ms \n",i, - ((double)(EG_ENT<AR_TABLE[i]) * (1000.0 / OPL->rate), - ((double)(EG_ENT<DR_TABLE[i]) * (1000.0 / OPL->rate) )); - } -#endif } /* ---------- generic table initialize ---------- */ -static int OPLOpenTable( void ) -{ +static int OPLOpenTable( void ) { int s,t; double rate; int i,j; double pom; /* allocate dynamic tables */ - if( (TL_TABLE = malloc(TL_MAX*2*sizeof(INT32))) == NULL) + if ( (TL_TABLE = malloc(TL_MAX*2*sizeof(INT32))) == NULL ) { return 0; - if( (SIN_TABLE = malloc(SIN_ENT*4 *sizeof(INT32 *))) == NULL) - { + } + if ( (SIN_TABLE = malloc(SIN_ENT*4 *sizeof(INT32 *))) == NULL ) { free(TL_TABLE); return 0; } - if( (AMS_TABLE = malloc(AMS_ENT*2 *sizeof(INT32))) == NULL) - { + if ( (AMS_TABLE = malloc(AMS_ENT*2 *sizeof(INT32))) == NULL ) { free(TL_TABLE); free(SIN_TABLE); return 0; } - if( (VIB_TABLE = malloc(VIB_ENT*2 *sizeof(INT32))) == NULL) - { + if ( (VIB_TABLE = malloc(VIB_ENT*2 *sizeof(INT32))) == NULL ) { free(TL_TABLE); free(SIN_TABLE); free(AMS_TABLE); return 0; } /* make total level table */ - for (t = 0;t < EG_ENT-1 ;t++){ + for ( t = 0; t < EG_ENT-1; t++ ) { rate = ((1< voltage */ TL_TABLE[ t] = (int)rate; TL_TABLE[TL_MAX+t] = -TL_TABLE[t]; /* LOG(LOG_INF,("TotalLevel(%3d) = %x\n",t,TL_TABLE[t]));*/ } /* fill volume off area */ - for ( t = EG_ENT-1; t < TL_MAX ;t++){ + for ( t = EG_ENT-1; t < TL_MAX; t++) { TL_TABLE[t] = TL_TABLE[TL_MAX+t] = 0; } /* make sinwave table (total level offet) */ - /* degree 0 = degree 180 = off */ - SIN_TABLE[0] = SIN_TABLE[SIN_ENT/2] = &TL_TABLE[EG_ENT-1]; - for (s = 1;s <= SIN_ENT/4;s++){ + /* degree 0 = degree 180 = off */ + SIN_TABLE[0] = SIN_TABLE[SIN_ENT/2] = &TL_TABLE[EG_ENT-1]; + for ( s = 1; s <= SIN_ENT/4; s++) { pom = sin(2*PI*s/SIN_ENT); /* sin */ pom = 20*log10(1/pom); /* decibel */ j = pom / EG_STEP; /* TL_TABLE steps */ @@ -665,16 +730,14 @@ static int OPLOpenTable( void ) SIN_TABLE[SIN_ENT/2+s] = SIN_TABLE[SIN_ENT -s] = &TL_TABLE[TL_MAX+j]; /* LOG(LOG_INF,("sin(%3d) = %f:%f db\n",s,pom,(double)j * EG_STEP));*/ } - for (s = 0;s < SIN_ENT;s++) - { + for ( s = 0; s < SIN_ENT; s++) { SIN_TABLE[SIN_ENT*1+s] = s<(SIN_ENT/2) ? SIN_TABLE[s] : &TL_TABLE[EG_ENT]; SIN_TABLE[SIN_ENT*2+s] = SIN_TABLE[s % (SIN_ENT/2)]; SIN_TABLE[SIN_ENT*3+s] = (s/(SIN_ENT/4))&1 ? &TL_TABLE[EG_ENT] : SIN_TABLE[SIN_ENT*2+s]; } /* envelope counter -> envelope output table */ - for (i=0; i= EG_ENT ) pom = EG_ENT-1; */ @@ -685,15 +748,13 @@ static int OPLOpenTable( void ) /* off */ ENV_CURVE[EG_OFF>>ENV_BITS]= EG_ENT-1; /* make LFO ams table */ - for (i=0; iSLOT[SLOT1]; OPL_SLOT *slot2 = &CH->SLOT[SLOT2]; /* all key off */ @@ -730,8 +793,7 @@ INLINE void CSMKeyControll(OPL_CH *CH) } /* ---------- opl initialize ---------- */ -static void OPL_initalize(FM_OPL *OPL) -{ +static void OPL_initalize(FM_OPL *OPL) { int fn; /* frequency base */ @@ -741,8 +803,7 @@ static void OPL_initalize(FM_OPL *OPL) /* make time tables */ init_timetables( OPL , OPL_ARRATE , OPL_DRRATE ); /* make fnumber -> increment counter table */ - for( fn=0 ; fn < 1024 ; fn++ ) - { + for( fn=0 ; fn < 1024 ; fn++ ) { OPL->FN_TABLE[fn] = OPL->freqbase * fn * FREQ_RATE * (1<<7) / 2; } /* LFO freq.table */ @@ -751,227 +812,235 @@ static void OPL_initalize(FM_OPL *OPL) } /* ---------- write a OPL registers ---------- */ -static void OPLWriteReg(FM_OPL *OPL, int r, int v) -{ +static void OPLWriteReg(FM_OPL *OPL, int r, int v) { OPL_CH *CH; int slot; int block_fnum; - switch(r&0xe0) - { + switch ( r&0xe0 ) { case 0x00: /* 00-1f:controll */ - switch(r&0x1f) - { - case 0x01: - /* wave selector enable */ - if(OPL->type&OPL_TYPE_WAVESEL) - { - OPL->wavesel = v&0x20; - if(!OPL->wavesel) + switch ( r&0x1f ) { + case 0x01: + /* wave selector enable */ + if(OPL->type&OPL_TYPE_WAVESEL) { - /* preset compatible mode */ - int c; - for(c=0;cmax_ch;c++) + OPL->wavesel = v&0x20; + if( !OPL->wavesel ) { - OPL->P_CH[c].SLOT[SLOT1].wavetable = &SIN_TABLE[0]; - OPL->P_CH[c].SLOT[SLOT2].wavetable = &SIN_TABLE[0]; + /* preset compatible mode */ + int c; + for ( c=0; cmax_ch; c++ ) + { + OPL->P_CH[c].SLOT[SLOT1].wavetable = &SIN_TABLE[0]; + OPL->P_CH[c].SLOT[SLOT2].wavetable = &SIN_TABLE[0]; + } } } - } - return; - case 0x02: /* Timer 1 */ - OPL->T[0] = (256-v)*4; - break; - case 0x03: /* Timer 2 */ - OPL->T[1] = (256-v)*16; - return; - case 0x04: /* IRQ clear / mask and Timer enable */ - if(v&0x80) - { /* IRQ flag clear */ - OPL_STATUS_RESET(OPL,0x7f); - } - else - { /* set IRQ mask ,timer enable*/ - UINT8 st1 = v&1; - UINT8 st2 = (v>>1)&1; - /* IRQRST,T1MSK,t2MSK,EOSMSK,BRMSK,x,ST2,ST1 */ - OPL_STATUS_RESET(OPL,v&0x78); - OPL_STATUSMASK_SET(OPL,((~v)&0x78)|0x01); - /* timer 2 */ - if(OPL->st[1] != st2) - { - double interval = st2 ? (double)OPL->T[1]*OPL->TimerBase : 0.0; - OPL->st[1] = st2; - if (OPL->TimerHandler) (OPL->TimerHandler)(OPL->TimerParam+1,interval); + return; + case 0x02: /* Timer 1 */ + OPL->T[0] = (256-v)*4; + break; + case 0x03: /* Timer 2 */ + OPL->T[1] = (256-v)*16; + return; + case 0x04: /* IRQ clear / mask and Timer enable */ + if ( v&0x80 ) { /* IRQ flag clear */ + OPL_STATUS_RESET(OPL,0x7f); } - /* timer 1 */ - if(OPL->st[0] != st1) - { - double interval = st1 ? (double)OPL->T[0]*OPL->TimerBase : 0.0; - OPL->st[0] = st1; - if (OPL->TimerHandler) (OPL->TimerHandler)(OPL->TimerParam+0,interval); + else { /* set IRQ mask ,timer enable*/ + UINT8 st1 = v&1; + UINT8 st2 = (v>>1)&1; + /* IRQRST,T1MSK,t2MSK,EOSMSK,BRMSK,x,ST2,ST1 */ + OPL_STATUS_RESET(OPL,v&0x78); + OPL_STATUSMASK_SET(OPL,((~v)&0x78)|0x01); + /* timer 2 */ + if ( OPL->st[1] != st2 ) { + double interval = st2 ? (double)OPL->T[1]*OPL->TimerBase : 0.0; + OPL->st[1] = st2; + if ( OPL->TimerHandler ) { + (OPL->TimerHandler)(OPL->TimerParam+1,interval); + } + } + /* timer 1 */ + if ( OPL->st[0] != st1 ) { + double interval = st1 ? (double)OPL->T[0]*OPL->TimerBase : 0.0; + OPL->st[0] = st1; + if ( OPL->TimerHandler ) { + (OPL->TimerHandler)(OPL->TimerParam+0,interval); + } + } } - } - return; -#if BUILD_Y8950 - case 0x06: /* Key Board OUT */ - if(OPL->type&OPL_TYPE_KEYBOARD) - { - if(OPL->keyboardhandler_w) - OPL->keyboardhandler_w(OPL->keyboard_param,v); - else - LOG(LOG_WAR,("OPL:write unmapped KEYBOARD port\n")); - } - return; - case 0x07: /* DELTA-T controll : START,REC,MEMDATA,REPT,SPOFF,x,x,RST */ - if(OPL->type&OPL_TYPE_ADPCM) - YM_DELTAT_ADPCM_Write(OPL->deltat,r-0x07,v); - return; - case 0x08: /* MODE,DELTA-T : CSM,NOTESEL,x,x,smpl,da/ad,64k,rom */ - OPL->mode = v; - v&=0x1f; /* for DELTA-T unit */ - case 0x09: /* START ADD */ - case 0x0a: - case 0x0b: /* STOP ADD */ - case 0x0c: - case 0x0d: /* PRESCALE */ - case 0x0e: - case 0x0f: /* ADPCM data */ - case 0x10: /* DELTA-N */ - case 0x11: /* DELTA-N */ - case 0x12: /* EG-CTRL */ - if(OPL->type&OPL_TYPE_ADPCM) - YM_DELTAT_ADPCM_Write(OPL->deltat,r-0x07,v); - return; -#if 0 - case 0x15: /* DAC data */ - case 0x16: - case 0x17: /* SHIFT */ - return; - case 0x18: /* I/O CTRL (Direction) */ - if(OPL->type&OPL_TYPE_IO) - OPL->portDirection = v&0x0f; - return; - case 0x19: /* I/O DATA */ - if(OPL->type&OPL_TYPE_IO) - { - OPL->portLatch = v; - if(OPL->porthandler_w) - OPL->porthandler_w(OPL->port_param,v&OPL->portDirection); - } - return; - case 0x1a: /* PCM data */ - return; -#endif -#endif + return; + #if BUILD_Y8950 + case 0x06: /* Key Board OUT */ + if ( OPL->type&OPL_TYPE_KEYBOARD ) { + if ( OPL->keyboardhandler_w ) { + OPL->keyboardhandler_w(OPL->keyboard_param,v); + } + else { + LOG(LOG_WAR,("OPL:write unmapped KEYBOARD port\n")); + } + } + return; + case 0x07: /* DELTA-T controll : START,REC,MEMDATA,REPT,SPOFF,x,x,RST */ + if ( OPL->type&OPL_TYPE_ADPCM ) { + YM_DELTAT_ADPCM_Write(OPL->deltat,r-0x07,v); + } + return; + case 0x08: /* MODE,DELTA-T : CSM,NOTESEL,x,x,smpl,da/ad,64k,rom */ + OPL->mode = v; + v&=0x1f; /* for DELTA-T unit */ + case 0x09: /* START ADD */ + case 0x0a: + case 0x0b: /* STOP ADD */ + case 0x0c: + case 0x0d: /* PRESCALE */ + case 0x0e: + case 0x0f: /* ADPCM data */ + case 0x10: /* DELTA-N */ + case 0x11: /* DELTA-N */ + case 0x12: /* EG-CTRL */ + if ( OPL->type&OPL_TYPE_ADPCM ) { + YM_DELTAT_ADPCM_Write(OPL->deltat,r-0x07,v); + } + return; + #if 0 + case 0x15: /* DAC data */ + case 0x16: + case 0x17: /* SHIFT */ + return; + case 0x18: /* I/O CTRL (Direction) */ + if ( OPL->type&OPL_TYPE_IO ) { + OPL->portDirection = v&0x0f; + } + return; + case 0x19: /* I/O DATA */ + if ( OPL->type&OPL_TYPE_IO ) { + OPL->portLatch = v; + if ( OPL->porthandler_w ) { + OPL->porthandler_w(OPL->port_param,v&OPL->portDirection); + } + } + return; + case 0x1a: /* PCM data */ + return; + #endif + #endif } break; case 0x20: /* am,vib,ksr,eg type,mul */ slot = slot_array[r&0x1f]; - if(slot == -1) return; + if ( slot == -1 ) { + return; + } set_mul(OPL,slot,v); return; case 0x40: slot = slot_array[r&0x1f]; - if(slot == -1) return; + if ( slot == -1 ) { + return; + } set_ksl_tl(OPL,slot,v); return; case 0x60: slot = slot_array[r&0x1f]; - if(slot == -1) return; + if ( slot == -1 ) { + return; + } set_ar_dr(OPL,slot,v); return; case 0x80: slot = slot_array[r&0x1f]; - if(slot == -1) return; + if ( slot == -1 ) { + return; + } set_sl_rr(OPL,slot,v); return; case 0xa0: - switch(r) - { - case 0xbd: + switch ( r ) { /* amsep,vibdep,r,bd,sd,tom,tc,hh */ - { - UINT8 rkey = OPL->rythm^v; - OPL->ams_table = &AMS_TABLE[v&0x80 ? AMS_ENT : 0]; - OPL->vib_table = &VIB_TABLE[v&0x40 ? VIB_ENT : 0]; - OPL->rythm = v&0x3f; - if(OPL->rythm&0x20) - { + case 0xbd: { + UINT8 rkey = OPL->rythm^v; + OPL->ams_table = &AMS_TABLE[v&0x80 ? AMS_ENT : 0]; + OPL->vib_table = &VIB_TABLE[v&0x40 ? VIB_ENT : 0]; + OPL->rythm = v&0x3f; + if(OPL->rythm&0x20) { #if 0 - usrintf_showmessage("OPL Rythm mode select"); + usrintf_showmessage("OPL Rythm mode select"); #endif - /* BD key on/off */ - if(rkey&0x10) - { - if(v&0x10) - { - OPL->P_CH[6].op1_out[0] = OPL->P_CH[6].op1_out[1] = 0; - OPL_KEYON(&OPL->P_CH[6].SLOT[SLOT1]); - OPL_KEYON(&OPL->P_CH[6].SLOT[SLOT2]); + /* BD key on/off */ + if ( rkey&0x10 ) { + if ( v&0x10 ) { + OPL->P_CH[6].op1_out[0] = OPL->P_CH[6].op1_out[1] = 0; + OPL_KEYON(&OPL->P_CH[6].SLOT[SLOT1]); + OPL_KEYON(&OPL->P_CH[6].SLOT[SLOT2]); + } else { + OPL_KEYOFF(&OPL->P_CH[6].SLOT[SLOT1]); + OPL_KEYOFF(&OPL->P_CH[6].SLOT[SLOT2]); + } } - else - { - OPL_KEYOFF(&OPL->P_CH[6].SLOT[SLOT1]); - OPL_KEYOFF(&OPL->P_CH[6].SLOT[SLOT2]); + /* SD key on/off */ + if ( rkey&0x08 ) { + if ( v&0x08 ) { + OPL_KEYON(&OPL->P_CH[7].SLOT[SLOT2]); + } else { + OPL_KEYOFF(&OPL->P_CH[7].SLOT[SLOT2]); + } + }/* TAM key on/off */ + if ( rkey&0x04 ) { + if ( v&0x04 ) { + OPL_KEYON(&OPL->P_CH[8].SLOT[SLOT1]); + } else { + OPL_KEYOFF(&OPL->P_CH[8].SLOT[SLOT1]); + } + } + /* TOP-CY key on/off */ + if ( rkey&0x02 ) { + if ( v&0x02 ) { + OPL_KEYON(&OPL->P_CH[8].SLOT[SLOT2]); + } else { + OPL_KEYOFF(&OPL->P_CH[8].SLOT[SLOT2]); + } + } + /* HH key on/off */ + if ( rkey&0x01 ) { + if ( v&0x01 ) { + OPL_KEYON(&OPL->P_CH[7].SLOT[SLOT1]); + } + else { + OPL_KEYOFF(&OPL->P_CH[7].SLOT[SLOT1]); + } } } - /* SD key on/off */ - if(rkey&0x08) - { - if(v&0x08) OPL_KEYON(&OPL->P_CH[7].SLOT[SLOT2]); - else OPL_KEYOFF(&OPL->P_CH[7].SLOT[SLOT2]); - }/* TAM key on/off */ - if(rkey&0x04) - { - if(v&0x04) OPL_KEYON(&OPL->P_CH[8].SLOT[SLOT1]); - else OPL_KEYOFF(&OPL->P_CH[8].SLOT[SLOT1]); - } - /* TOP-CY key on/off */ - if(rkey&0x02) - { - if(v&0x02) OPL_KEYON(&OPL->P_CH[8].SLOT[SLOT2]); - else OPL_KEYOFF(&OPL->P_CH[8].SLOT[SLOT2]); - } - /* HH key on/off */ - if(rkey&0x01) - { - if(v&0x01) OPL_KEYON(&OPL->P_CH[7].SLOT[SLOT1]); - else OPL_KEYOFF(&OPL->P_CH[7].SLOT[SLOT1]); - } - } } return; } /* keyon,block,fnum */ - if( (r&0x0f) > 8) return; + if ( (r&0x0f) > 8 ) { + return; + } CH = &OPL->P_CH[r&0x0f]; - if(!(r&0x10)) - { /* a0-a8 */ + /* a0-a8 */ + if ( !(r&0x10) ) { block_fnum = (CH->block_fnum&0x1f00) | v; } - else - { /* b0-b8 */ + /* b0-b8 */ + else { int keyon = (v>>5)&1; block_fnum = ((v&0x1f)<<8) | (CH->block_fnum&0xff); - if(CH->keyon != keyon) - { - if( (CH->keyon=keyon) ) - { + if ( CH->keyon != keyon ) { + if ( (CH->keyon=keyon) ) { CH->op1_out[0] = CH->op1_out[1] = 0; OPL_KEYON(&CH->SLOT[SLOT1]); OPL_KEYON(&CH->SLOT[SLOT2]); - } - else - { + } else { OPL_KEYOFF(&CH->SLOT[SLOT1]); OPL_KEYOFF(&CH->SLOT[SLOT2]); } } } /* update */ - if(CH->block_fnum != block_fnum) - { + if(CH->block_fnum != block_fnum) { int blockRv = 7-(block_fnum>>10); int fnum = block_fnum&0x3ff; CH->block_fnum = block_fnum; @@ -979,28 +1048,33 @@ static void OPLWriteReg(FM_OPL *OPL, int r, int v) CH->ksl_base = KSL_TABLE[block_fnum>>6]; CH->fc = OPL->FN_TABLE[fnum]>>blockRv; CH->kcode = CH->block_fnum>>9; - if( (OPL->mode&0x40) && CH->block_fnum&0x100) CH->kcode |=1; + if ( (OPL->mode&0x40) && CH->block_fnum&0x100 ) { + CH->kcode |=1; + } CALC_FCSLOT(CH,&CH->SLOT[SLOT1]); CALC_FCSLOT(CH,&CH->SLOT[SLOT2]); } return; case 0xc0: /* FB,C */ - if( (r&0x0f) > 8) return; + if ( (r&0x0f) > 8 ) { + return; + } CH = &OPL->P_CH[r&0x0f]; - { + //{ int feedback = (v>>1)&7; CH->FB = feedback ? (8+1) - feedback : 0; CH->CON = v&1; set_algorythm(CH); - } + //} return; case 0xe0: /* wave type */ slot = slot_array[r&0x1f]; - if(slot == -1) return; + if ( slot == -1 ) { + return; + } CH = &OPL->P_CH[slot/2]; - if(OPL->wavesel) - { + if (OPL->wavesel) { /* LOG(LOG_INF,("OPL SLOT %d wave select %d\n",slot,v&3)); */ CH->SLOT[slot&1].wavetable = &SIN_TABLE[(v&0x03)*SIN_ENT]; } @@ -1009,25 +1083,28 @@ static void OPLWriteReg(FM_OPL *OPL, int r, int v) } /* lock/unlock for common table */ -static int OPL_LockTable(void) -{ +static int OPL_LockTable(void) { num_lock++; - if(num_lock>1) return 0; + if ( num_lock>1 ) { + return 0; + } /* first time */ cur_chip = NULL; /* allocate total level table (128kb space) */ - if( !OPLOpenTable() ) - { + if ( !OPLOpenTable() ) { num_lock--; return -1; } return 0; } -static void OPL_UnLockTable(void) -{ - if(num_lock) num_lock--; - if(num_lock) return; +static void OPL_UnLockTable(void) { + if(num_lock) { + num_lock--; + } + if(num_lock) { + return; + } /* last time */ cur_chip = NULL; OPLCloseTable(); @@ -1039,8 +1116,7 @@ static void OPL_UnLockTable(void) /*******************************************************************************/ /* ---------- update one of chip ----------- */ -void YM3812UpdateOne(FM_OPL *OPL, INT16 *buffer, int length) -{ +void YM3812UpdateOne(FM_OPL *OPL, INT16 *buffer, int length) { int i; int data; OPLSAMPLE *buf = buffer; @@ -1049,7 +1125,7 @@ void YM3812UpdateOne(FM_OPL *OPL, INT16 *buffer, int length) UINT8 rythm = OPL->rythm&0x20; OPL_CH *CH,*R_CH; - if( (void *)OPL != cur_chip ){ + if ( (void *)OPL != cur_chip ) { cur_chip = (void *)OPL; /* channel pointers */ S_CH = OPL->P_CH; @@ -1066,8 +1142,7 @@ void YM3812UpdateOne(FM_OPL *OPL, INT16 *buffer, int length) vib_table = OPL->vib_table; } R_CH = rythm ? &S_CH[6] : E_CH; - for( i=0; i < length ; i++ ) - { + for ( i=0; i < length ; i++ ) { /* channel A channel B channel C */ /* LFO */ ams = ams_table[(amsCnt+=amsIncr)>>AMS_SHIFT]; @@ -1088,11 +1163,13 @@ void YM3812UpdateOne(FM_OPL *OPL, INT16 *buffer, int length) OPL->amsCnt = amsCnt; OPL->vibCnt = vibCnt; #ifdef OPL_OUTPUT_LOG - if(opl_dbg_fp) - { - for(opl_dbg_chip=0;opl_dbg_chipP_CH; @@ -1131,22 +1207,24 @@ void Y8950UpdateOne(FM_OPL *OPL, INT16 *buffer, int length) vib_table = OPL->vib_table; } R_CH = rythm ? &S_CH[6] : E_CH; - for( i=0; i < length ; i++ ) - { + for ( i=0; i < length ; i++ ) { /* channel A channel B channel C */ /* LFO */ ams = ams_table[(amsCnt+=amsIncr)>>AMS_SHIFT]; vib = vib_table[(vibCnt+=vibIncr)>>VIB_SHIFT]; outd[0] = 0; /* deltaT ADPCM */ - if( DELTAT->portstate ) + if( DELTAT->portstate ) { YM_DELTAT_ADPCM_CALC(DELTAT); + } /* FM part */ - for(CH=S_CH ; CH < R_CH ; CH++) + for ( CH=S_CH ; CH < R_CH ; CH++ ) { OPL_CALC_CH(CH); + } /* Rythn part */ - if(rythm) + if ( rythm ) { OPL_CALC_RH(S_CH); + } /* limit check */ data = Limit( outd[0] , OPL_MAXOUT, OPL_MINOUT ); /* store to sound buffer */ @@ -1155,14 +1233,14 @@ void Y8950UpdateOne(FM_OPL *OPL, INT16 *buffer, int length) OPL->amsCnt = amsCnt; OPL->vibCnt = vibCnt; /* deltaT START flag */ - if( !DELTAT->portstate ) + if ( !DELTAT->portstate ) { OPL->status &= 0xfe; + } } #endif /* ---------- reset one of chip ---------- */ -void OPLResetChip(FM_OPL *OPL) -{ +void OPLResetChip(FM_OPL *OPL) { int c,s; int i; @@ -1174,14 +1252,14 @@ void OPLResetChip(FM_OPL *OPL) OPLWriteReg(OPL,0x02,0); /* Timer1 */ OPLWriteReg(OPL,0x03,0); /* Timer2 */ OPLWriteReg(OPL,0x04,0); /* IRQ mask clear */ - for(i = 0xff ; i >= 0x20 ; i-- ) OPLWriteReg(OPL,i,0); + for ( i = 0xff ; i >= 0x20 ; i-- ) { + OPLWriteReg(OPL,i,0); + } /* reset OPerator paramater */ - for( c = 0 ; c < OPL->max_ch ; c++ ) - { + for ( c = 0 ; c < OPL->max_ch ; c++ ) { OPL_CH *CH = &OPL->P_CH[c]; /* OPL->P_CH[c].PAN = OPN_CENTER; */ - for(s = 0 ; s < 2 ; s++ ) - { + for ( s = 0 ; s < 2 ; s++ ) { /* wave table */ CH->SLOT[s].wavetable = &SIN_TABLE[0]; /* CH->SLOT[s].evm = ENV_MOD_RR; */ @@ -1191,8 +1269,7 @@ void OPLResetChip(FM_OPL *OPL) } } #if BUILD_Y8950 - if(OPL->type&OPL_TYPE_ADPCM) - { + if ( OPL->type&OPL_TYPE_ADPCM ) { YM_DELTAT *DELTAT = OPL->deltat; DELTAT->freqbase = OPL->freqbase; @@ -1206,29 +1283,37 @@ void OPLResetChip(FM_OPL *OPL) /* ---------- Create one of vietual YM3812 ---------- */ /* 'rate' is sampling rate and 'bufsiz' is the size of the */ -FM_OPL *OPLCreate(int type, int clock, int rate) -{ +FM_OPL *OPLCreate(int type, int clock, int rate) { char *ptr; FM_OPL *OPL; int state_size; int max_ch = 9; /* normaly 9 channels */ - if( OPL_LockTable() ==-1) return NULL; + if ( OPL_LockTable() ==-1 ) { + return NULL; + } /* allocate OPL state space */ state_size = sizeof(FM_OPL); state_size += sizeof(OPL_CH)*max_ch; #if BUILD_Y8950 - if(type&OPL_TYPE_ADPCM) state_size+= sizeof(YM_DELTAT); + if ( type&OPL_TYPE_ADPCM ) { + state_size+= sizeof(YM_DELTAT); + } #endif /* allocate memory block */ ptr = malloc(state_size); - if(ptr==NULL) return NULL; + if (ptr==NULL) { + return NULL; + } /* clear */ memset(ptr,0,state_size); OPL = (FM_OPL *)ptr; ptr+=sizeof(FM_OPL); OPL->P_CH = (OPL_CH *)ptr; ptr+=sizeof(OPL_CH)*max_ch; #if BUILD_Y8950 - if(type&OPL_TYPE_ADPCM) OPL->deltat = (YM_DELTAT *)ptr; ptr+=sizeof(YM_DELTAT); + if ( type&OPL_TYPE_ADPCM ) { + OPL->deltat = (YM_DELTAT *)ptr; + ptr+=sizeof(YM_DELTAT); + } #endif /* set channel state pointer */ OPL->type = type; @@ -1240,15 +1325,13 @@ FM_OPL *OPLCreate(int type, int clock, int rate) /* reset chip */ OPLResetChip(OPL); #ifdef OPL_OUTPUT_LOG - if(!opl_dbg_fp) - { + if (!opl_dbg_fp) { opl_dbg_fp = fopen("opllog.opl","wb"); opl_dbg_maxchip = 0; } - if(opl_dbg_fp) - { + if (opl_dbg_fp) { opl_dbg_opl[opl_dbg_maxchip] = OPL; - fprintf(opl_dbg_fp,"%c%c%c%c%c%c",0x00+opl_dbg_maxchip, + fprintf(opl_dbg_fp, "%c%c%c%c%c%c", 0x00+opl_dbg_maxchip, type, clock&0xff, (clock/0x100)&0xff, @@ -1261,11 +1344,9 @@ FM_OPL *OPLCreate(int type, int clock, int rate) } /* ---------- Destroy one of vietual YM3812 ---------- */ -void OPLDestroy(FM_OPL *OPL) -{ +void OPLDestroy(FM_OPL *OPL) { #ifdef OPL_OUTPUT_LOG - if(opl_dbg_fp) - { + if(opl_dbg_fp) { fclose(opl_dbg_fp); opl_dbg_fp = NULL; } @@ -1276,115 +1357,112 @@ void OPLDestroy(FM_OPL *OPL) /* ---------- Option handlers ---------- */ -void OPLSetTimerHandler(FM_OPL *OPL,OPL_TIMERHANDLER TimerHandler,int channelOffset) -{ +void OPLSetTimerHandler(FM_OPL *OPL,OPL_TIMERHANDLER TimerHandler,int channelOffset) { OPL->TimerHandler = TimerHandler; OPL->TimerParam = channelOffset; } -void OPLSetIRQHandler(FM_OPL *OPL,OPL_IRQHANDLER IRQHandler,int param) -{ +void OPLSetIRQHandler(FM_OPL *OPL,OPL_IRQHANDLER IRQHandler,int param) { OPL->IRQHandler = IRQHandler; OPL->IRQParam = param; } -void OPLSetUpdateHandler(FM_OPL *OPL,OPL_UPDATEHANDLER UpdateHandler,int param) -{ +void OPLSetUpdateHandler(FM_OPL *OPL,OPL_UPDATEHANDLER UpdateHandler,int param) { OPL->UpdateHandler = UpdateHandler; OPL->UpdateParam = param; } #if BUILD_Y8950 -void OPLSetPortHandler(FM_OPL *OPL,OPL_PORTHANDLER_W PortHandler_w,OPL_PORTHANDLER_R PortHandler_r,int param) -{ +void OPLSetPortHandler(FM_OPL *OPL,OPL_PORTHANDLER_W PortHandler_w,OPL_PORTHANDLER_R PortHandler_r,int param) { OPL->porthandler_w = PortHandler_w; OPL->porthandler_r = PortHandler_r; OPL->port_param = param; } -void OPLSetKeyboardHandler(FM_OPL *OPL,OPL_PORTHANDLER_W KeyboardHandler_w,OPL_PORTHANDLER_R KeyboardHandler_r,int param) -{ +void OPLSetKeyboardHandler(FM_OPL *OPL,OPL_PORTHANDLER_W KeyboardHandler_w,OPL_PORTHANDLER_R KeyboardHandler_r,int param) { OPL->keyboardhandler_w = KeyboardHandler_w; OPL->keyboardhandler_r = KeyboardHandler_r; OPL->keyboard_param = param; } #endif /* ---------- YM3812 I/O interface ---------- */ -int OPLWrite(FM_OPL *OPL,int a,int v) -{ - if( !(a&1) ) - { /* address port */ +int OPLWrite(FM_OPL *OPL,int a,int v) { + if ( !(a&1) ) { /* address port */ OPL->address = v & 0xff; - } - else - { /* data port */ - if(OPL->UpdateHandler) OPL->UpdateHandler(OPL->UpdateParam,0); + } else { /* data port */ + if ( OPL->UpdateHandler ) { + OPL->UpdateHandler(OPL->UpdateParam,0); + } #ifdef OPL_OUTPUT_LOG - if(opl_dbg_fp) - { - for(opl_dbg_chip=0;opl_dbg_chipaddress,v); - } + if ( opl_dbg_fp ) { + for ( opl_dbg_chip=0; opl_dbg_chipaddress, v); + } #endif OPLWriteReg(OPL,OPL->address,v); } return OPL->status>>7; } -unsigned char OPLRead(FM_OPL *OPL,int a) -{ - if( !(a&1) ) - { /* status port */ +unsigned char OPLRead(FM_OPL *OPL,int a) { + /* status port */ + if( !(a&1) ) { return OPL->status & (OPL->statusmask|0x80); } + /* data port */ - switch(OPL->address) - { - case 0x05: /* KeyBoard IN */ - if(OPL->type&OPL_TYPE_KEYBOARD) - { - if(OPL->keyboardhandler_r) - return OPL->keyboardhandler_r(OPL->keyboard_param); - else - LOG(LOG_WAR,("OPL:read unmapped KEYBOARD port\n")); - } - return 0; -#if 0 - case 0x0f: /* ADPCM-DATA */ - return 0; -#endif - case 0x19: /* I/O DATA */ - if(OPL->type&OPL_TYPE_IO) - { - if(OPL->porthandler_r) - return OPL->porthandler_r(OPL->port_param); - else - LOG(LOG_WAR,("OPL:read unmapped I/O port\n")); - } - return 0; - case 0x1a: /* PCM-DATA */ - return 0; + switch(OPL->address) { + case 0x05: /* KeyBoard IN */ + if ( OPL->type&OPL_TYPE_KEYBOARD ) { + if ( OPL->keyboardhandler_r ) { + return OPL->keyboardhandler_r(OPL->keyboard_param); + } else { + LOG(LOG_WAR,("OPL:read unmapped KEYBOARD port\n")); + } + } + return 0; + #if 0 + case 0x0f: /* ADPCM-DATA */ + return 0; + #endif + case 0x19: /* I/O DATA */ + if ( OPL->type&OPL_TYPE_IO ) { + if ( OPL->porthandler_r ) { + return OPL->porthandler_r(OPL->port_param); + } + else { + LOG(LOG_WAR,("OPL:read unmapped I/O port\n")); + } + } + return 0; + case 0x1a: /* PCM-DATA */ + return 0; } return 0; } -int OPLTimerOver(FM_OPL *OPL,int c) -{ - if( c ) - { /* Timer B */ +int OPLTimerOver(FM_OPL *OPL,int c) { + /* Timer B */ + if( c ) { OPL_STATUS_SET(OPL,0x20); } - else - { /* Timer A */ + /* Timer A */ + else { OPL_STATUS_SET(OPL,0x40); - /* CSM mode key,TL controll */ - if( OPL->mode & 0x80 ) - { /* CSM mode total level latch and auto key on */ + /* CSM mode key,TL control */ + /* CSM mode total level latch and auto key on */ + if( OPL->mode & 0x80 ) { int ch; - if(OPL->UpdateHandler) OPL->UpdateHandler(OPL->UpdateParam,0); - for(ch=0;ch<9;ch++) + if (OPL->UpdateHandler) { + OPL->UpdateHandler(OPL->UpdateParam,0); + } + for ( ch=0; ch<9; ch++ ) { CSMKeyControll( &OPL->P_CH[ch] ); + } } } /* reload timer */ - if (OPL->TimerHandler) (OPL->TimerHandler)(OPL->TimerParam+c,(double)OPL->T[c]*OPL->TimerBase); + if ( OPL->TimerHandler ) { + (OPL->TimerHandler)(OPL->TimerParam+c,(double)OPL->T[c]*OPL->TimerBase); + } return OPL->status>>7; } From 7fb434c26d33f1b9443d36e6fde79161c3d2b353 Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Thu, 8 May 2014 11:05:54 -0700 Subject: [PATCH 53/55] #ifdef indent corrections --- plugins/opl2/fmopl.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/plugins/opl2/fmopl.c b/plugins/opl2/fmopl.c index c8ef05352..c1149741d 100644 --- a/plugins/opl2/fmopl.c +++ b/plugins/opl2/fmopl.c @@ -668,13 +668,13 @@ static void init_timetables( FM_OPL *OPL , int ARRATE , int DRRATE ) { OPL->AR_TABLE[i] = EG_AED-1; OPL->DR_TABLE[i] = OPL->DR_TABLE[60]; } - #if 0 +#if 0 for ( i = 0; i < 64 ; i++ ) { /* make for overflow area */ LOG(LOG_WAR,("rate %2d , ar %f ms , dr %f ms \n",i, ((double)(EG_ENT<AR_TABLE[i]) * (1000.0 / OPL->rate), ((double)(EG_ENT<DR_TABLE[i]) * (1000.0 / OPL->rate) )); } - #endif +#endif } } @@ -871,7 +871,7 @@ static void OPLWriteReg(FM_OPL *OPL, int r, int v) { } } return; - #if BUILD_Y8950 +#if BUILD_Y8950 case 0x06: /* Key Board OUT */ if ( OPL->type&OPL_TYPE_KEYBOARD ) { if ( OPL->keyboardhandler_w ) { @@ -904,7 +904,7 @@ static void OPLWriteReg(FM_OPL *OPL, int r, int v) { YM_DELTAT_ADPCM_Write(OPL->deltat,r-0x07,v); } return; - #if 0 +#if 0 case 0x15: /* DAC data */ case 0x16: case 0x17: /* SHIFT */ @@ -924,8 +924,8 @@ static void OPLWriteReg(FM_OPL *OPL, int r, int v) { return; case 0x1a: /* PCM data */ return; - #endif - #endif +#endif +#endif } break; case 0x20: /* am,vib,ksr,eg type,mul */ From 049a88fe8e98ed02cc3d0f99e94f5fb79cf076f5 Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Thu, 8 May 2014 15:36:51 -0400 Subject: [PATCH 54/55] Fix SWH contructors (Apple) @tobydox, please advise as I cannot easily test the win32 impact of this change. --- plugins/LadspaEffect/swh/alias_1407.c | 4 ++-- plugins/LadspaEffect/swh/allpass_1895.c | 4 ++-- plugins/LadspaEffect/swh/am_pitchshift_1433.c | 4 ++-- plugins/LadspaEffect/swh/amp_1181.c | 4 ++-- plugins/LadspaEffect/swh/bandpass_a_iir_1893.c | 4 ++-- plugins/LadspaEffect/swh/bandpass_iir_1892.c | 4 ++-- plugins/LadspaEffect/swh/bode_shifter_1431.c | 4 ++-- plugins/LadspaEffect/swh/bode_shifter_cv_1432.c | 4 ++-- plugins/LadspaEffect/swh/butterworth_1902.c | 4 ++-- plugins/LadspaEffect/swh/chebstortion_1430.c | 4 ++-- plugins/LadspaEffect/swh/comb_1190.c | 4 ++-- plugins/LadspaEffect/swh/comb_1887.c | 4 ++-- plugins/LadspaEffect/swh/comb_splitter_1411.c | 4 ++-- plugins/LadspaEffect/swh/const_1909.c | 4 ++-- plugins/LadspaEffect/swh/crossover_dist_1404.c | 4 ++-- plugins/LadspaEffect/swh/dc_remove_1207.c | 4 ++-- plugins/LadspaEffect/swh/decay_1886.c | 4 ++-- plugins/LadspaEffect/swh/decimator_1202.c | 4 ++-- plugins/LadspaEffect/swh/declip_1195.c | 4 ++-- plugins/LadspaEffect/swh/delay_1898.c | 4 ++-- plugins/LadspaEffect/swh/delayorama_1402.c | 4 ++-- plugins/LadspaEffect/swh/diode_1185.c | 4 ++-- plugins/LadspaEffect/swh/divider_1186.c | 4 ++-- plugins/LadspaEffect/swh/dj_eq_1901.c | 4 ++-- plugins/LadspaEffect/swh/dj_flanger_1438.c | 4 ++-- plugins/LadspaEffect/swh/dyson_compress_1403.c | 4 ++-- plugins/LadspaEffect/swh/fad_delay_1192.c | 4 ++-- plugins/LadspaEffect/swh/fast_lookahead_limiter_1913.c | 4 ++-- plugins/LadspaEffect/swh/flanger_1191.c | 4 ++-- plugins/LadspaEffect/swh/foldover_1213.c | 4 ++-- plugins/LadspaEffect/swh/foverdrive_1196.c | 4 ++-- plugins/LadspaEffect/swh/freq_tracker_1418.c | 4 ++-- plugins/LadspaEffect/swh/gate_1410.c | 4 ++-- plugins/LadspaEffect/swh/giant_flange_1437.c | 4 ++-- plugins/LadspaEffect/swh/gong_1424.c | 4 ++-- plugins/LadspaEffect/swh/gong_beater_1439.c | 4 ++-- plugins/LadspaEffect/swh/gsm_1215.c | 4 ++-- plugins/LadspaEffect/swh/gverb_1216.c | 4 ++-- plugins/LadspaEffect/swh/hard_limiter_1413.c | 4 ++-- plugins/LadspaEffect/swh/harmonic_gen_1220.c | 4 ++-- plugins/LadspaEffect/swh/hermes_filter_1200.c | 4 ++-- plugins/LadspaEffect/swh/highpass_iir_1890.c | 4 ++-- plugins/LadspaEffect/swh/hilbert_1440.c | 4 ++-- plugins/LadspaEffect/swh/imp_1199.c | 4 ++-- plugins/LadspaEffect/swh/impulse_1885.c | 4 ++-- plugins/LadspaEffect/swh/inv_1429.c | 4 ++-- plugins/LadspaEffect/swh/karaoke_1409.c | 4 ++-- plugins/LadspaEffect/swh/latency_1914.c | 4 ++-- plugins/LadspaEffect/swh/lcr_delay_1436.c | 4 ++-- plugins/LadspaEffect/swh/lowpass_iir_1891.c | 4 ++-- plugins/LadspaEffect/swh/ls_filter_1908.c | 4 ++-- plugins/LadspaEffect/swh/matrix_ms_st_1421.c | 4 ++-- plugins/LadspaEffect/swh/matrix_spatialiser_1422.c | 4 ++-- plugins/LadspaEffect/swh/matrix_st_ms_1420.c | 4 ++-- plugins/LadspaEffect/swh/mbeq_1197.c | 4 ++-- plugins/LadspaEffect/swh/mod_delay_1419.c | 4 ++-- plugins/LadspaEffect/swh/multivoice_chorus_1201.c | 4 ++-- plugins/LadspaEffect/swh/notch_iir_1894.c | 4 ++-- plugins/LadspaEffect/swh/phasers_1217.c | 4 ++-- plugins/LadspaEffect/swh/pitch_scale_1193.c | 4 ++-- plugins/LadspaEffect/swh/pitch_scale_1194.c | 4 ++-- plugins/LadspaEffect/swh/plate_1423.c | 4 ++-- plugins/LadspaEffect/swh/pointer_cast_1910.c | 4 ++-- plugins/LadspaEffect/swh/rate_shifter_1417.c | 4 ++-- plugins/LadspaEffect/swh/retro_flange_1208.c | 4 ++-- plugins/LadspaEffect/swh/revdelay_1605.c | 4 ++-- plugins/LadspaEffect/swh/ringmod_1188.c | 4 ++-- plugins/LadspaEffect/swh/satan_maximiser_1408.c | 4 ++-- plugins/LadspaEffect/swh/sc1_1425.c | 4 ++-- plugins/LadspaEffect/swh/sc2_1426.c | 4 ++-- plugins/LadspaEffect/swh/sc3_1427.c | 4 ++-- plugins/LadspaEffect/swh/sc4_1882.c | 4 ++-- plugins/LadspaEffect/swh/sc4m_1916.c | 4 ++-- plugins/LadspaEffect/swh/se4_1883.c | 4 ++-- plugins/LadspaEffect/swh/shaper_1187.c | 4 ++-- plugins/LadspaEffect/swh/sifter_1210.c | 4 ++-- plugins/LadspaEffect/swh/sin_cos_1881.c | 4 ++-- plugins/LadspaEffect/swh/single_para_1203.c | 4 ++-- plugins/LadspaEffect/swh/sinus_wavewrapper_1198.c | 4 ++-- plugins/LadspaEffect/swh/smooth_decimate_1414.c | 4 ++-- plugins/LadspaEffect/swh/split_1406.c | 4 ++-- plugins/LadspaEffect/swh/step_muxer_1212.c | 4 ++-- plugins/LadspaEffect/swh/surround_encoder_1401.c | 4 ++-- plugins/LadspaEffect/swh/svf_1214.c | 4 ++-- plugins/LadspaEffect/swh/tape_delay_1211.c | 4 ++-- plugins/LadspaEffect/swh/transient_1206.c | 4 ++-- plugins/LadspaEffect/swh/triple_para_1204.c | 4 ++-- plugins/LadspaEffect/swh/valve_1209.c | 4 ++-- plugins/LadspaEffect/swh/valve_rect_1405.c | 4 ++-- plugins/LadspaEffect/swh/vocoder_1337.c | 4 ++-- plugins/LadspaEffect/swh/vynil_1905.c | 4 ++-- plugins/LadspaEffect/swh/wave_terrain_1412.c | 4 ++-- plugins/LadspaEffect/swh/xfade_1915.c | 4 ++-- plugins/LadspaEffect/swh/zm1_1428.c | 4 ++-- 94 files changed, 188 insertions(+), 188 deletions(-) diff --git a/plugins/LadspaEffect/swh/alias_1407.c b/plugins/LadspaEffect/swh/alias_1407.c index cbc0fdd50..8237dbfb9 100644 --- a/plugins/LadspaEffect/swh/alias_1407.c +++ b/plugins/LadspaEffect/swh/alias_1407.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -161,7 +161,7 @@ static void runAddingAlias(LADSPA_Handle instance, unsigned long sample_count) { } } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/allpass_1895.c b/plugins/LadspaEffect/swh/allpass_1895.c index 192684794..55360037e 100644 --- a/plugins/LadspaEffect/swh/allpass_1895.c +++ b/plugins/LadspaEffect/swh/allpass_1895.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -1088,7 +1088,7 @@ static void runAddingAllpass_c(LADSPA_Handle instance, unsigned long sample_coun plugin_data->write_phase = write_phase; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/am_pitchshift_1433.c b/plugins/LadspaEffect/swh/am_pitchshift_1433.c index 94b919942..0c2070a35 100644 --- a/plugins/LadspaEffect/swh/am_pitchshift_1433.c +++ b/plugins/LadspaEffect/swh/am_pitchshift_1433.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -359,7 +359,7 @@ static void runAddingAmPitchshift(LADSPA_Handle instance, unsigned long sample_c *(plugin_data->latency) = delay_ofs/2; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/amp_1181.c b/plugins/LadspaEffect/swh/amp_1181.c index c042c34b4..36ada6e3d 100644 --- a/plugins/LadspaEffect/swh/amp_1181.c +++ b/plugins/LadspaEffect/swh/amp_1181.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -154,7 +154,7 @@ static void runAddingAmp(LADSPA_Handle instance, unsigned long sample_count) { } } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/bandpass_a_iir_1893.c b/plugins/LadspaEffect/swh/bandpass_a_iir_1893.c index 8bf97c185..ba5c0c794 100644 --- a/plugins/LadspaEffect/swh/bandpass_a_iir_1893.c +++ b/plugins/LadspaEffect/swh/bandpass_a_iir_1893.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -188,7 +188,7 @@ static void runAddingBandpass_a_iir(LADSPA_Handle instance, unsigned long sample iir_process_buffer_1s_5(iirf, gt, input, output, sample_count,0); } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/bandpass_iir_1892.c b/plugins/LadspaEffect/swh/bandpass_iir_1892.c index 6207f6049..9ccdedd15 100644 --- a/plugins/LadspaEffect/swh/bandpass_iir_1892.c +++ b/plugins/LadspaEffect/swh/bandpass_iir_1892.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -244,7 +244,7 @@ static void runAddingBandpass_iir(LADSPA_Handle instance, unsigned long sample_c iir_process_buffer_ns_5(iirf, gt, input, output, sample_count,RUN_ADDING); } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/bode_shifter_1431.c b/plugins/LadspaEffect/swh/bode_shifter_1431.c index 5601a0eb1..cbce06f1b 100644 --- a/plugins/LadspaEffect/swh/bode_shifter_1431.c +++ b/plugins/LadspaEffect/swh/bode_shifter_1431.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -365,7 +365,7 @@ static void runAddingBodeShifter(LADSPA_Handle instance, unsigned long sample_co *(plugin_data->latency) = 99; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/bode_shifter_cv_1432.c b/plugins/LadspaEffect/swh/bode_shifter_cv_1432.c index 215a92871..936b7bb1f 100644 --- a/plugins/LadspaEffect/swh/bode_shifter_cv_1432.c +++ b/plugins/LadspaEffect/swh/bode_shifter_cv_1432.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -393,7 +393,7 @@ static void runAddingBodeShifterCV(LADSPA_Handle instance, unsigned long sample_ *(plugin_data->latency) = 99; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/butterworth_1902.c b/plugins/LadspaEffect/swh/butterworth_1902.c index ba6f4cafb..25d722297 100644 --- a/plugins/LadspaEffect/swh/butterworth_1902.c +++ b/plugins/LadspaEffect/swh/butterworth_1902.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -497,7 +497,7 @@ static void runAddingButthigh_iir(LADSPA_Handle instance, unsigned long sample_c iir_process_buffer_1s_5(iirf, gt, input, output, sample_count,0); } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/chebstortion_1430.c b/plugins/LadspaEffect/swh/chebstortion_1430.c index 946abaf15..f9c6b6420 100644 --- a/plugins/LadspaEffect/swh/chebstortion_1430.c +++ b/plugins/LadspaEffect/swh/chebstortion_1430.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -314,7 +314,7 @@ static void runAddingChebstortion(LADSPA_Handle instance, unsigned long sample_c plugin_data->count = count; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/comb_1190.c b/plugins/LadspaEffect/swh/comb_1190.c index 05fe340c2..28ea7098f 100644 --- a/plugins/LadspaEffect/swh/comb_1190.c +++ b/plugins/LadspaEffect/swh/comb_1190.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -251,7 +251,7 @@ static void runAddingComb(LADSPA_Handle instance, unsigned long sample_count) { plugin_data->last_offset = offset; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/comb_1887.c b/plugins/LadspaEffect/swh/comb_1887.c index 00da7270d..38ff4a3fe 100644 --- a/plugins/LadspaEffect/swh/comb_1887.c +++ b/plugins/LadspaEffect/swh/comb_1887.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -1094,7 +1094,7 @@ static void runAddingComb_c(LADSPA_Handle instance, unsigned long sample_count) plugin_data->write_phase = write_phase; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/comb_splitter_1411.c b/plugins/LadspaEffect/swh/comb_splitter_1411.c index bd1c4c714..a090308df 100644 --- a/plugins/LadspaEffect/swh/comb_splitter_1411.c +++ b/plugins/LadspaEffect/swh/comb_splitter_1411.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -255,7 +255,7 @@ static void runAddingCombSplitter(LADSPA_Handle instance, unsigned long sample_c plugin_data->last_offset = offset; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/const_1909.c b/plugins/LadspaEffect/swh/const_1909.c index 9e91cc41b..86c5e4ff9 100644 --- a/plugins/LadspaEffect/swh/const_1909.c +++ b/plugins/LadspaEffect/swh/const_1909.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -171,7 +171,7 @@ static void runAddingConst(LADSPA_Handle instance, unsigned long sample_count) { plugin_data->last_amp = amp; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/crossover_dist_1404.c b/plugins/LadspaEffect/swh/crossover_dist_1404.c index 80053a214..a70afb589 100644 --- a/plugins/LadspaEffect/swh/crossover_dist_1404.c +++ b/plugins/LadspaEffect/swh/crossover_dist_1404.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -187,7 +187,7 @@ static void runAddingCrossoverDist(LADSPA_Handle instance, unsigned long sample_ } } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/dc_remove_1207.c b/plugins/LadspaEffect/swh/dc_remove_1207.c index 099e5daf6..66f491efc 100644 --- a/plugins/LadspaEffect/swh/dc_remove_1207.c +++ b/plugins/LadspaEffect/swh/dc_remove_1207.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -166,7 +166,7 @@ static void runAddingDcRemove(LADSPA_Handle instance, unsigned long sample_count plugin_data->otm1 = otm1; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/decay_1886.c b/plugins/LadspaEffect/swh/decay_1886.c index 29c1b8daf..18143c782 100644 --- a/plugins/LadspaEffect/swh/decay_1886.c +++ b/plugins/LadspaEffect/swh/decay_1886.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -247,7 +247,7 @@ static void runAddingDecay(LADSPA_Handle instance, unsigned long sample_count) { plugin_data->y = y; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/decimator_1202.c b/plugins/LadspaEffect/swh/decimator_1202.c index bcf7a8004..8d2a2b5ac 100644 --- a/plugins/LadspaEffect/swh/decimator_1202.c +++ b/plugins/LadspaEffect/swh/decimator_1202.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -240,7 +240,7 @@ static void runAddingDecimator(LADSPA_Handle instance, unsigned long sample_coun plugin_data->count = count; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/declip_1195.c b/plugins/LadspaEffect/swh/declip_1195.c index 3f5d5a5df..c51d9b74e 100644 --- a/plugins/LadspaEffect/swh/declip_1195.c +++ b/plugins/LadspaEffect/swh/declip_1195.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -160,7 +160,7 @@ static void runAddingDeclip(LADSPA_Handle instance, unsigned long sample_count) } } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/delay_1898.c b/plugins/LadspaEffect/swh/delay_1898.c index b1c7cb239..912e89bf4 100644 --- a/plugins/LadspaEffect/swh/delay_1898.c +++ b/plugins/LadspaEffect/swh/delay_1898.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -862,7 +862,7 @@ static void runAddingDelay_c(LADSPA_Handle instance, unsigned long sample_count) plugin_data->write_phase = write_phase; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/delayorama_1402.c b/plugins/LadspaEffect/swh/delayorama_1402.c index 3949b0643..a0e85dd06 100644 --- a/plugins/LadspaEffect/swh/delayorama_1402.c +++ b/plugins/LadspaEffect/swh/delayorama_1402.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -668,7 +668,7 @@ static void runAddingDelayorama(LADSPA_Handle instance, unsigned long sample_cou plugin_data->last_out = out; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/diode_1185.c b/plugins/LadspaEffect/swh/diode_1185.c index cd488f199..3fb8a0a3b 100644 --- a/plugins/LadspaEffect/swh/diode_1185.c +++ b/plugins/LadspaEffect/swh/diode_1185.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -185,7 +185,7 @@ static void runAddingDiode(LADSPA_Handle instance, unsigned long sample_count) { } } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/divider_1186.c b/plugins/LadspaEffect/swh/divider_1186.c index 4dbd7310b..3fd1e764a 100644 --- a/plugins/LadspaEffect/swh/divider_1186.c +++ b/plugins/LadspaEffect/swh/divider_1186.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -249,7 +249,7 @@ static void runAddingDivider(LADSPA_Handle instance, unsigned long sample_count) plugin_data->out = out; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/dj_eq_1901.c b/plugins/LadspaEffect/swh/dj_eq_1901.c index 2184ae1cd..b821d4380 100644 --- a/plugins/LadspaEffect/swh/dj_eq_1901.c +++ b/plugins/LadspaEffect/swh/dj_eq_1901.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -463,7 +463,7 @@ static void runAddingDj_eq(LADSPA_Handle instance, unsigned long sample_count) { *(plugin_data->latency) = 3; //XXX is this right? } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/dj_flanger_1438.c b/plugins/LadspaEffect/swh/dj_flanger_1438.c index c15564b6f..c2ca3375b 100644 --- a/plugins/LadspaEffect/swh/dj_flanger_1438.c +++ b/plugins/LadspaEffect/swh/dj_flanger_1438.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -366,7 +366,7 @@ static void runAddingDjFlanger(LADSPA_Handle instance, unsigned long sample_coun plugin_data->buffer_pos = buffer_pos; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/dyson_compress_1403.c b/plugins/LadspaEffect/swh/dyson_compress_1403.c index f7bb71556..a4078eb24 100644 --- a/plugins/LadspaEffect/swh/dyson_compress_1403.c +++ b/plugins/LadspaEffect/swh/dyson_compress_1403.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -776,7 +776,7 @@ static void runAddingDysonCompress(LADSPA_Handle instance, unsigned long sample_ plugin_data->extra_maxlevel = extra_maxlevel; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/fad_delay_1192.c b/plugins/LadspaEffect/swh/fad_delay_1192.c index 89f496a84..d90e517a6 100644 --- a/plugins/LadspaEffect/swh/fad_delay_1192.c +++ b/plugins/LadspaEffect/swh/fad_delay_1192.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -299,7 +299,7 @@ static void runAddingFadDelay(LADSPA_Handle instance, unsigned long sample_count plugin_data->last_in = last_in; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/fast_lookahead_limiter_1913.c b/plugins/LadspaEffect/swh/fast_lookahead_limiter_1913.c index 33007e1b9..68a9f47b9 100644 --- a/plugins/LadspaEffect/swh/fast_lookahead_limiter_1913.c +++ b/plugins/LadspaEffect/swh/fast_lookahead_limiter_1913.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -573,7 +573,7 @@ static void runAddingFastLookaheadLimiter(LADSPA_Handle instance, unsigned long *(plugin_data->latency) = delay; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/flanger_1191.c b/plugins/LadspaEffect/swh/flanger_1191.c index cb91cadba..d27d2600d 100644 --- a/plugins/LadspaEffect/swh/flanger_1191.c +++ b/plugins/LadspaEffect/swh/flanger_1191.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -435,7 +435,7 @@ static void runAddingFlanger(LADSPA_Handle instance, unsigned long sample_count) plugin_data->old_d_base = new_d_base; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/foldover_1213.c b/plugins/LadspaEffect/swh/foldover_1213.c index 76119b5b3..ee3dd5292 100644 --- a/plugins/LadspaEffect/swh/foldover_1213.c +++ b/plugins/LadspaEffect/swh/foldover_1213.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -166,7 +166,7 @@ static void runAddingFoldover(LADSPA_Handle instance, unsigned long sample_count } } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/foverdrive_1196.c b/plugins/LadspaEffect/swh/foverdrive_1196.c index d00eb052c..3c5f5cc64 100644 --- a/plugins/LadspaEffect/swh/foverdrive_1196.c +++ b/plugins/LadspaEffect/swh/foverdrive_1196.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -155,7 +155,7 @@ static void runAddingFoverdrive(LADSPA_Handle instance, unsigned long sample_cou } } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/freq_tracker_1418.c b/plugins/LadspaEffect/swh/freq_tracker_1418.c index fff203f92..85f7f4888 100644 --- a/plugins/LadspaEffect/swh/freq_tracker_1418.c +++ b/plugins/LadspaEffect/swh/freq_tracker_1418.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -240,7 +240,7 @@ static void runAddingFreqTracker(LADSPA_Handle instance, unsigned long sample_co plugin_data->cross_time = cross_time; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/gate_1410.c b/plugins/LadspaEffect/swh/gate_1410.c index fddd78fc0..5e54cbf52 100644 --- a/plugins/LadspaEffect/swh/gate_1410.c +++ b/plugins/LadspaEffect/swh/gate_1410.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -433,7 +433,7 @@ static void runAddingGate(LADSPA_Handle instance, unsigned long sample_count) { plugin_data->hold_count = hold_count; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/giant_flange_1437.c b/plugins/LadspaEffect/swh/giant_flange_1437.c index 967334c6e..68b43833a 100644 --- a/plugins/LadspaEffect/swh/giant_flange_1437.c +++ b/plugins/LadspaEffect/swh/giant_flange_1437.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -501,7 +501,7 @@ static void runAddingGiantFlange(LADSPA_Handle instance, unsigned long sample_co plugin_data->buffer_pos = buffer_pos; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/gong_1424.c b/plugins/LadspaEffect/swh/gong_1424.c index deca3cd9e..858d31384 100644 --- a/plugins/LadspaEffect/swh/gong_1424.c +++ b/plugins/LadspaEffect/swh/gong_1424.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -608,7 +608,7 @@ static void runAddingGong(LADSPA_Handle instance, unsigned long sample_count) { } } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/gong_beater_1439.c b/plugins/LadspaEffect/swh/gong_beater_1439.c index e6e1803c8..41368e1cf 100644 --- a/plugins/LadspaEffect/swh/gong_beater_1439.c +++ b/plugins/LadspaEffect/swh/gong_beater_1439.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -301,7 +301,7 @@ static void runAddingGongBeater(LADSPA_Handle instance, unsigned long sample_cou plugin_data->imp_level = imp_level; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/gsm_1215.c b/plugins/LadspaEffect/swh/gsm_1215.c index b2ed56c5d..85f7e575b 100644 --- a/plugins/LadspaEffect/swh/gsm_1215.c +++ b/plugins/LadspaEffect/swh/gsm_1215.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -387,7 +387,7 @@ static void runAddingGsm(LADSPA_Handle instance, unsigned long sample_count) { *(plugin_data->latency) = 160 * resamp; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/gverb_1216.c b/plugins/LadspaEffect/swh/gverb_1216.c index 0bf339fd7..3e7f334bb 100644 --- a/plugins/LadspaEffect/swh/gverb_1216.c +++ b/plugins/LadspaEffect/swh/gverb_1216.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -283,7 +283,7 @@ static void runAddingGverb(LADSPA_Handle instance, unsigned long sample_count) { } } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/hard_limiter_1413.c b/plugins/LadspaEffect/swh/hard_limiter_1413.c index ba958b442..00a950a7b 100644 --- a/plugins/LadspaEffect/swh/hard_limiter_1413.c +++ b/plugins/LadspaEffect/swh/hard_limiter_1413.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -187,7 +187,7 @@ static void runAddingHardLimiter(LADSPA_Handle instance, unsigned long sample_co } } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/harmonic_gen_1220.c b/plugins/LadspaEffect/swh/harmonic_gen_1220.c index 9509a5b55..9c19ac3c7 100644 --- a/plugins/LadspaEffect/swh/harmonic_gen_1220.c +++ b/plugins/LadspaEffect/swh/harmonic_gen_1220.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -367,7 +367,7 @@ static void runAddingHarmonicGen(LADSPA_Handle instance, unsigned long sample_co plugin_data->otm1 = otm1; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/hermes_filter_1200.c b/plugins/LadspaEffect/swh/hermes_filter_1200.c index 2d3bb5197..ab675ddaa 100644 --- a/plugins/LadspaEffect/swh/hermes_filter_1200.c +++ b/plugins/LadspaEffect/swh/hermes_filter_1200.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -1403,7 +1403,7 @@ static void runAddingHermesFilter(LADSPA_Handle instance, unsigned long sample_c plugin_data->lfo2_phase = lfo2_phase; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/highpass_iir_1890.c b/plugins/LadspaEffect/swh/highpass_iir_1890.c index 09e3688a7..9cc00d79c 100644 --- a/plugins/LadspaEffect/swh/highpass_iir_1890.c +++ b/plugins/LadspaEffect/swh/highpass_iir_1890.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -189,7 +189,7 @@ static void runAddingHighpass_iir(LADSPA_Handle instance, unsigned long sample_c iir_process_buffer_ns_5(iirf, gt, input, output, sample_count,RUN_ADDING); } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/hilbert_1440.c b/plugins/LadspaEffect/swh/hilbert_1440.c index 0009d7948..7e9d6ee5d 100644 --- a/plugins/LadspaEffect/swh/hilbert_1440.c +++ b/plugins/LadspaEffect/swh/hilbert_1440.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -233,7 +233,7 @@ static void runAddingHilbert(LADSPA_Handle instance, unsigned long sample_count) *(plugin_data->latency) = 99; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/imp_1199.c b/plugins/LadspaEffect/swh/imp_1199.c index f392ef8b4..2fe77139c 100644 --- a/plugins/LadspaEffect/swh/imp_1199.c +++ b/plugins/LadspaEffect/swh/imp_1199.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -522,7 +522,7 @@ static void runAddingImp(LADSPA_Handle instance, unsigned long sample_count) { *(plugin_data->latency) = SEG_LENGTH; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/impulse_1885.c b/plugins/LadspaEffect/swh/impulse_1885.c index 398aea098..a7b053586 100644 --- a/plugins/LadspaEffect/swh/impulse_1885.c +++ b/plugins/LadspaEffect/swh/impulse_1885.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -186,7 +186,7 @@ static void runAddingImpulse_fc(LADSPA_Handle instance, unsigned long sample_cou plugin_data->phase = phase; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/inv_1429.c b/plugins/LadspaEffect/swh/inv_1429.c index cbc51f548..297aea748 100644 --- a/plugins/LadspaEffect/swh/inv_1429.c +++ b/plugins/LadspaEffect/swh/inv_1429.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -138,7 +138,7 @@ static void runAddingInv(LADSPA_Handle instance, unsigned long sample_count) { } } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/karaoke_1409.c b/plugins/LadspaEffect/swh/karaoke_1409.c index 4c2f7355e..b774e63a9 100644 --- a/plugins/LadspaEffect/swh/karaoke_1409.c +++ b/plugins/LadspaEffect/swh/karaoke_1409.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -181,7 +181,7 @@ static void runAddingKaraoke(LADSPA_Handle instance, unsigned long sample_count) } } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/latency_1914.c b/plugins/LadspaEffect/swh/latency_1914.c index 56d0365b6..67daba06d 100644 --- a/plugins/LadspaEffect/swh/latency_1914.c +++ b/plugins/LadspaEffect/swh/latency_1914.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -173,7 +173,7 @@ static void runAddingArtificialLatency(LADSPA_Handle instance, unsigned long sam *(plugin_data->latency) = (float)delay_fr; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/lcr_delay_1436.c b/plugins/LadspaEffect/swh/lcr_delay_1436.c index 8e0c60243..00340e407 100644 --- a/plugins/LadspaEffect/swh/lcr_delay_1436.c +++ b/plugins/LadspaEffect/swh/lcr_delay_1436.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -540,7 +540,7 @@ static void runAddingLcrDelay(LADSPA_Handle instance, unsigned long sample_count plugin_data->buffer_pos = buffer_pos; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/lowpass_iir_1891.c b/plugins/LadspaEffect/swh/lowpass_iir_1891.c index 782f9e39f..5ee714c2c 100644 --- a/plugins/LadspaEffect/swh/lowpass_iir_1891.c +++ b/plugins/LadspaEffect/swh/lowpass_iir_1891.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -191,7 +191,7 @@ static void runAddingLowpass_iir(LADSPA_Handle instance, unsigned long sample_co iir_process_buffer_ns_5(iirf, gt, input, output, sample_count,RUN_ADDING); } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/ls_filter_1908.c b/plugins/LadspaEffect/swh/ls_filter_1908.c index 6dc3ef2e8..edc23bf3c 100644 --- a/plugins/LadspaEffect/swh/ls_filter_1908.c +++ b/plugins/LadspaEffect/swh/ls_filter_1908.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -209,7 +209,7 @@ static void runAddingLsFilter(LADSPA_Handle instance, unsigned long sample_count } } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/matrix_ms_st_1421.c b/plugins/LadspaEffect/swh/matrix_ms_st_1421.c index dd153866e..121bf0c71 100644 --- a/plugins/LadspaEffect/swh/matrix_ms_st_1421.c +++ b/plugins/LadspaEffect/swh/matrix_ms_st_1421.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -173,7 +173,7 @@ static void runAddingMatrixMSSt(LADSPA_Handle instance, unsigned long sample_cou } } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/matrix_spatialiser_1422.c b/plugins/LadspaEffect/swh/matrix_spatialiser_1422.c index f041630b3..edd92475b 100644 --- a/plugins/LadspaEffect/swh/matrix_spatialiser_1422.c +++ b/plugins/LadspaEffect/swh/matrix_spatialiser_1422.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -331,7 +331,7 @@ static void runAddingMatrixSpatialiser(LADSPA_Handle instance, unsigned long sam plugin_data->current_s_gain = current_s_gain; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/matrix_st_ms_1420.c b/plugins/LadspaEffect/swh/matrix_st_ms_1420.c index c41c76210..8865a02ba 100644 --- a/plugins/LadspaEffect/swh/matrix_st_ms_1420.c +++ b/plugins/LadspaEffect/swh/matrix_st_ms_1420.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -162,7 +162,7 @@ static void runAddingMatrixStMS(LADSPA_Handle instance, unsigned long sample_cou } } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/mbeq_1197.c b/plugins/LadspaEffect/swh/mbeq_1197.c index 09b51f1fb..7fb7a252f 100644 --- a/plugins/LadspaEffect/swh/mbeq_1197.c +++ b/plugins/LadspaEffect/swh/mbeq_1197.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -659,7 +659,7 @@ static void runAddingMbeq(LADSPA_Handle instance, unsigned long sample_count) { *(plugin_data->latency) = fft_latency; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/mod_delay_1419.c b/plugins/LadspaEffect/swh/mod_delay_1419.c index 67e1a0337..b763df2a6 100644 --- a/plugins/LadspaEffect/swh/mod_delay_1419.c +++ b/plugins/LadspaEffect/swh/mod_delay_1419.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -229,7 +229,7 @@ static void runAddingModDelay(LADSPA_Handle instance, unsigned long sample_count plugin_data->write_ptr = write_ptr; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/multivoice_chorus_1201.c b/plugins/LadspaEffect/swh/multivoice_chorus_1201.c index 81f4ae8a2..44678bd38 100644 --- a/plugins/LadspaEffect/swh/multivoice_chorus_1201.c +++ b/plugins/LadspaEffect/swh/multivoice_chorus_1201.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -527,7 +527,7 @@ static void runAddingMultivoiceChorus(LADSPA_Handle instance, unsigned long samp plugin_data->delay_pos = delay_pos; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/notch_iir_1894.c b/plugins/LadspaEffect/swh/notch_iir_1894.c index 9f075f3f4..af4d04760 100644 --- a/plugins/LadspaEffect/swh/notch_iir_1894.c +++ b/plugins/LadspaEffect/swh/notch_iir_1894.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -244,7 +244,7 @@ static void runAddingNotch_iir(LADSPA_Handle instance, unsigned long sample_coun iir_process_buffer_ns_5(iirf2, second, input, output, sample_count, 1); /* add to first buffer */ } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/phasers_1217.c b/plugins/LadspaEffect/swh/phasers_1217.c index 0d4cae64a..e8a7a6d27 100644 --- a/plugins/LadspaEffect/swh/phasers_1217.c +++ b/plugins/LadspaEffect/swh/phasers_1217.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -1030,7 +1030,7 @@ static void runAddingAutoPhaser(LADSPA_Handle instance, unsigned long sample_cou plugin_data->ym1 = ym1; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/pitch_scale_1193.c b/plugins/LadspaEffect/swh/pitch_scale_1193.c index be797e48e..f9c7f8148 100644 --- a/plugins/LadspaEffect/swh/pitch_scale_1193.c +++ b/plugins/LadspaEffect/swh/pitch_scale_1193.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -241,7 +241,7 @@ static void runAddingPitchScale(LADSPA_Handle instance, unsigned long sample_cou OVER_SAMP); } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/pitch_scale_1194.c b/plugins/LadspaEffect/swh/pitch_scale_1194.c index 4e22de6df..41b81058e 100644 --- a/plugins/LadspaEffect/swh/pitch_scale_1194.c +++ b/plugins/LadspaEffect/swh/pitch_scale_1194.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -225,7 +225,7 @@ static void runAddingPitchScaleHQ(LADSPA_Handle instance, unsigned long sample_c / OVER_SAMP); } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/plate_1423.c b/plugins/LadspaEffect/swh/plate_1423.c index 644aac7bf..9902c36a4 100644 --- a/plugins/LadspaEffect/swh/plate_1423.c +++ b/plugins/LadspaEffect/swh/plate_1423.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -295,7 +295,7 @@ static void runAddingPlate(LADSPA_Handle instance, unsigned long sample_count) { } } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/pointer_cast_1910.c b/plugins/LadspaEffect/swh/pointer_cast_1910.c index 264821ad8..ae5766204 100644 --- a/plugins/LadspaEffect/swh/pointer_cast_1910.c +++ b/plugins/LadspaEffect/swh/pointer_cast_1910.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -221,7 +221,7 @@ static void runAddingPointerCastDistortion(LADSPA_Handle instance, unsigned long } } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/rate_shifter_1417.c b/plugins/LadspaEffect/swh/rate_shifter_1417.c index fc2501e98..638561acc 100644 --- a/plugins/LadspaEffect/swh/rate_shifter_1417.c +++ b/plugins/LadspaEffect/swh/rate_shifter_1417.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -235,7 +235,7 @@ static void runAddingRateShifter(LADSPA_Handle instance, unsigned long sample_co plugin_data->write_ptr = write_ptr; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/retro_flange_1208.c b/plugins/LadspaEffect/swh/retro_flange_1208.c index 5a4124bfd..0b2050946 100644 --- a/plugins/LadspaEffect/swh/retro_flange_1208.c +++ b/plugins/LadspaEffect/swh/retro_flange_1208.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -492,7 +492,7 @@ static void runAddingRetroFlange(LADSPA_Handle instance, unsigned long sample_co plugin_data->z2 = z2; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/revdelay_1605.c b/plugins/LadspaEffect/swh/revdelay_1605.c index e8846fc79..b1cc32d94 100644 --- a/plugins/LadspaEffect/swh/revdelay_1605.c +++ b/plugins/LadspaEffect/swh/revdelay_1605.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -421,7 +421,7 @@ static void runAddingRevdelay(LADSPA_Handle instance, unsigned long sample_count plugin_data->write_phase = write_phase; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/ringmod_1188.c b/plugins/LadspaEffect/swh/ringmod_1188.c index 531081d93..081ba4e1b 100644 --- a/plugins/LadspaEffect/swh/ringmod_1188.c +++ b/plugins/LadspaEffect/swh/ringmod_1188.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -429,7 +429,7 @@ static void runAddingRingmod_1i1o1l(LADSPA_Handle instance, unsigned long sample plugin_data->offset = offset; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/satan_maximiser_1408.c b/plugins/LadspaEffect/swh/satan_maximiser_1408.c index d9b3c4fa3..cccfa06a5 100644 --- a/plugins/LadspaEffect/swh/satan_maximiser_1408.c +++ b/plugins/LadspaEffect/swh/satan_maximiser_1408.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -255,7 +255,7 @@ static void runAddingSatanMaximiser(LADSPA_Handle instance, unsigned long sample plugin_data->buffer_pos = buffer_pos; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/sc1_1425.c b/plugins/LadspaEffect/swh/sc1_1425.c index 0a94773e2..9f559fda6 100644 --- a/plugins/LadspaEffect/swh/sc1_1425.c +++ b/plugins/LadspaEffect/swh/sc1_1425.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -344,7 +344,7 @@ static void runAddingSc1(LADSPA_Handle instance, unsigned long sample_count) { plugin_data->count = count; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/sc2_1426.c b/plugins/LadspaEffect/swh/sc2_1426.c index dd7a20d94..b4ec37cc3 100644 --- a/plugins/LadspaEffect/swh/sc2_1426.c +++ b/plugins/LadspaEffect/swh/sc2_1426.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -355,7 +355,7 @@ static void runAddingSc2(LADSPA_Handle instance, unsigned long sample_count) { plugin_data->count = count; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/sc3_1427.c b/plugins/LadspaEffect/swh/sc3_1427.c index f7f4ceba5..85fce68a6 100644 --- a/plugins/LadspaEffect/swh/sc3_1427.c +++ b/plugins/LadspaEffect/swh/sc3_1427.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -402,7 +402,7 @@ static void runAddingSc3(LADSPA_Handle instance, unsigned long sample_count) { plugin_data->count = count; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/sc4_1882.c b/plugins/LadspaEffect/swh/sc4_1882.c index 63493383b..3fb194096 100644 --- a/plugins/LadspaEffect/swh/sc4_1882.c +++ b/plugins/LadspaEffect/swh/sc4_1882.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -445,7 +445,7 @@ static void runAddingSc4(LADSPA_Handle instance, unsigned long sample_count) { *(plugin_data->gain_red) = lin2db(gain); } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/sc4m_1916.c b/plugins/LadspaEffect/swh/sc4m_1916.c index e9a07a0d2..1b87031e6 100644 --- a/plugins/LadspaEffect/swh/sc4m_1916.c +++ b/plugins/LadspaEffect/swh/sc4m_1916.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -409,7 +409,7 @@ static void runAddingSc4m(LADSPA_Handle instance, unsigned long sample_count) { *(plugin_data->gain_red) = lin2db(gain); } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/se4_1883.c b/plugins/LadspaEffect/swh/se4_1883.c index f3de1ec88..de784602a 100644 --- a/plugins/LadspaEffect/swh/se4_1883.c +++ b/plugins/LadspaEffect/swh/se4_1883.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -441,7 +441,7 @@ static void runAddingSe4(LADSPA_Handle instance, unsigned long sample_count) { *(plugin_data->gain_exp) = lin2db(gain); } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/shaper_1187.c b/plugins/LadspaEffect/swh/shaper_1187.c index 039367216..e7efd33ae 100644 --- a/plugins/LadspaEffect/swh/shaper_1187.c +++ b/plugins/LadspaEffect/swh/shaper_1187.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -175,7 +175,7 @@ static void runAddingShaper(LADSPA_Handle instance, unsigned long sample_count) } } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/sifter_1210.c b/plugins/LadspaEffect/swh/sifter_1210.c index 06184ab40..8d8464ceb 100644 --- a/plugins/LadspaEffect/swh/sifter_1210.c +++ b/plugins/LadspaEffect/swh/sifter_1210.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -359,7 +359,7 @@ static void runAddingSifter(LADSPA_Handle instance, unsigned long sample_count) plugin_data->b2ptr = b2ptr; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/sin_cos_1881.c b/plugins/LadspaEffect/swh/sin_cos_1881.c index fd5e440b3..376733f8b 100644 --- a/plugins/LadspaEffect/swh/sin_cos_1881.c +++ b/plugins/LadspaEffect/swh/sin_cos_1881.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -207,7 +207,7 @@ static void runAddingSinCos(LADSPA_Handle instance, unsigned long sample_count) plugin_data->last_om = target_om; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/single_para_1203.c b/plugins/LadspaEffect/swh/single_para_1203.c index 75977a38c..3a0543d0a 100644 --- a/plugins/LadspaEffect/swh/single_para_1203.c +++ b/plugins/LadspaEffect/swh/single_para_1203.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -207,7 +207,7 @@ static void runAddingSinglePara(LADSPA_Handle instance, unsigned long sample_cou } } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/sinus_wavewrapper_1198.c b/plugins/LadspaEffect/swh/sinus_wavewrapper_1198.c index 8703d2ba1..efe4e9e1d 100644 --- a/plugins/LadspaEffect/swh/sinus_wavewrapper_1198.c +++ b/plugins/LadspaEffect/swh/sinus_wavewrapper_1198.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -159,7 +159,7 @@ static void runAddingSinusWavewrapper(LADSPA_Handle instance, unsigned long samp } } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/smooth_decimate_1414.c b/plugins/LadspaEffect/swh/smooth_decimate_1414.c index a6f13853f..eef419102 100644 --- a/plugins/LadspaEffect/swh/smooth_decimate_1414.c +++ b/plugins/LadspaEffect/swh/smooth_decimate_1414.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -240,7 +240,7 @@ static void runAddingSmoothDecimate(LADSPA_Handle instance, unsigned long sample plugin_data->buffer_pos = buffer_pos; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/split_1406.c b/plugins/LadspaEffect/swh/split_1406.c index 80bc268cd..03dace10e 100644 --- a/plugins/LadspaEffect/swh/split_1406.c +++ b/plugins/LadspaEffect/swh/split_1406.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -155,7 +155,7 @@ static void runAddingSplit(LADSPA_Handle instance, unsigned long sample_count) { } } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/step_muxer_1212.c b/plugins/LadspaEffect/swh/step_muxer_1212.c index da231a58a..b5f9c3ae2 100644 --- a/plugins/LadspaEffect/swh/step_muxer_1212.c +++ b/plugins/LadspaEffect/swh/step_muxer_1212.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -397,7 +397,7 @@ static void runAddingStepMuxer(LADSPA_Handle instance, unsigned long sample_coun plugin_data->last_clock = last_clock; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/surround_encoder_1401.c b/plugins/LadspaEffect/swh/surround_encoder_1401.c index c11188657..93893f193 100644 --- a/plugins/LadspaEffect/swh/surround_encoder_1401.c +++ b/plugins/LadspaEffect/swh/surround_encoder_1401.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -317,7 +317,7 @@ static void runAddingSurroundEncoder(LADSPA_Handle instance, unsigned long sampl plugin_data->buffer_pos = buffer_pos; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/svf_1214.c b/plugins/LadspaEffect/swh/svf_1214.c index f17a353ef..2eb0739b5 100644 --- a/plugins/LadspaEffect/swh/svf_1214.c +++ b/plugins/LadspaEffect/swh/svf_1214.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -293,7 +293,7 @@ static void runAddingSvf(LADSPA_Handle instance, unsigned long sample_count) { } } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/tape_delay_1211.c b/plugins/LadspaEffect/swh/tape_delay_1211.c index d31a494d1..c478696a7 100644 --- a/plugins/LadspaEffect/swh/tape_delay_1211.c +++ b/plugins/LadspaEffect/swh/tape_delay_1211.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -476,7 +476,7 @@ static void runAddingTapeDelay(LADSPA_Handle instance, unsigned long sample_coun plugin_data->z2 = z2; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/transient_1206.c b/plugins/LadspaEffect/swh/transient_1206.c index c2be769f4..eec67ceeb 100644 --- a/plugins/LadspaEffect/swh/transient_1206.c +++ b/plugins/LadspaEffect/swh/transient_1206.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -370,7 +370,7 @@ static void runAddingTransient(LADSPA_Handle instance, unsigned long sample_coun plugin_data->slow_buffer_sum = slow_buffer_sum; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/triple_para_1204.c b/plugins/LadspaEffect/swh/triple_para_1204.c index e2ee41361..c3e481186 100644 --- a/plugins/LadspaEffect/swh/triple_para_1204.c +++ b/plugins/LadspaEffect/swh/triple_para_1204.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -368,7 +368,7 @@ static void runAddingTriplePara(LADSPA_Handle instance, unsigned long sample_cou } } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/valve_1209.c b/plugins/LadspaEffect/swh/valve_1209.c index 8e4dd6f13..e30ac9a25 100644 --- a/plugins/LadspaEffect/swh/valve_1209.c +++ b/plugins/LadspaEffect/swh/valve_1209.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -243,7 +243,7 @@ static void runAddingValve(LADSPA_Handle instance, unsigned long sample_count) { plugin_data->otm1 = otm1; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/valve_rect_1405.c b/plugins/LadspaEffect/swh/valve_rect_1405.c index 3c971118f..0a5702eee 100644 --- a/plugins/LadspaEffect/swh/valve_rect_1405.c +++ b/plugins/LadspaEffect/swh/valve_rect_1405.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -312,7 +312,7 @@ static void runAddingValveRect(LADSPA_Handle instance, unsigned long sample_coun plugin_data->apos = apos; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/vocoder_1337.c b/plugins/LadspaEffect/swh/vocoder_1337.c index e5b4d24bd..38c0cd656 100644 --- a/plugins/LadspaEffect/swh/vocoder_1337.c +++ b/plugins/LadspaEffect/swh/vocoder_1337.c @@ -43,7 +43,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -333,7 +333,7 @@ LADSPA_Descriptor * g_psDescriptor = NULL; /*****************************************************************************/ -/* _init() is called automatically when the plugin library is first +/* __attribute__((constructor)) swh_init() is called automatically when the plugin library is first loaded. */ void _init() { diff --git a/plugins/LadspaEffect/swh/vynil_1905.c b/plugins/LadspaEffect/swh/vynil_1905.c index d42f8f6a3..6babf7620 100644 --- a/plugins/LadspaEffect/swh/vynil_1905.c +++ b/plugins/LadspaEffect/swh/vynil_1905.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -579,7 +579,7 @@ static void runAddingVynil(LADSPA_Handle instance, unsigned long sample_count) { plugin_data->phi = phi; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/wave_terrain_1412.c b/plugins/LadspaEffect/swh/wave_terrain_1412.c index 00c2efef5..a3c1b15fa 100644 --- a/plugins/LadspaEffect/swh/wave_terrain_1412.c +++ b/plugins/LadspaEffect/swh/wave_terrain_1412.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -155,7 +155,7 @@ static void runAddingWaveTerrain(LADSPA_Handle instance, unsigned long sample_co } } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/xfade_1915.c b/plugins/LadspaEffect/swh/xfade_1915.c index a8c8dd5bd..eb3173e7f 100644 --- a/plugins/LadspaEffect/swh/xfade_1915.c +++ b/plugins/LadspaEffect/swh/xfade_1915.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -385,7 +385,7 @@ static void runAddingXfade4(LADSPA_Handle instance, unsigned long sample_count) } } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; diff --git a/plugins/LadspaEffect/swh/zm1_1428.c b/plugins/LadspaEffect/swh/zm1_1428.c index 048631ebb..21ca63424 100644 --- a/plugins/LadspaEffect/swh/zm1_1428.c +++ b/plugins/LadspaEffect/swh/zm1_1428.c @@ -20,7 +20,7 @@ #ifdef WIN32 #define _WINDOWS_DLL_EXPORT_ __declspec(dllexport) int bIsFirstTime = 1; -void _init(); // forward declaration +void __attribute__((constructor)) swh_init(); // forward declaration #else #define _WINDOWS_DLL_EXPORT_ #endif @@ -163,7 +163,7 @@ static void runAddingZm1(LADSPA_Handle instance, unsigned long sample_count) { plugin_data->xm1 = xm1; } -void _init() { +void __attribute__((constructor)) swh_init() { char **port_names; LADSPA_PortDescriptor *port_descriptors; LADSPA_PortRangeHint *port_range_hints; From 90496600f26de587fafe915c49208a59f70227cf Mon Sep 17 00:00:00 2001 From: Tobias Doerffel Date: Thu, 8 May 2014 21:59:30 +0200 Subject: [PATCH 55/55] SWH: fixed Win32 compilation The recent adaptions for OS X broke build for Win32. --- plugins/LadspaEffect/swh/alias_1407.c | 2 +- plugins/LadspaEffect/swh/allpass_1895.c | 2 +- plugins/LadspaEffect/swh/am_pitchshift_1433.c | 2 +- plugins/LadspaEffect/swh/amp_1181.c | 2 +- plugins/LadspaEffect/swh/bandpass_a_iir_1893.c | 2 +- plugins/LadspaEffect/swh/bandpass_iir_1892.c | 2 +- plugins/LadspaEffect/swh/bode_shifter_1431.c | 2 +- plugins/LadspaEffect/swh/bode_shifter_cv_1432.c | 2 +- plugins/LadspaEffect/swh/butterworth_1902.c | 2 +- plugins/LadspaEffect/swh/chebstortion_1430.c | 2 +- plugins/LadspaEffect/swh/comb_1190.c | 2 +- plugins/LadspaEffect/swh/comb_1887.c | 2 +- plugins/LadspaEffect/swh/comb_splitter_1411.c | 2 +- plugins/LadspaEffect/swh/const_1909.c | 2 +- plugins/LadspaEffect/swh/crossover_dist_1404.c | 2 +- plugins/LadspaEffect/swh/dc_remove_1207.c | 2 +- plugins/LadspaEffect/swh/decay_1886.c | 2 +- plugins/LadspaEffect/swh/decimator_1202.c | 2 +- plugins/LadspaEffect/swh/declip_1195.c | 2 +- plugins/LadspaEffect/swh/delay_1898.c | 2 +- plugins/LadspaEffect/swh/delayorama_1402.c | 2 +- plugins/LadspaEffect/swh/diode_1185.c | 2 +- plugins/LadspaEffect/swh/divider_1186.c | 2 +- plugins/LadspaEffect/swh/dj_eq_1901.c | 2 +- plugins/LadspaEffect/swh/dj_flanger_1438.c | 2 +- plugins/LadspaEffect/swh/dyson_compress_1403.c | 2 +- plugins/LadspaEffect/swh/fad_delay_1192.c | 2 +- plugins/LadspaEffect/swh/fast_lookahead_limiter_1913.c | 2 +- plugins/LadspaEffect/swh/flanger_1191.c | 2 +- plugins/LadspaEffect/swh/foldover_1213.c | 2 +- plugins/LadspaEffect/swh/foverdrive_1196.c | 2 +- plugins/LadspaEffect/swh/freq_tracker_1418.c | 2 +- plugins/LadspaEffect/swh/gate_1410.c | 2 +- plugins/LadspaEffect/swh/giant_flange_1437.c | 2 +- plugins/LadspaEffect/swh/gong_1424.c | 2 +- plugins/LadspaEffect/swh/gong_beater_1439.c | 2 +- plugins/LadspaEffect/swh/gsm_1215.c | 2 +- plugins/LadspaEffect/swh/gverb_1216.c | 2 +- plugins/LadspaEffect/swh/hard_limiter_1413.c | 2 +- plugins/LadspaEffect/swh/harmonic_gen_1220.c | 2 +- plugins/LadspaEffect/swh/hermes_filter_1200.c | 2 +- plugins/LadspaEffect/swh/highpass_iir_1890.c | 2 +- plugins/LadspaEffect/swh/hilbert_1440.c | 2 +- plugins/LadspaEffect/swh/imp_1199.c | 2 +- plugins/LadspaEffect/swh/impulse_1885.c | 2 +- plugins/LadspaEffect/swh/inv_1429.c | 2 +- plugins/LadspaEffect/swh/karaoke_1409.c | 2 +- plugins/LadspaEffect/swh/latency_1914.c | 2 +- plugins/LadspaEffect/swh/lcr_delay_1436.c | 2 +- plugins/LadspaEffect/swh/lowpass_iir_1891.c | 2 +- plugins/LadspaEffect/swh/ls_filter_1908.c | 2 +- plugins/LadspaEffect/swh/matrix_ms_st_1421.c | 2 +- plugins/LadspaEffect/swh/matrix_spatialiser_1422.c | 2 +- plugins/LadspaEffect/swh/matrix_st_ms_1420.c | 2 +- plugins/LadspaEffect/swh/mbeq_1197.c | 2 +- plugins/LadspaEffect/swh/mod_delay_1419.c | 2 +- plugins/LadspaEffect/swh/multivoice_chorus_1201.c | 2 +- plugins/LadspaEffect/swh/notch_iir_1894.c | 2 +- plugins/LadspaEffect/swh/phasers_1217.c | 2 +- plugins/LadspaEffect/swh/pitch_scale_1193.c | 2 +- plugins/LadspaEffect/swh/pitch_scale_1194.c | 2 +- plugins/LadspaEffect/swh/plate_1423.c | 2 +- plugins/LadspaEffect/swh/pointer_cast_1910.c | 2 +- plugins/LadspaEffect/swh/rate_shifter_1417.c | 2 +- plugins/LadspaEffect/swh/retro_flange_1208.c | 2 +- plugins/LadspaEffect/swh/revdelay_1605.c | 2 +- plugins/LadspaEffect/swh/ringmod_1188.c | 2 +- plugins/LadspaEffect/swh/satan_maximiser_1408.c | 2 +- plugins/LadspaEffect/swh/sc1_1425.c | 2 +- plugins/LadspaEffect/swh/sc2_1426.c | 2 +- plugins/LadspaEffect/swh/sc3_1427.c | 2 +- plugins/LadspaEffect/swh/sc4_1882.c | 2 +- plugins/LadspaEffect/swh/sc4m_1916.c | 2 +- plugins/LadspaEffect/swh/se4_1883.c | 2 +- plugins/LadspaEffect/swh/shaper_1187.c | 2 +- plugins/LadspaEffect/swh/sifter_1210.c | 2 +- plugins/LadspaEffect/swh/sin_cos_1881.c | 2 +- plugins/LadspaEffect/swh/single_para_1203.c | 2 +- plugins/LadspaEffect/swh/sinus_wavewrapper_1198.c | 2 +- plugins/LadspaEffect/swh/smooth_decimate_1414.c | 2 +- plugins/LadspaEffect/swh/split_1406.c | 2 +- plugins/LadspaEffect/swh/step_muxer_1212.c | 2 +- plugins/LadspaEffect/swh/surround_encoder_1401.c | 2 +- plugins/LadspaEffect/swh/svf_1214.c | 2 +- plugins/LadspaEffect/swh/tape_delay_1211.c | 2 +- plugins/LadspaEffect/swh/transient_1206.c | 2 +- plugins/LadspaEffect/swh/triple_para_1204.c | 2 +- plugins/LadspaEffect/swh/valve_1209.c | 2 +- plugins/LadspaEffect/swh/valve_rect_1405.c | 2 +- plugins/LadspaEffect/swh/vocoder_1337.c | 5 ++--- plugins/LadspaEffect/swh/vynil_1905.c | 2 +- plugins/LadspaEffect/swh/wave_terrain_1412.c | 2 +- plugins/LadspaEffect/swh/xfade_1915.c | 2 +- plugins/LadspaEffect/swh/zm1_1428.c | 2 +- 94 files changed, 95 insertions(+), 96 deletions(-) diff --git a/plugins/LadspaEffect/swh/alias_1407.c b/plugins/LadspaEffect/swh/alias_1407.c index 8237dbfb9..444d9ed28 100644 --- a/plugins/LadspaEffect/swh/alias_1407.c +++ b/plugins/LadspaEffect/swh/alias_1407.c @@ -44,7 +44,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/allpass_1895.c b/plugins/LadspaEffect/swh/allpass_1895.c index 55360037e..062f4e32f 100644 --- a/plugins/LadspaEffect/swh/allpass_1895.c +++ b/plugins/LadspaEffect/swh/allpass_1895.c @@ -127,7 +127,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/am_pitchshift_1433.c b/plugins/LadspaEffect/swh/am_pitchshift_1433.c index 0c2070a35..adc5f3029 100644 --- a/plugins/LadspaEffect/swh/am_pitchshift_1433.c +++ b/plugins/LadspaEffect/swh/am_pitchshift_1433.c @@ -66,7 +66,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/amp_1181.c b/plugins/LadspaEffect/swh/amp_1181.c index 36ada6e3d..2bf8dd3d8 100644 --- a/plugins/LadspaEffect/swh/amp_1181.c +++ b/plugins/LadspaEffect/swh/amp_1181.c @@ -47,7 +47,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/bandpass_a_iir_1893.c b/plugins/LadspaEffect/swh/bandpass_a_iir_1893.c index ba5c0c794..c477a4b88 100644 --- a/plugins/LadspaEffect/swh/bandpass_a_iir_1893.c +++ b/plugins/LadspaEffect/swh/bandpass_a_iir_1893.c @@ -51,7 +51,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/bandpass_iir_1892.c b/plugins/LadspaEffect/swh/bandpass_iir_1892.c index 9ccdedd15..4f160c4f0 100644 --- a/plugins/LadspaEffect/swh/bandpass_iir_1892.c +++ b/plugins/LadspaEffect/swh/bandpass_iir_1892.c @@ -58,7 +58,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/bode_shifter_1431.c b/plugins/LadspaEffect/swh/bode_shifter_1431.c index cbce06f1b..597864a18 100644 --- a/plugins/LadspaEffect/swh/bode_shifter_1431.c +++ b/plugins/LadspaEffect/swh/bode_shifter_1431.c @@ -92,7 +92,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/bode_shifter_cv_1432.c b/plugins/LadspaEffect/swh/bode_shifter_cv_1432.c index 936b7bb1f..067e17c21 100644 --- a/plugins/LadspaEffect/swh/bode_shifter_cv_1432.c +++ b/plugins/LadspaEffect/swh/bode_shifter_cv_1432.c @@ -99,7 +99,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/butterworth_1902.c b/plugins/LadspaEffect/swh/butterworth_1902.c index 25d722297..74bd6d489 100644 --- a/plugins/LadspaEffect/swh/butterworth_1902.c +++ b/plugins/LadspaEffect/swh/butterworth_1902.c @@ -89,7 +89,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/chebstortion_1430.c b/plugins/LadspaEffect/swh/chebstortion_1430.c index f9c6b6420..baa5d9694 100644 --- a/plugins/LadspaEffect/swh/chebstortion_1430.c +++ b/plugins/LadspaEffect/swh/chebstortion_1430.c @@ -86,7 +86,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/comb_1190.c b/plugins/LadspaEffect/swh/comb_1190.c index 28ea7098f..7f72b8cd7 100644 --- a/plugins/LadspaEffect/swh/comb_1190.c +++ b/plugins/LadspaEffect/swh/comb_1190.c @@ -55,7 +55,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/comb_1887.c b/plugins/LadspaEffect/swh/comb_1887.c index 38ff4a3fe..81a7268bd 100644 --- a/plugins/LadspaEffect/swh/comb_1887.c +++ b/plugins/LadspaEffect/swh/comb_1887.c @@ -125,7 +125,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/comb_splitter_1411.c b/plugins/LadspaEffect/swh/comb_splitter_1411.c index a090308df..1ffb152d7 100644 --- a/plugins/LadspaEffect/swh/comb_splitter_1411.c +++ b/plugins/LadspaEffect/swh/comb_splitter_1411.c @@ -55,7 +55,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/const_1909.c b/plugins/LadspaEffect/swh/const_1909.c index 86c5e4ff9..3bfc221ef 100644 --- a/plugins/LadspaEffect/swh/const_1909.c +++ b/plugins/LadspaEffect/swh/const_1909.c @@ -45,7 +45,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/crossover_dist_1404.c b/plugins/LadspaEffect/swh/crossover_dist_1404.c index a70afb589..fdffacf68 100644 --- a/plugins/LadspaEffect/swh/crossover_dist_1404.c +++ b/plugins/LadspaEffect/swh/crossover_dist_1404.c @@ -49,7 +49,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/dc_remove_1207.c b/plugins/LadspaEffect/swh/dc_remove_1207.c index 66f491efc..76593f8ca 100644 --- a/plugins/LadspaEffect/swh/dc_remove_1207.c +++ b/plugins/LadspaEffect/swh/dc_remove_1207.c @@ -44,7 +44,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/decay_1886.c b/plugins/LadspaEffect/swh/decay_1886.c index 18143c782..da878478b 100644 --- a/plugins/LadspaEffect/swh/decay_1886.c +++ b/plugins/LadspaEffect/swh/decay_1886.c @@ -53,7 +53,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/decimator_1202.c b/plugins/LadspaEffect/swh/decimator_1202.c index 8d2a2b5ac..2975605bd 100644 --- a/plugins/LadspaEffect/swh/decimator_1202.c +++ b/plugins/LadspaEffect/swh/decimator_1202.c @@ -53,7 +53,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/declip_1195.c b/plugins/LadspaEffect/swh/declip_1195.c index c51d9b74e..f25417976 100644 --- a/plugins/LadspaEffect/swh/declip_1195.c +++ b/plugins/LadspaEffect/swh/declip_1195.c @@ -48,7 +48,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/delay_1898.c b/plugins/LadspaEffect/swh/delay_1898.c index 912e89bf4..998c1bbbd 100644 --- a/plugins/LadspaEffect/swh/delay_1898.c +++ b/plugins/LadspaEffect/swh/delay_1898.c @@ -98,7 +98,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/delayorama_1402.c b/plugins/LadspaEffect/swh/delayorama_1402.c index a0e85dd06..a0cb2a861 100644 --- a/plugins/LadspaEffect/swh/delayorama_1402.c +++ b/plugins/LadspaEffect/swh/delayorama_1402.c @@ -90,7 +90,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/diode_1185.c b/plugins/LadspaEffect/swh/diode_1185.c index 3fb8a0a3b..cfc2d22d4 100644 --- a/plugins/LadspaEffect/swh/diode_1185.c +++ b/plugins/LadspaEffect/swh/diode_1185.c @@ -44,7 +44,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/divider_1186.c b/plugins/LadspaEffect/swh/divider_1186.c index 3fd1e764a..cf9fad685 100644 --- a/plugins/LadspaEffect/swh/divider_1186.c +++ b/plugins/LadspaEffect/swh/divider_1186.c @@ -50,7 +50,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/dj_eq_1901.c b/plugins/LadspaEffect/swh/dj_eq_1901.c index b821d4380..950eedad4 100644 --- a/plugins/LadspaEffect/swh/dj_eq_1901.c +++ b/plugins/LadspaEffect/swh/dj_eq_1901.c @@ -85,7 +85,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/dj_flanger_1438.c b/plugins/LadspaEffect/swh/dj_flanger_1438.c index c2ca3375b..b970886a9 100644 --- a/plugins/LadspaEffect/swh/dj_flanger_1438.c +++ b/plugins/LadspaEffect/swh/dj_flanger_1438.c @@ -63,7 +63,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/dyson_compress_1403.c b/plugins/LadspaEffect/swh/dyson_compress_1403.c index a4078eb24..22cc0fa94 100644 --- a/plugins/LadspaEffect/swh/dyson_compress_1403.c +++ b/plugins/LadspaEffect/swh/dyson_compress_1403.c @@ -130,7 +130,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/fad_delay_1192.c b/plugins/LadspaEffect/swh/fad_delay_1192.c index d90e517a6..85d0c3dee 100644 --- a/plugins/LadspaEffect/swh/fad_delay_1192.c +++ b/plugins/LadspaEffect/swh/fad_delay_1192.c @@ -57,7 +57,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/fast_lookahead_limiter_1913.c b/plugins/LadspaEffect/swh/fast_lookahead_limiter_1913.c index 68a9f47b9..8295e2298 100644 --- a/plugins/LadspaEffect/swh/fast_lookahead_limiter_1913.c +++ b/plugins/LadspaEffect/swh/fast_lookahead_limiter_1913.c @@ -81,7 +81,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/flanger_1191.c b/plugins/LadspaEffect/swh/flanger_1191.c index d27d2600d..e542316fd 100644 --- a/plugins/LadspaEffect/swh/flanger_1191.c +++ b/plugins/LadspaEffect/swh/flanger_1191.c @@ -63,7 +63,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/foldover_1213.c b/plugins/LadspaEffect/swh/foldover_1213.c index ee3dd5292..8f2ad857e 100644 --- a/plugins/LadspaEffect/swh/foldover_1213.c +++ b/plugins/LadspaEffect/swh/foldover_1213.c @@ -46,7 +46,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/foverdrive_1196.c b/plugins/LadspaEffect/swh/foverdrive_1196.c index 3c5f5cc64..94306d01e 100644 --- a/plugins/LadspaEffect/swh/foverdrive_1196.c +++ b/plugins/LadspaEffect/swh/foverdrive_1196.c @@ -44,7 +44,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/freq_tracker_1418.c b/plugins/LadspaEffect/swh/freq_tracker_1418.c index 85f7f4888..831c6de15 100644 --- a/plugins/LadspaEffect/swh/freq_tracker_1418.c +++ b/plugins/LadspaEffect/swh/freq_tracker_1418.c @@ -52,7 +52,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/gate_1410.c b/plugins/LadspaEffect/swh/gate_1410.c index 5e54cbf52..d6fdf7da8 100644 --- a/plugins/LadspaEffect/swh/gate_1410.c +++ b/plugins/LadspaEffect/swh/gate_1410.c @@ -76,7 +76,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/giant_flange_1437.c b/plugins/LadspaEffect/swh/giant_flange_1437.c index 68b43833a..dd2031806 100644 --- a/plugins/LadspaEffect/swh/giant_flange_1437.c +++ b/plugins/LadspaEffect/swh/giant_flange_1437.c @@ -77,7 +77,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/gong_1424.c b/plugins/LadspaEffect/swh/gong_1424.c index 858d31384..ea2f4161d 100644 --- a/plugins/LadspaEffect/swh/gong_1424.c +++ b/plugins/LadspaEffect/swh/gong_1424.c @@ -105,7 +105,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/gong_beater_1439.c b/plugins/LadspaEffect/swh/gong_beater_1439.c index 41368e1cf..26f967a11 100644 --- a/plugins/LadspaEffect/swh/gong_beater_1439.c +++ b/plugins/LadspaEffect/swh/gong_beater_1439.c @@ -58,7 +58,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/gsm_1215.c b/plugins/LadspaEffect/swh/gsm_1215.c index 85f7e575b..279e2b1c1 100644 --- a/plugins/LadspaEffect/swh/gsm_1215.c +++ b/plugins/LadspaEffect/swh/gsm_1215.c @@ -70,7 +70,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/gverb_1216.c b/plugins/LadspaEffect/swh/gverb_1216.c index 3e7f334bb..d7e5a9214 100644 --- a/plugins/LadspaEffect/swh/gverb_1216.c +++ b/plugins/LadspaEffect/swh/gverb_1216.c @@ -74,7 +74,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/hard_limiter_1413.c b/plugins/LadspaEffect/swh/hard_limiter_1413.c index 00a950a7b..ab1ab0f62 100644 --- a/plugins/LadspaEffect/swh/hard_limiter_1413.c +++ b/plugins/LadspaEffect/swh/hard_limiter_1413.c @@ -52,7 +52,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/harmonic_gen_1220.c b/plugins/LadspaEffect/swh/harmonic_gen_1220.c index 9c19ac3c7..26c19630f 100644 --- a/plugins/LadspaEffect/swh/harmonic_gen_1220.c +++ b/plugins/LadspaEffect/swh/harmonic_gen_1220.c @@ -97,7 +97,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/hermes_filter_1200.c b/plugins/LadspaEffect/swh/hermes_filter_1200.c index ab675ddaa..a15d7c9e8 100644 --- a/plugins/LadspaEffect/swh/hermes_filter_1200.c +++ b/plugins/LadspaEffect/swh/hermes_filter_1200.c @@ -300,7 +300,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/highpass_iir_1890.c b/plugins/LadspaEffect/swh/highpass_iir_1890.c index 9cc00d79c..e0bca2a14 100644 --- a/plugins/LadspaEffect/swh/highpass_iir_1890.c +++ b/plugins/LadspaEffect/swh/highpass_iir_1890.c @@ -52,7 +52,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/hilbert_1440.c b/plugins/LadspaEffect/swh/hilbert_1440.c index 7e9d6ee5d..4a6546b27 100644 --- a/plugins/LadspaEffect/swh/hilbert_1440.c +++ b/plugins/LadspaEffect/swh/hilbert_1440.c @@ -83,7 +83,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/imp_1199.c b/plugins/LadspaEffect/swh/imp_1199.c index 2fe77139c..62c2deff3 100644 --- a/plugins/LadspaEffect/swh/imp_1199.c +++ b/plugins/LadspaEffect/swh/imp_1199.c @@ -145,7 +145,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/impulse_1885.c b/plugins/LadspaEffect/swh/impulse_1885.c index a7b053586..e4ebd2d41 100644 --- a/plugins/LadspaEffect/swh/impulse_1885.c +++ b/plugins/LadspaEffect/swh/impulse_1885.c @@ -49,7 +49,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/inv_1429.c b/plugins/LadspaEffect/swh/inv_1429.c index 297aea748..1a38faff6 100644 --- a/plugins/LadspaEffect/swh/inv_1429.c +++ b/plugins/LadspaEffect/swh/inv_1429.c @@ -42,7 +42,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/karaoke_1409.c b/plugins/LadspaEffect/swh/karaoke_1409.c index b774e63a9..4c3091f77 100644 --- a/plugins/LadspaEffect/swh/karaoke_1409.c +++ b/plugins/LadspaEffect/swh/karaoke_1409.c @@ -48,7 +48,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/latency_1914.c b/plugins/LadspaEffect/swh/latency_1914.c index 67daba06d..5744a2086 100644 --- a/plugins/LadspaEffect/swh/latency_1914.c +++ b/plugins/LadspaEffect/swh/latency_1914.c @@ -50,7 +50,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/lcr_delay_1436.c b/plugins/LadspaEffect/swh/lcr_delay_1436.c index 00340e407..5ae8db3bc 100644 --- a/plugins/LadspaEffect/swh/lcr_delay_1436.c +++ b/plugins/LadspaEffect/swh/lcr_delay_1436.c @@ -83,7 +83,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/lowpass_iir_1891.c b/plugins/LadspaEffect/swh/lowpass_iir_1891.c index 5ee714c2c..be1c806c1 100644 --- a/plugins/LadspaEffect/swh/lowpass_iir_1891.c +++ b/plugins/LadspaEffect/swh/lowpass_iir_1891.c @@ -53,7 +53,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/ls_filter_1908.c b/plugins/LadspaEffect/swh/ls_filter_1908.c index edc23bf3c..97c366a40 100644 --- a/plugins/LadspaEffect/swh/ls_filter_1908.c +++ b/plugins/LadspaEffect/swh/ls_filter_1908.c @@ -54,7 +54,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/matrix_ms_st_1421.c b/plugins/LadspaEffect/swh/matrix_ms_st_1421.c index 121bf0c71..2fddf9311 100644 --- a/plugins/LadspaEffect/swh/matrix_ms_st_1421.c +++ b/plugins/LadspaEffect/swh/matrix_ms_st_1421.c @@ -48,7 +48,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/matrix_spatialiser_1422.c b/plugins/LadspaEffect/swh/matrix_spatialiser_1422.c index edd92475b..7812ddfff 100644 --- a/plugins/LadspaEffect/swh/matrix_spatialiser_1422.c +++ b/plugins/LadspaEffect/swh/matrix_spatialiser_1422.c @@ -107,7 +107,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/matrix_st_ms_1420.c b/plugins/LadspaEffect/swh/matrix_st_ms_1420.c index 8865a02ba..8c97c7cb9 100644 --- a/plugins/LadspaEffect/swh/matrix_st_ms_1420.c +++ b/plugins/LadspaEffect/swh/matrix_st_ms_1420.c @@ -46,7 +46,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/mbeq_1197.c b/plugins/LadspaEffect/swh/mbeq_1197.c index 7fb7a252f..a9bea01fe 100644 --- a/plugins/LadspaEffect/swh/mbeq_1197.c +++ b/plugins/LadspaEffect/swh/mbeq_1197.c @@ -120,7 +120,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/mod_delay_1419.c b/plugins/LadspaEffect/swh/mod_delay_1419.c index b763df2a6..b27a7612e 100644 --- a/plugins/LadspaEffect/swh/mod_delay_1419.c +++ b/plugins/LadspaEffect/swh/mod_delay_1419.c @@ -53,7 +53,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/multivoice_chorus_1201.c b/plugins/LadspaEffect/swh/multivoice_chorus_1201.c index 44678bd38..5f69bf04e 100644 --- a/plugins/LadspaEffect/swh/multivoice_chorus_1201.c +++ b/plugins/LadspaEffect/swh/multivoice_chorus_1201.c @@ -74,7 +74,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/notch_iir_1894.c b/plugins/LadspaEffect/swh/notch_iir_1894.c index af4d04760..396e44fa2 100644 --- a/plugins/LadspaEffect/swh/notch_iir_1894.c +++ b/plugins/LadspaEffect/swh/notch_iir_1894.c @@ -58,7 +58,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/phasers_1217.c b/plugins/LadspaEffect/swh/phasers_1217.c index e8a7a6d27..14673e360 100644 --- a/plugins/LadspaEffect/swh/phasers_1217.c +++ b/plugins/LadspaEffect/swh/phasers_1217.c @@ -175,7 +175,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/pitch_scale_1193.c b/plugins/LadspaEffect/swh/pitch_scale_1193.c index f9c7f8148..c811a84bc 100644 --- a/plugins/LadspaEffect/swh/pitch_scale_1193.c +++ b/plugins/LadspaEffect/swh/pitch_scale_1193.c @@ -54,7 +54,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/pitch_scale_1194.c b/plugins/LadspaEffect/swh/pitch_scale_1194.c index 41b81058e..747c16ea6 100644 --- a/plugins/LadspaEffect/swh/pitch_scale_1194.c +++ b/plugins/LadspaEffect/swh/pitch_scale_1194.c @@ -54,7 +54,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/plate_1423.c b/plugins/LadspaEffect/swh/plate_1423.c index 9902c36a4..0127bb6f0 100644 --- a/plugins/LadspaEffect/swh/plate_1423.c +++ b/plugins/LadspaEffect/swh/plate_1423.c @@ -60,7 +60,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/pointer_cast_1910.c b/plugins/LadspaEffect/swh/pointer_cast_1910.c index ae5766204..464fb1b64 100644 --- a/plugins/LadspaEffect/swh/pointer_cast_1910.c +++ b/plugins/LadspaEffect/swh/pointer_cast_1910.c @@ -59,7 +59,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/rate_shifter_1417.c b/plugins/LadspaEffect/swh/rate_shifter_1417.c index 638561acc..750f82972 100644 --- a/plugins/LadspaEffect/swh/rate_shifter_1417.c +++ b/plugins/LadspaEffect/swh/rate_shifter_1417.c @@ -51,7 +51,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/retro_flange_1208.c b/plugins/LadspaEffect/swh/retro_flange_1208.c index 0b2050946..5df5cc338 100644 --- a/plugins/LadspaEffect/swh/retro_flange_1208.c +++ b/plugins/LadspaEffect/swh/retro_flange_1208.c @@ -78,7 +78,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/revdelay_1605.c b/plugins/LadspaEffect/swh/revdelay_1605.c index b1cc32d94..1b014b902 100644 --- a/plugins/LadspaEffect/swh/revdelay_1605.c +++ b/plugins/LadspaEffect/swh/revdelay_1605.c @@ -65,7 +65,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/ringmod_1188.c b/plugins/LadspaEffect/swh/ringmod_1188.c index 081ba4e1b..5c4c16b39 100644 --- a/plugins/LadspaEffect/swh/ringmod_1188.c +++ b/plugins/LadspaEffect/swh/ringmod_1188.c @@ -76,7 +76,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/satan_maximiser_1408.c b/plugins/LadspaEffect/swh/satan_maximiser_1408.c index cccfa06a5..913711574 100644 --- a/plugins/LadspaEffect/swh/satan_maximiser_1408.c +++ b/plugins/LadspaEffect/swh/satan_maximiser_1408.c @@ -56,7 +56,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/sc1_1425.c b/plugins/LadspaEffect/swh/sc1_1425.c index 9f559fda6..8a5e143ef 100644 --- a/plugins/LadspaEffect/swh/sc1_1425.c +++ b/plugins/LadspaEffect/swh/sc1_1425.c @@ -68,7 +68,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/sc2_1426.c b/plugins/LadspaEffect/swh/sc2_1426.c index b4ec37cc3..a95abd777 100644 --- a/plugins/LadspaEffect/swh/sc2_1426.c +++ b/plugins/LadspaEffect/swh/sc2_1426.c @@ -70,7 +70,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/sc3_1427.c b/plugins/LadspaEffect/swh/sc3_1427.c index 85fce68a6..e89609bf5 100644 --- a/plugins/LadspaEffect/swh/sc3_1427.c +++ b/plugins/LadspaEffect/swh/sc3_1427.c @@ -76,7 +76,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/sc4_1882.c b/plugins/LadspaEffect/swh/sc4_1882.c index 3fb194096..5ac873302 100644 --- a/plugins/LadspaEffect/swh/sc4_1882.c +++ b/plugins/LadspaEffect/swh/sc4_1882.c @@ -80,7 +80,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/sc4m_1916.c b/plugins/LadspaEffect/swh/sc4m_1916.c index 1b87031e6..ee9a952a5 100644 --- a/plugins/LadspaEffect/swh/sc4m_1916.c +++ b/plugins/LadspaEffect/swh/sc4m_1916.c @@ -76,7 +76,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/se4_1883.c b/plugins/LadspaEffect/swh/se4_1883.c index de784602a..585d474e0 100644 --- a/plugins/LadspaEffect/swh/se4_1883.c +++ b/plugins/LadspaEffect/swh/se4_1883.c @@ -80,7 +80,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/shaper_1187.c b/plugins/LadspaEffect/swh/shaper_1187.c index e7efd33ae..f036a57fb 100644 --- a/plugins/LadspaEffect/swh/shaper_1187.c +++ b/plugins/LadspaEffect/swh/shaper_1187.c @@ -44,7 +44,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/sifter_1210.c b/plugins/LadspaEffect/swh/sifter_1210.c index 8d8464ceb..8adcdbd27 100644 --- a/plugins/LadspaEffect/swh/sifter_1210.c +++ b/plugins/LadspaEffect/swh/sifter_1210.c @@ -96,7 +96,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/sin_cos_1881.c b/plugins/LadspaEffect/swh/sin_cos_1881.c index 376733f8b..500b6808b 100644 --- a/plugins/LadspaEffect/swh/sin_cos_1881.c +++ b/plugins/LadspaEffect/swh/sin_cos_1881.c @@ -52,7 +52,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/single_para_1203.c b/plugins/LadspaEffect/swh/single_para_1203.c index 3a0543d0a..d189c2682 100644 --- a/plugins/LadspaEffect/swh/single_para_1203.c +++ b/plugins/LadspaEffect/swh/single_para_1203.c @@ -53,7 +53,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/sinus_wavewrapper_1198.c b/plugins/LadspaEffect/swh/sinus_wavewrapper_1198.c index efe4e9e1d..02be6d68a 100644 --- a/plugins/LadspaEffect/swh/sinus_wavewrapper_1198.c +++ b/plugins/LadspaEffect/swh/sinus_wavewrapper_1198.c @@ -44,7 +44,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/smooth_decimate_1414.c b/plugins/LadspaEffect/swh/smooth_decimate_1414.c index eef419102..532b84b0a 100644 --- a/plugins/LadspaEffect/swh/smooth_decimate_1414.c +++ b/plugins/LadspaEffect/swh/smooth_decimate_1414.c @@ -53,7 +53,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/split_1406.c b/plugins/LadspaEffect/swh/split_1406.c index 03dace10e..48c9f7117 100644 --- a/plugins/LadspaEffect/swh/split_1406.c +++ b/plugins/LadspaEffect/swh/split_1406.c @@ -44,7 +44,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/step_muxer_1212.c b/plugins/LadspaEffect/swh/step_muxer_1212.c index b5f9c3ae2..94dc51e73 100644 --- a/plugins/LadspaEffect/swh/step_muxer_1212.c +++ b/plugins/LadspaEffect/swh/step_muxer_1212.c @@ -70,7 +70,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/surround_encoder_1401.c b/plugins/LadspaEffect/swh/surround_encoder_1401.c index 93893f193..c0f970e7e 100644 --- a/plugins/LadspaEffect/swh/surround_encoder_1401.c +++ b/plugins/LadspaEffect/swh/surround_encoder_1401.c @@ -90,7 +90,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/svf_1214.c b/plugins/LadspaEffect/swh/svf_1214.c index 2eb0739b5..24117d757 100644 --- a/plugins/LadspaEffect/swh/svf_1214.c +++ b/plugins/LadspaEffect/swh/svf_1214.c @@ -130,7 +130,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/tape_delay_1211.c b/plugins/LadspaEffect/swh/tape_delay_1211.c index c478696a7..5338dadfa 100644 --- a/plugins/LadspaEffect/swh/tape_delay_1211.c +++ b/plugins/LadspaEffect/swh/tape_delay_1211.c @@ -79,7 +79,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/transient_1206.c b/plugins/LadspaEffect/swh/transient_1206.c index eec67ceeb..6e63fd526 100644 --- a/plugins/LadspaEffect/swh/transient_1206.c +++ b/plugins/LadspaEffect/swh/transient_1206.c @@ -63,7 +63,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/triple_para_1204.c b/plugins/LadspaEffect/swh/triple_para_1204.c index c3e481186..8d3e63f3f 100644 --- a/plugins/LadspaEffect/swh/triple_para_1204.c +++ b/plugins/LadspaEffect/swh/triple_para_1204.c @@ -77,7 +77,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/valve_1209.c b/plugins/LadspaEffect/swh/valve_1209.c index e30ac9a25..2ab03dd17 100644 --- a/plugins/LadspaEffect/swh/valve_1209.c +++ b/plugins/LadspaEffect/swh/valve_1209.c @@ -51,7 +51,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/valve_rect_1405.c b/plugins/LadspaEffect/swh/valve_rect_1405.c index 0a5702eee..9a87af2fa 100644 --- a/plugins/LadspaEffect/swh/valve_rect_1405.c +++ b/plugins/LadspaEffect/swh/valve_rect_1405.c @@ -56,7 +56,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/vocoder_1337.c b/plugins/LadspaEffect/swh/vocoder_1337.c index 38c0cd656..0fb51688a 100644 --- a/plugins/LadspaEffect/swh/vocoder_1337.c +++ b/plugins/LadspaEffect/swh/vocoder_1337.c @@ -335,8 +335,7 @@ LADSPA_Descriptor * g_psDescriptor = NULL; /* __attribute__((constructor)) swh_init() is called automatically when the plugin library is first loaded. */ -void -_init() { +void __attribute__((constructor)) swh_init() { char ** pcPortNames; LADSPA_PortDescriptor * piPortDescriptors; LADSPA_PortRangeHint * psPortRangeHints; @@ -448,7 +447,7 @@ const LADSPA_Descriptor * ladspa_descriptor(unsigned long Index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/vynil_1905.c b/plugins/LadspaEffect/swh/vynil_1905.c index 6babf7620..03112ac8e 100644 --- a/plugins/LadspaEffect/swh/vynil_1905.c +++ b/plugins/LadspaEffect/swh/vynil_1905.c @@ -93,7 +93,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/wave_terrain_1412.c b/plugins/LadspaEffect/swh/wave_terrain_1412.c index a3c1b15fa..46791bdc1 100644 --- a/plugins/LadspaEffect/swh/wave_terrain_1412.c +++ b/plugins/LadspaEffect/swh/wave_terrain_1412.c @@ -44,7 +44,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/xfade_1915.c b/plugins/LadspaEffect/swh/xfade_1915.c index eb3173e7f..3d0d01d01 100644 --- a/plugins/LadspaEffect/swh/xfade_1915.c +++ b/plugins/LadspaEffect/swh/xfade_1915.c @@ -79,7 +79,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif diff --git a/plugins/LadspaEffect/swh/zm1_1428.c b/plugins/LadspaEffect/swh/zm1_1428.c index 21ca63424..5c3c19b5d 100644 --- a/plugins/LadspaEffect/swh/zm1_1428.c +++ b/plugins/LadspaEffect/swh/zm1_1428.c @@ -43,7 +43,7 @@ const LADSPA_Descriptor *ladspa_descriptor(unsigned long index) { #ifdef WIN32 if (bIsFirstTime) { - _init(); + swh_init(); bIsFirstTime = 0; } #endif