Added Xcode exporter. Its only set to build for VSTi on Mac (32 or 64-bit work) at the moment as a tweak the AU build. Missing functions and types found on Windows are now supplemented with replacements. Other typedefs depending on compiler implementation were replaced with more predictable ones
This commit is contained in:
parent
2482447f98
commit
637e49fc53
8 changed files with 422 additions and 219 deletions
|
@ -1,22 +1,52 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<JUCERPROJECT id="wUKQiT" name="JuceOPLVSTi" projectType="audioplug" version="0.11.1"
|
||||
bundleIdentifier="com.plainweave.JuceOPLVSTi" buildVST="1" buildAU="1"
|
||||
pluginName="JuceOPLVSTi" pluginDesc="JuceOPLVSTi" pluginManufacturer="Plainweave Software"
|
||||
<JUCERPROJECT id="wUKQiT" name="JuceOPL" projectType="audioplug" version="0.11.1"
|
||||
bundleIdentifier="com.plainweave.JuceOPL" buildVST="1" buildAU="0"
|
||||
pluginName="JuceOPL" pluginDesc="JuceOPL 64-bit" pluginManufacturer="Plainweave Software"
|
||||
pluginManufacturerCode="Pwve" pluginCode="JOPL" pluginChannelConfigs="{0, 1}"
|
||||
pluginIsSynth="1" pluginWantsMidiIn="1" pluginProducesMidiOut="0"
|
||||
pluginSilenceInIsSilenceOut="0" pluginEditorRequiresKeys="0"
|
||||
pluginAUExportPrefix="JuceOPLVSTiAU" pluginRTASCategory="" aaxIdentifier="com.plainweave.JuceOPLVSTi"
|
||||
pluginAUExportPrefix="JuceOPL-AU" pluginRTASCategory="" aaxIdentifier="com.plainweave.JuceOPLVSTi"
|
||||
pluginAAXCategory="AAX_ePlugInCategory_Dynamics" jucerVersion="3.1.0"
|
||||
buildVST3="0" buildRTAS="0" buildAAX="0" includeBinaryInAppConfig="1">
|
||||
<MAINGROUP id="TOefyq" name="JuceOPLVSTi">
|
||||
<MAINGROUP id="TOefyq" name="JuceOPL">
|
||||
<GROUP id="{DCA755EB-7953-0641-E719-95C7850E5B2B}" name="Source">
|
||||
<FILE id="V4Xg2N" name="JuceOPL_README.txt" compile="0" resource="1"
|
||||
file="JuceOPL_README.txt"/>
|
||||
<GROUP id="{0A7415DD-1C4B-6ECE-F8C8-1830F22F3693}" name="added">
|
||||
<FILE id="b9ci03" name="itoa.h" compile="0" resource="0" file="Source/itoa.h"/>
|
||||
<FILE id="zqVgdd" name="windows.h" compile="0" resource="0" file="Source/windows.h"/>
|
||||
</GROUP>
|
||||
<GROUP id="{5B100E11-BFF8-326B-F805-37178229BDAA}" name="introjucer">
|
||||
<FILE id="SyIvF1" name="PluginGui.cpp" compile="1" resource="0" file="Source/PluginGui.cpp"/>
|
||||
<FILE id="Phxzxb" name="PluginProcessor.cpp" compile="1" resource="0"
|
||||
file="Source/PluginProcessor.cpp"/>
|
||||
<FILE id="IvGocs" name="PluginProcessor.h" compile="0" resource="0"
|
||||
file="Source/PluginProcessor.h"/>
|
||||
<FILE id="a2DQGI" name="PluginGui.h" compile="0" resource="0" file="Source/PluginGui.h"/>
|
||||
</GROUP>
|
||||
<GROUP id="{04EB9715-F5C8-AD8A-9B89-2832B524778C}" name="modified">
|
||||
<FILE id="o0sULY" name="DROMultiplexer.cpp" compile="1" resource="0"
|
||||
file="Source/DROMultiplexer.cpp"/>
|
||||
<FILE id="cULQN7" name="DROMultiplexer.h" compile="0" resource="0"
|
||||
file="Source/DROMultiplexer.h"/>
|
||||
<FILE id="KRj0DZ" name="tests.cpp" compile="1" resource="0" file="Source/tests.cpp"/>
|
||||
<FILE id="c6G4EF" name="config.h" compile="0" resource="0" file="Source/config.h"/>
|
||||
<FILE id="hjHmNq" name="zdopl.cpp" compile="1" resource="0" file="Source/zdopl.cpp"/>
|
||||
</GROUP>
|
||||
<GROUP id="{6B1E4F6E-4D95-CAB5-DAD3-E894F5CA0730}" name="DOSBox">
|
||||
<FILE id="BZFxoj" name="adlib.h" compile="0" resource="0" file="Source/adlib.h"/>
|
||||
<FILE id="TnpE3r" name="dbopl.cpp" compile="1" resource="0" file="Source/dbopl.cpp"/>
|
||||
<FILE id="r3zBZz" name="dbopl.h" compile="0" resource="0" file="Source/dbopl.h"/>
|
||||
<FILE id="pXX3j1" name="dosbox.h" compile="0" resource="0" file="Source/dosbox.h"/>
|
||||
<FILE id="TLHYVa" name="hardware.h" compile="0" resource="0" file="Source/hardware.h"/>
|
||||
<FILE id="mZbr8b" name="inout.h" compile="0" resource="0" file="Source/inout.h"/>
|
||||
<FILE id="ZBjR5F" name="logging.h" compile="0" resource="0" file="Source/logging.h"/>
|
||||
<FILE id="KCyK6B" name="opl.h" compile="0" resource="0" file="Source/opl.h"/>
|
||||
<FILE id="t6cmDm" name="pic.h" compile="0" resource="0" file="Source/pic.h"/>
|
||||
<FILE id="ep2XEF" name="setup.h" compile="0" resource="0" file="Source/setup.h"/>
|
||||
<FILE id="aR7Eu7" name="mixer.h" compile="0" resource="0" file="Source/mixer.h"/>
|
||||
</GROUP>
|
||||
<FILE id="KRj0DZ" name="tests.cpp" compile="1" resource="0" file="Source/tests.cpp"/>
|
||||
<FILE id="TQyCKv" name="zdopl.h" compile="0" resource="0" file="Source/zdopl.h"/>
|
||||
<FILE id="LVSdHL" name="InstrumentLoader.h" compile="0" resource="0"
|
||||
file="Source/InstrumentLoader.h"/>
|
||||
|
@ -34,26 +64,8 @@
|
|||
file="Source/FloatParameter.cpp"/>
|
||||
<FILE id="RwbIyF" name="FloatParameter.h" compile="0" resource="0"
|
||||
file="Source/FloatParameter.h"/>
|
||||
<FILE id="SyIvF1" name="PluginGui.cpp" compile="1" resource="0" file="Source/PluginGui.cpp"/>
|
||||
<FILE id="a2DQGI" name="PluginGui.h" compile="0" resource="0" file="Source/PluginGui.h"/>
|
||||
<FILE id="BZFxoj" name="adlib.h" compile="0" resource="0" file="Source/adlib.h"/>
|
||||
<FILE id="c6G4EF" name="config.h" compile="0" resource="0" file="Source/config.h"/>
|
||||
<FILE id="TnpE3r" name="dbopl.cpp" compile="1" resource="0" file="Source/dbopl.cpp"/>
|
||||
<FILE id="r3zBZz" name="dbopl.h" compile="0" resource="0" file="Source/dbopl.h"/>
|
||||
<FILE id="pXX3j1" name="dosbox.h" compile="0" resource="0" file="Source/dosbox.h"/>
|
||||
<FILE id="TLHYVa" name="hardware.h" compile="0" resource="0" file="Source/hardware.h"/>
|
||||
<FILE id="fZWteg" name="hiopl.cpp" compile="1" resource="0" file="Source/hiopl.cpp"/>
|
||||
<FILE id="OiMwKI" name="hiopl.h" compile="0" resource="0" file="Source/hiopl.h"/>
|
||||
<FILE id="mZbr8b" name="inout.h" compile="0" resource="0" file="Source/inout.h"/>
|
||||
<FILE id="ZBjR5F" name="logging.h" compile="0" resource="0" file="Source/logging.h"/>
|
||||
<FILE id="aR7Eu7" name="mixer.h" compile="0" resource="0" file="Source/mixer.h"/>
|
||||
<FILE id="KCyK6B" name="opl.h" compile="0" resource="0" file="Source/opl.h"/>
|
||||
<FILE id="t6cmDm" name="pic.h" compile="0" resource="0" file="Source/pic.h"/>
|
||||
<FILE id="Phxzxb" name="PluginProcessor.cpp" compile="1" resource="0"
|
||||
file="Source/PluginProcessor.cpp"/>
|
||||
<FILE id="IvGocs" name="PluginProcessor.h" compile="0" resource="0"
|
||||
file="Source/PluginProcessor.h"/>
|
||||
<FILE id="ep2XEF" name="setup.h" compile="0" resource="0" file="Source/setup.h"/>
|
||||
</GROUP>
|
||||
</MAINGROUP>
|
||||
<MODULES>
|
||||
|
@ -101,5 +113,29 @@
|
|||
<MODULEPATH id="juce_video" path="../Juce/modules"/>
|
||||
</MODULEPATHS>
|
||||
</VS2013>
|
||||
<XCODE_MAC targetFolder="Builds/MacOSX" vstFolder="~/SDKs/vstsdk2.4" postbuildCommand=" # This script takes the build product and copies it to the AU, VST, VST3, RTAS and AAX folders, depending on # which plugin types you've built original=$CONFIGURATION_BUILD_DIR/$FULL_PRODUCT_NAME # this looks inside the binary to detect which platforms are needed.. copyAU=`nm -g "$CONFIGURATION_BUILD_DIR/$EXECUTABLE_PATH" | grep -i 'AudioUnit' | wc -l` copyVST=`nm -g "$CONFIGURATION_BUILD_DIR/$EXECUTABLE_PATH" | grep -i 'VSTPlugin' | wc -l` copyVST3=`nm -g "$CONFIGURATION_BUILD_DIR/$EXECUTABLE_PATH" | grep -i 'GetPluginFactory' | wc -l` copyRTAS=`nm -g "$CONFIGURATION_BUILD_DIR/$EXECUTABLE_PATH" | grep -i 'CProcess' | wc -l` copyAAX=`nm -g "$CONFIGURATION_BUILD_DIR/$EXECUTABLE_PATH" | grep -i 'ACFStartup' | wc -l` if [ $copyAU -gt 0 ]; then echo "Copying to AudioUnit folder..." AU=~/Library/Audio/Plug-Ins/Components/$PRODUCT_NAME.component if [ -d "$AU" ]; then rm -r "$AU" fi cp -r "$original" "$AU" sed -i "" -e 's/TDMwPTul/BNDLPTul/g' "$AU/Contents/PkgInfo" sed -i "" -e 's/TDMw/BNDL/g' "$AU/Contents/$INFOPLIST_FILE" # Fix info.plist for AUs built with Xcode 3 if [ -f "$DEVELOPER_DIR/Library/Developer/CoreAudio/AudioUnits/AUPublic/AUBase/AUPlugInDispatch.cpp" ]; then echo else echo "Removing AudioComponents entry from Info.plist because this is not a new-format AU" /usr/libexec/PlistBuddy -c "Delete AudioComponents" "$AU/Contents/Info.plist" fi fi if [ $copyVST -gt 0 ]; then echo "Copying to VST folder..." VST=~/Library/Audio/Plug-Ins/VST/$PRODUCT_NAME.vst if [ -d "$VST" ]; then rm -r "$VST" fi cp -r "$original" "$VST" sed -i "" -e 's/TDMwPTul/BNDLPTul/g' "$VST/Contents/PkgInfo" sed -i "" -e 's/TDMw/BNDL/g' "$VST/Contents/$INFOPLIST_FILE" fi if [ $copyVST3 -gt 0 ]; then echo "Copying to VST3 folder..." VST3=~/Library/Audio/Plug-Ins/VST3/$PRODUCT_NAME.vst3 if [ -d "$VST3" ]; then rm -r "$VST3" fi cp -r "$original" "$VST3" sed -i "" -e 's/TDMwPTul/BNDLPTul/g' "$VST3/Contents/PkgInfo" sed -i "" -e 's/TDMw/BNDL/g' "$VST3/Contents/$INFOPLIST_FILE" fi if [ $copyRTAS -gt 0 ]; then echo "Copying to RTAS folder..." RTAS=/Library/Application\ Support/Digidesign/Plug-Ins/$PRODUCT_NAME.dpm if [ -d "$RTAS" ]; then rm -r "$RTAS" fi cp -r "$original" "$RTAS" fi if [ $copyAAX -gt 0 ]; then echo "Copying to AAX folder..." if [ -d "/Applications/ProTools_3PDev/Plug-Ins" ]; then AAX1="/Applications/ProTools_3PDev/Plug-Ins/$PRODUCT_NAME.aaxplugin" if [ -d "$AAX1" ]; then rm -r "$AAX1" fi cp -R -H "$original" "$AAX1" fi if [ -d "/Library/Application Support/Avid/Audio/Plug-Ins" ]; then AAX2="/Library/Application Support/Avid/Audio/Plug-Ins/$PRODUCT_NAME.aaxplugin" if [ -d "$AAX2" ]; then rm -r "$AAX2" fi cp -R -H "$original" "$AAX2" fi fi ">
|
||||
<CONFIGURATIONS>
|
||||
<CONFIGURATION name="Debug" osxSDK="default" osxCompatibility="default" osxArchitecture="default"
|
||||
isDebug="1" optimisation="1" targetName="JuceOPL"/>
|
||||
<CONFIGURATION name="Release" osxSDK="default" osxCompatibility="default" osxArchitecture="64BitIntel"
|
||||
isDebug="0" optimisation="2" targetName="JuceOPL" cppLibType="libc++"/>
|
||||
</CONFIGURATIONS>
|
||||
<MODULEPATHS>
|
||||
<MODULEPATH id="juce_video" path="../../juce"/>
|
||||
<MODULEPATH id="juce_opengl" path="../../juce"/>
|
||||
<MODULEPATH id="juce_gui_extra" path="../../juce"/>
|
||||
<MODULEPATH id="juce_gui_basics" path="../../juce"/>
|
||||
<MODULEPATH id="juce_graphics" path="../../juce"/>
|
||||
<MODULEPATH id="juce_events" path="../../juce"/>
|
||||
<MODULEPATH id="juce_data_structures" path="../../juce"/>
|
||||
<MODULEPATH id="juce_cryptography" path="../../juce"/>
|
||||
<MODULEPATH id="juce_core" path="../../juce"/>
|
||||
<MODULEPATH id="juce_audio_processors" path="../../juce"/>
|
||||
<MODULEPATH id="juce_audio_plugin_client" path="../../juce"/>
|
||||
<MODULEPATH id="juce_audio_formats" path="../../juce"/>
|
||||
<MODULEPATH id="juce_audio_devices" path="../../juce"/>
|
||||
<MODULEPATH id="juce_audio_basics" path="../../juce"/>
|
||||
</MODULEPATHS>
|
||||
</XCODE_MAC>
|
||||
</EXPORTFORMATS>
|
||||
</JUCERPROJECT>
|
||||
|
|
|
@ -1,7 +1,17 @@
|
|||
#include "DROMultiplexer.h"
|
||||
|
||||
#include "JuceHeader.h"
|
||||
|
||||
/// Jeff-Russ added guard against windows.h include if not windows:
|
||||
#ifdef _WIN32 // covers both 32 and 64-bit
|
||||
#include <Windows.h>
|
||||
#else
|
||||
#include "windows.h"
|
||||
#endif
|
||||
|
||||
/// Jeff-Russ added to replace mising itoa for xcode:
|
||||
#if __APPLE__
|
||||
#include "itoa.h"
|
||||
#endif
|
||||
|
||||
// Used by the first recording instance to claim master status
|
||||
DROMultiplexer* DROMultiplexer::master = NULL;
|
||||
|
@ -186,7 +196,7 @@ void DROMultiplexer::TwoOpMelodicNoteOn(Hiopl* opl, int inCh) {
|
|||
char addr[16];
|
||||
int outCh = _FindFreeChannel(opl, inCh);
|
||||
_DebugOut(" <- ");
|
||||
_DebugOut(itoa((int)opl, addr, 16));
|
||||
/// _DebugOut(itoa((int)opl, addr, 16));
|
||||
_DebugOut(" ");
|
||||
for (int i = 0; i < MELODIC_CHANNELS; i++) {
|
||||
Hiopl* tmpOpl = channels[i].opl;
|
||||
|
|
|
@ -45,7 +45,7 @@ public:
|
|||
//==============================================================================
|
||||
const String getName() const;
|
||||
|
||||
static const int JuceOplvstiAudioProcessor::MAX_INSTRUMENT_FILE_SIZE_BYTES = 1024;
|
||||
static const int MAX_INSTRUMENT_FILE_SIZE_BYTES = 1024;
|
||||
|
||||
int getNumParameters();
|
||||
|
||||
|
|
|
@ -63,20 +63,36 @@
|
|||
#pragma warning(disable : 4996)
|
||||
#endif
|
||||
|
||||
#ifndef WIN32
|
||||
typedef long long __int64;
|
||||
#endif
|
||||
|
||||
/// Jeff-Russ modified to be uniform across C++ implementations:
|
||||
// The internal types:
|
||||
#include <stdint.h>
|
||||
typedef unsigned char BYTE;
|
||||
typedef int64_t __int64;
|
||||
typedef double Real64;
|
||||
/* The internal types */
|
||||
typedef unsigned char Bit8u;
|
||||
typedef signed char Bit8s;
|
||||
typedef unsigned short Bit16u;
|
||||
typedef signed short Bit16s;
|
||||
typedef unsigned long Bit32u;
|
||||
typedef signed long Bit32s;
|
||||
typedef unsigned __int64 Bit64u;
|
||||
typedef signed __int64 Bit64s;
|
||||
typedef unsigned int Bitu;
|
||||
typedef signed int Bits;
|
||||
typedef uint16_t Bit16u;
|
||||
typedef int16_t Bit16s;
|
||||
typedef uint32_t Bit32u;
|
||||
typedef int32_t Bit32s;
|
||||
typedef int64_t Bit64u;
|
||||
typedef uint64_t Bit64s;
|
||||
typedef Bit32u Bitu;
|
||||
typedef Bit32s Bits;
|
||||
|
||||
|
||||
/// Jeff-Russ PUT PLATFORM SPECIFIC STUFF HERE:
|
||||
#ifdef _WIN32 // covers both 32 and 64-bit
|
||||
#define INLINE __forceinline
|
||||
#elif __APPLE__
|
||||
#include "TargetConditionals.h"
|
||||
#define INLINE inline /// apple has no forceinline
|
||||
#elif __linux
|
||||
#define INLINE inline
|
||||
#elif __unix
|
||||
#define INLINE inline
|
||||
#elif __posix
|
||||
#define INLINE inline
|
||||
#else
|
||||
#error Unsupported Operating System
|
||||
#endif
|
||||
|
|
50
Source/itoa.h
Normal file
50
Source/itoa.h
Normal file
|
@ -0,0 +1,50 @@
|
|||
|
||||
///=============================================================================
|
||||
/// itoa.h - A C++ header to implement itoa()
|
||||
/// Created: 11 Feb 2015 5:08:51pm
|
||||
/// Author: Jeff-Russ
|
||||
///=============================================================================
|
||||
#pragma once
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
// A utility function to reverse a string:
|
||||
void reverse(char str[], int length)
|
||||
{
|
||||
int start = 0;
|
||||
int end = length -1;
|
||||
while (start < end)
|
||||
{ swap(*(str+start), *(str+end));
|
||||
start++;
|
||||
end--;
|
||||
}
|
||||
};
|
||||
|
||||
char* itoa(int num, char* str, int base)
|
||||
{
|
||||
int i = 0;
|
||||
bool isNegative = false;
|
||||
|
||||
if (num == 0) // Handle 0 explicitly, otherwise
|
||||
{ str[i++] = '0'; // empty string is printed for 0
|
||||
str[i] = '\0';
|
||||
return str;
|
||||
}
|
||||
// In standard itoa(), negative
|
||||
if (num < 0 && base == 10) // numbers are handled only with
|
||||
{ isNegative = true; // base 10. Otherwise numbers
|
||||
num = -num; // are considered unsigned.
|
||||
}
|
||||
while (num != 0)
|
||||
{ int rem = num % base; // Process individual digits
|
||||
str[i++] = (rem > 9)? (rem-10) + 'a' : rem + '0';
|
||||
num = num/base;
|
||||
}
|
||||
if (isNegative) // If number is negative, append '-'
|
||||
str[i++] = '-';
|
||||
|
||||
str[i] = '\0'; // Append string terminator
|
||||
reverse(str, i); // Reverse the string
|
||||
return str;
|
||||
};
|
85
Source/windows.h
Normal file
85
Source/windows.h
Normal file
|
@ -0,0 +1,85 @@
|
|||
|
||||
///=============================================================================
|
||||
/// windows.h - as needed re-definition of windows.h functions for non-win
|
||||
/// Created: 11 Feb 2015 5:08:51pm
|
||||
/// Author: Jeff-Russ
|
||||
///=============================================================================
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
|
||||
// PVOID - A pointer to any type.
|
||||
// This type is declared in WinNT.h as follows:
|
||||
typedef void* PVOID;
|
||||
|
||||
// DWORDLONG A 64-bit unsigned integer.
|
||||
// This type is declared in IntSafe.h as follows:
|
||||
typedef uint64_t DWORDLONG;
|
||||
|
||||
|
||||
#define WINAPI
|
||||
|
||||
// DWORD - A 32-bit unsigned integer.
|
||||
// This type is declared in IntSafe.h as follows:
|
||||
typedef uint32_t DWORD;
|
||||
|
||||
// WCHAR - A 16-bit unicode character
|
||||
// This type is declared in WinNT.h as follows:
|
||||
typedef int16_t WCHAR;
|
||||
|
||||
// HANDLE - A handle to an object.
|
||||
// This type is declared in WinDef.h as follows:
|
||||
typedef PVOID HANDLE;
|
||||
|
||||
DWORD STD_INPUT_HANDLE = -10;
|
||||
DWORD STD_OUTPUT_HANDLE = -11;
|
||||
DWORD STD_ERROR_HANDLE = -12;
|
||||
|
||||
|
||||
#define MAX_PATH PATH_MAX
|
||||
|
||||
// BYTE - A byte (8-bits)
|
||||
// This type is declared in WinDef.h as follows:
|
||||
typedef unsigned char BYTE;
|
||||
|
||||
// WORD - A 16-bit unsigned integer.
|
||||
// This type is declared in WinDef.h as follows:
|
||||
typedef uint16_t WORD;
|
||||
|
||||
// BOOL - A boolean variable
|
||||
// This type is declared in WinDef.h as follows:
|
||||
typedef BYTE BOOL;
|
||||
|
||||
DWORD GetStdHandle (DWORD handle) { return handle; }
|
||||
|
||||
void WriteConsole(DWORD conout,const char* strPtr,
|
||||
DWORD count, DWORD* countAdr, int* nul)
|
||||
{
|
||||
std::string msgType = "NOTICE: ";
|
||||
|
||||
if (conout == -10)
|
||||
msgType = "INPUT: ";
|
||||
else if (conout == -11)
|
||||
msgType = "OUTPUT: ";
|
||||
else if (conout == -12)
|
||||
msgType = "ERROR: ";
|
||||
else
|
||||
msgType = "NOTICE: ";
|
||||
|
||||
std::string message (const char* str, uint32_t count);
|
||||
|
||||
std::cout << std::endl << msgType << message;
|
||||
}
|
||||
|
||||
void AllocConsole()
|
||||
{
|
||||
std::cout << std::endl << "=== Starting debug console....." << std::endl;
|
||||
}
|
||||
void FreeConsole()
|
||||
{
|
||||
std::cout << std::endl << "=== Exited debug console ===" << std::endl;
|
||||
}
|
||||
|
||||
|
|
@ -46,9 +46,15 @@
|
|||
#include <math.h>
|
||||
#include <string.h>
|
||||
#include <limits>
|
||||
#include <cstdlib> /// Jeff-Russ added to get rand() and RAND_MAX
|
||||
|
||||
typedef unsigned __int8 BYTE;
|
||||
|
||||
/*typedef unsigned __int8 BYTE;*/ /// Jeff changed to char and put in config.h
|
||||
|
||||
#ifndef M_PI /// Jeff-Russ added condition to silence xcode warning
|
||||
#define M_PI 3.141592654
|
||||
#endif
|
||||
|
||||
#include "config.h"
|
||||
#include "zdopl.h"
|
||||
|
||||
|
|
Loading…
Reference in a new issue