@@ -1,150 +0,0 @@ | |||
/* | |||
* Carla common defines | |||
* Copyright (C) 2011-2013 Filipe Coelho <falktx@falktx.com> | |||
* | |||
* This program is free software; you can redistribute it and/or modify | |||
* it under the terms of the GNU General Public License as published by | |||
* the Free Software Foundation; either version 2 of the License, or | |||
* any later version. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU General Public License for more details. | |||
* | |||
* For a full copy of the GNU General Public License see the COPYING file | |||
*/ | |||
#ifndef __CARLA_DEFINES_HPP__ | |||
#define __CARLA_DEFINES_HPP__ | |||
// Check OS | |||
#if defined(WIN64) || defined(_WIN64) || defined(__WIN64__) | |||
# define CARLA_OS_WIN64 | |||
#elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__) | |||
# define CARLA_OS_WIN32 | |||
#elif defined(__APPLE__) | |||
# define CARLA_OS_MAC | |||
#elif defined(__HAIKU__) | |||
# define CARLA_OS_HAIKU | |||
#elif defined(__linux__) || defined(__linux) | |||
# define CARLA_OS_LINUX | |||
#else | |||
# warning Unsupported platform! | |||
#endif | |||
#if defined(CARLA_OS_WIN32) || defined(CARLA_OS_WIN64) | |||
# define CARLA_OS_WIN | |||
#elif ! defined(CARLA_OS_HAIKU) | |||
# define CARLA_OS_UNIX | |||
#endif | |||
// Check for C++11 support | |||
#if defined(HAVE_CPP11_SUPPORT) | |||
# define CARLA_PROPER_CPP11_SUPPORT | |||
#elif defined(__GNUC__) && defined(__GXX_EXPERIMENTAL_CXX0X__) | |||
# if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 | |||
# define CARLA_PROPER_CPP11_SUPPORT | |||
# if (__GNUC__ * 100 + __GNUC_MINOR__) < 407 | |||
# define override // gcc4.7+ only | |||
# endif | |||
# endif | |||
#endif | |||
#ifndef CARLA_PROPER_CPP11_SUPPORT | |||
# define override | |||
# define noexcept | |||
# define nullptr (0) | |||
#endif | |||
// Common includes | |||
#ifdef CARLA_OS_WIN | |||
# include <winsock2.h> | |||
# include <windows.h> | |||
#else | |||
# include <unistd.h> | |||
# ifndef __cdecl | |||
# define __cdecl | |||
# endif | |||
#endif | |||
// Define various string format types | |||
#if defined(CARLA_OS_WIN64) | |||
# define P_INT64 "%I64i" | |||
# define P_INTPTR "%I64i" | |||
# define P_UINTPTR "%I64x" | |||
# define P_SIZE "%I64u" | |||
#elif defined(CARLA_OS_WIN32) | |||
# define P_INT64 "%I64i" | |||
# define P_INTPTR "%i" | |||
# define P_UINTPTR "%x" | |||
# define P_SIZE "%u" | |||
#elif __WORDSIZE == 64 | |||
# define P_INT64 "%li" | |||
# define P_INTPTR "%li" | |||
# define P_UINTPTR "%lx" | |||
# define P_SIZE "%lu" | |||
#else | |||
# define P_INT64 "%lli" | |||
# define P_INTPTR "%i" | |||
# define P_UINTPTR "%x" | |||
# define P_SIZE "%u" | |||
#endif | |||
// Define BINARY_NATIVE | |||
#if defined(CARLA_OS_HAIKU) || defined(CARLA_OS_UNIX) | |||
# if defined (__LP64__) || defined (_LP64) | |||
# define BINARY_NATIVE BINARY_POSIX64 | |||
# else | |||
# define BINARY_NATIVE BINARY_POSIX32 | |||
# endif | |||
#elif defined(CARLA_OS_WIN) | |||
# ifdef CARLA_OS_WIN64 | |||
# define BINARY_NATIVE BINARY_WIN64 | |||
# else | |||
# define BINARY_NATIVE BINARY_WIN32 | |||
# endif | |||
#else | |||
# warning Unknown binary native | |||
# define BINARY_NATIVE BINARY_OTHER | |||
#endif | |||
// Define CARLA_SAFE_ASSERT* | |||
#define CARLA_SAFE_ASSERT(cond) ((!(cond)) ? carla_assert(#cond, __FILE__, __LINE__) : pass()) | |||
#define CARLA_SAFE_ASSERT_INT(cond, value) ((!(cond)) ? carla_assert_int(#cond, __FILE__, __LINE__, value) : pass()) | |||
#define CARLA_SAFE_ASSERT_INT2(cond, v1, v2) ((!(cond)) ? carla_assert_int2(#cond, __FILE__, __LINE__, v1, v2) : pass()) | |||
// Define CARLA_ASSERT* | |||
#if defined(CARLA_NO_ASSERTS) | |||
# define CARLA_ASSERT(cond) | |||
# define CARLA_ASSERT_INT(cond, value) | |||
# define CARLA_ASSERT_INT2(cond, v1, v2) | |||
#elif defined(NDEBUG) | |||
# define CARLA_ASSERT CARLA_SAFE_ASSERT | |||
# define CARLA_ASSERT_INT CARLA_SAFE_ASSERT_INT | |||
# define CARLA_ASSERT_INT2 CARLA_SAFE_ASSERT_INT2 | |||
#else | |||
# define CARLA_ASSERT(cond) assert(cond) | |||
# define CARLA_ASSERT_INT(cond, value) assert(cond) | |||
# define CARLA_ASSERT_INT2(cond, v1, v2) assert(cond) | |||
#endif | |||
// Define CARLA_EXPORT | |||
#ifdef BUILD_BRIDGE | |||
# define CARLA_EXPORT extern "C" | |||
#else | |||
# if defined(CARLA_OS_WIN) && ! defined(__WINE__) | |||
# define CARLA_EXPORT extern "C" __declspec (dllexport) | |||
# else | |||
# define CARLA_EXPORT extern "C" __attribute__ ((visibility("default"))) | |||
# endif | |||
#endif | |||
// Define OS_SEP | |||
#ifdef CARLA_OS_WIN | |||
# define OS_SEP '\\' | |||
#else | |||
# define OS_SEP '/' | |||
#endif | |||
#endif // __CARLA_DEFINES_HPP__ |
@@ -1,418 +0,0 @@ | |||
/* | |||
* Carla common utils | |||
* Copyright (C) 2011-2013 Filipe Coelho <falktx@falktx.com> | |||
* | |||
* This program is free software; you can redistribute it and/or modify | |||
* it under the terms of the GNU General Public License as published by | |||
* the Free Software Foundation; either version 2 of the License, or | |||
* any later version. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU General Public License for more details. | |||
* | |||
* For a full copy of the GNU General Public License see the COPYING file | |||
*/ | |||
#ifndef __CARLA_UTILS_HPP__ | |||
#define __CARLA_UTILS_HPP__ | |||
#include "CarlaDefines.hpp" | |||
#include <cassert> | |||
#include <cstdarg> | |||
#include <cstdio> | |||
#include <cstdlib> | |||
#include <cstring> | |||
#ifdef CARLA_PROPER_CPP11_SUPPORT | |||
# include <cstdint> | |||
#else | |||
# include <stdint.h> | |||
#endif | |||
#if defined(CARLA_OS_HAIKU) | |||
# include <kernel/OS.h> | |||
#elif defined(CARLA_OS_LINUX) | |||
# include <sys/prctl.h> | |||
# include <linux/prctl.h> | |||
#endif | |||
// ------------------------------------------------- | |||
// misc functions | |||
static inline | |||
const char* bool2str(const bool yesNo) | |||
{ | |||
return yesNo ? "true" : "false"; | |||
} | |||
static inline | |||
void pass() {} | |||
// ------------------------------------------------- | |||
// string print functions | |||
#ifndef DEBUG | |||
# define carla_debug(...) | |||
#else | |||
static inline | |||
void carla_debug(const char* const fmt, ...) | |||
{ | |||
va_list args; | |||
va_start(args, fmt); | |||
# ifndef CARLA_OS_WIN | |||
std::fprintf(stdout, "\x1b[30;1m"); | |||
# endif | |||
std::vfprintf(stdout, fmt, args); | |||
# ifndef CARLA_OS_WIN | |||
std::fprintf(stdout, "\x1b[0m\n"); | |||
# else | |||
std::fprintf(stdout, "\n"); | |||
# endif | |||
va_end(args); | |||
} | |||
#endif | |||
static inline | |||
void carla_stdout(const char* const fmt, ...) | |||
{ | |||
va_list args; | |||
va_start(args, fmt); | |||
std::vfprintf(stdout, fmt, args); | |||
std::fprintf(stdout, "\n"); | |||
va_end(args); | |||
} | |||
static inline | |||
void carla_stderr(const char* const fmt, ...) | |||
{ | |||
va_list args; | |||
va_start(args, fmt); | |||
std::vfprintf(stderr, fmt, args); | |||
std::fprintf(stderr, "\n"); | |||
va_end(args); | |||
} | |||
static inline | |||
void carla_stderr2(const char* const fmt, ...) | |||
{ | |||
va_list args; | |||
va_start(args, fmt); | |||
#ifndef CARLA_OS_WIN | |||
std::fprintf(stderr, "\x1b[31m"); | |||
#endif | |||
std::vfprintf(stderr, fmt, args); | |||
#ifndef CARLA_OS_WIN | |||
std::fprintf(stderr, "\x1b[0m\n"); | |||
#else | |||
std::fprintf(stderr, "\n"); | |||
#endif | |||
va_end(args); | |||
} | |||
// ------------------------------------------------- | |||
// carla_assert* | |||
static inline | |||
void carla_assert(const char* const assertion, const char* const file, const int line) | |||
{ | |||
carla_stderr2("Carla assertion failure: \"%s\" in file %s, line %i", assertion, file, line); | |||
} | |||
static inline | |||
void carla_assert_int(const char* const assertion, const char* const file, const int line, const int value) | |||
{ | |||
carla_stderr2("Carla assertion failure: \"%s\" in file %s, line %i, value %i", assertion, file, line, value); | |||
} | |||
static inline | |||
void carla_assert_int2(const char* const assertion, const char* const file, const int line, const int v1, const int v2) | |||
{ | |||
carla_stderr2("Carla assertion failure: \"%s\" in file %s, line %i, v1 %i, v2 %i", assertion, file, line, v1, v2); | |||
} | |||
// ------------------------------------------------- | |||
// carla_*sleep | |||
static inline | |||
void carla_sleep(const unsigned int secs) | |||
{ | |||
CARLA_ASSERT(secs > 0); | |||
#ifdef CARLA_OS_WIN | |||
Sleep(secs * 1000); | |||
#else | |||
sleep(secs); | |||
#endif | |||
} | |||
static inline | |||
void carla_msleep(const unsigned int msecs) | |||
{ | |||
CARLA_ASSERT(msecs > 0); | |||
#ifdef CARLA_OS_WIN | |||
Sleep(msecs); | |||
#else | |||
usleep(msecs * 1000); | |||
#endif | |||
} | |||
// ------------------------------------------------- | |||
// carla_setenv | |||
static inline | |||
void carla_setenv(const char* const key, const char* const value) | |||
{ | |||
CARLA_ASSERT(key != nullptr); | |||
CARLA_ASSERT(value != nullptr); | |||
#ifdef CARLA_OS_WIN | |||
SetEnvironmentVariableA(key, value); | |||
#else | |||
setenv(key, value, 1); | |||
#endif | |||
} | |||
// ------------------------------------------------- | |||
// carla_setprocname (not available on all platforms) | |||
static inline | |||
void carla_setprocname(const char* const name) | |||
{ | |||
CARLA_ASSERT(name != nullptr); | |||
#if defined(CARLA_OS_HAIKU) | |||
if ((thread_id this_thread = find_thread(nullptr)) != B_NAME_NOT_FOUND) | |||
rename_thread(this_thread, name); | |||
#elif defined(CARLA_OS_LINUX) | |||
prctl(PR_SET_NAME, name); | |||
#else | |||
carla_stderr("carla_setprocname(\"%s\") - unsupported on this platform", name); | |||
#endif | |||
} | |||
// ------------------------------------------------- | |||
// carla_strdup | |||
static inline | |||
const char* carla_strdup(const char* const strBuf) | |||
{ | |||
CARLA_ASSERT(strBuf != nullptr); | |||
const size_t bufferLen = (strBuf != nullptr) ? std::strlen(strBuf) : 0; | |||
char* const buffer = new char[bufferLen+1]; | |||
if (strBuf != nullptr && bufferLen > 0) | |||
std::strcpy(buffer, strBuf); | |||
buffer[bufferLen] = '\0'; | |||
return buffer; | |||
} | |||
static inline | |||
const char* carla_strdup_free(char* const strBuf) | |||
{ | |||
const char* const buffer = carla_strdup(strBuf); | |||
std::free(strBuf); | |||
return buffer; | |||
} | |||
// ------------------------------------------------- | |||
// math functions | |||
template<typename T> | |||
static inline | |||
const T& carla_min(const T& v1, const T& v2, const T& min) | |||
{ | |||
return ((v1 < min || v2 < min) ? min : (v1 < v2 ? v1 : v2)); | |||
} | |||
template<typename T> | |||
static inline | |||
const T& carla_max(const T& v1, const T& v2, const T& max) | |||
{ | |||
return ((v1 > max || v2 > max) ? max : (v1 > v2 ? v1 : v2)); | |||
} | |||
template<typename T> | |||
static inline | |||
const T& carla_fixValue(const T& min, const T& max, const T& value) | |||
{ | |||
if (value < min) | |||
return min; | |||
if (value > max) | |||
return max; | |||
return value; | |||
} | |||
template<typename T> | |||
static inline | |||
void carla_add(T* dataDst, T* dataSrc, const size_t size) | |||
{ | |||
CARLA_ASSERT(dataDst != nullptr); | |||
CARLA_ASSERT(dataSrc != nullptr); | |||
CARLA_ASSERT(size != 0); | |||
if (dataDst == nullptr || dataSrc == nullptr || size == 0) | |||
return; | |||
for (size_t i=0; i < size; ++i) | |||
*dataDst++ += *dataSrc++; | |||
} | |||
template<typename T> | |||
static inline | |||
void carla_add(T* dataDst, const T* dataSrc, const size_t size) | |||
{ | |||
CARLA_ASSERT(dataDst != nullptr); | |||
CARLA_ASSERT(dataSrc != nullptr); | |||
CARLA_ASSERT(size != 0); | |||
if (dataDst == nullptr || dataSrc == nullptr || size == 0) | |||
return; | |||
for (size_t i=0; i < size; ++i) | |||
*dataDst++ += *dataSrc++; | |||
} | |||
template<typename T> | |||
static inline | |||
void carla_copy(T* dataDst, T* dataSrc, const size_t size) | |||
{ | |||
CARLA_ASSERT(dataDst != nullptr); | |||
CARLA_ASSERT(dataSrc != nullptr); | |||
CARLA_ASSERT(size != 0); | |||
if (dataDst == nullptr || dataSrc == nullptr || size == 0) | |||
return; | |||
for (size_t i=0; i < size; ++i) | |||
*dataDst++ = *dataSrc++; | |||
} | |||
template<typename T> | |||
static inline | |||
void carla_copy(T* dataDst, const T* dataSrc, const size_t size) | |||
{ | |||
CARLA_ASSERT(dataDst != nullptr); | |||
CARLA_ASSERT(dataSrc != nullptr); | |||
CARLA_ASSERT(size != 0); | |||
if (dataDst == nullptr || dataSrc == nullptr || size == 0) | |||
return; | |||
for (size_t i=0; i < size; ++i) | |||
*dataDst++ = *dataSrc++; | |||
} | |||
template<typename T> | |||
static inline | |||
void carla_fill(T* data, const size_t size, const T v) | |||
{ | |||
CARLA_ASSERT(data != nullptr); | |||
CARLA_ASSERT(size != 0); | |||
if (data == nullptr || size == 0) | |||
return; | |||
for (size_t i=0; i < size; ++i) | |||
*data++ = v; | |||
} | |||
static inline | |||
void carla_addDouble(double* const dataDst, double* const dataSrc, const size_t size) | |||
{ | |||
carla_add<double>(dataDst, dataSrc, size); | |||
} | |||
static inline | |||
void carla_addFloat(float* const dataDst, float* const dataSrc, const size_t size) | |||
{ | |||
carla_add<float>(dataDst, dataSrc, size); | |||
} | |||
static inline | |||
void carla_copyDouble(double* const dataDst, double* const dataSrc, const size_t size) | |||
{ | |||
CARLA_ASSERT(dataDst != nullptr); | |||
CARLA_ASSERT(dataSrc != nullptr); | |||
CARLA_ASSERT(size > 0); | |||
std::memcpy(dataDst, dataSrc, size*sizeof(double)); | |||
} | |||
static inline | |||
void carla_copyFloat(float* const dataDst, float* const dataSrc, const size_t size) | |||
{ | |||
CARLA_ASSERT(dataDst != nullptr); | |||
CARLA_ASSERT(dataSrc != nullptr); | |||
CARLA_ASSERT(size > 0); | |||
std::memcpy(dataDst, dataSrc, size*sizeof(float)); | |||
} | |||
static inline | |||
void carla_zeroDouble(double* const data, const size_t size) | |||
{ | |||
carla_fill<double>(data, size, 0.0); | |||
} | |||
static inline | |||
void carla_zeroFloat(float* const data, const size_t size) | |||
{ | |||
carla_fill<float>(data, size, 0.0f); | |||
} | |||
#if defined(CARLA_OS_MAC) && ! defined(DISTRHO_OS_MAC) | |||
namespace std { | |||
inline float | |||
fmin(float __x, float __y) | |||
{ return __builtin_fminf(__x, __y); } | |||
inline float | |||
fmax(float __x, float __y) | |||
{ return __builtin_fmaxf(__x, __y); } | |||
inline float | |||
rint(float __x) | |||
{ return __builtin_rintf(__x); } | |||
} | |||
#endif | |||
// ------------------------------------------------- | |||
// memory functions | |||
static inline | |||
void carla_zeroMem(void* const memory, const size_t numBytes) | |||
{ | |||
CARLA_ASSERT(memory != nullptr); | |||
CARLA_ASSERT(numBytes != 0); | |||
if (memory == nullptr || numBytes == 0) | |||
return; | |||
std::memset(memory, 0, numBytes); | |||
} | |||
template <typename T> | |||
static inline | |||
void carla_zeroStruct(T& structure) | |||
{ | |||
std::memset(&structure, 0, sizeof(T)); | |||
} | |||
template <typename T> | |||
static inline | |||
void carla_zeroStruct(T* const structure, const size_t count) | |||
{ | |||
CARLA_ASSERT(structure != nullptr); | |||
CARLA_ASSERT(count >= 1); | |||
std::memset(structure, 0, sizeof(T)*count); | |||
} | |||
// ------------------------------------------------- | |||
#endif // __CARLA_UTILS_HPP__ |
@@ -2,28 +2,22 @@ | |||
* JackBridge | |||
* Copyright (C) 2013 Filipe Coelho <falktx@falktx.com> | |||
* | |||
* This program is free software; you can redistribute it and/or modify | |||
* it under the terms of the GNU General Public License as published by | |||
* the Free Software Foundation; either version 2 of the License, or | |||
* any later version. | |||
* Permission to use, copy, modify, and/or distribute this software for any purpose with | |||
* or without fee is hereby granted, provided that the above copyright notice and this | |||
* permission notice appear in all copies. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU General Public License for more details. | |||
* | |||
* For a full copy of the GNU General Public License see the COPYING file | |||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD | |||
* TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN | |||
* NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL | |||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER | |||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN | |||
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |||
*/ | |||
#ifndef __JACKBRIDGE_HPP__ | |||
#define __JACKBRIDGE_HPP__ | |||
#include "CarlaDefines.hpp" | |||
#ifndef JACKBRIDGE_HPP_INCLUDED | |||
#define JACKBRIDGE_HPP_INCLUDED | |||
#ifndef JACKBRIDGE_EXPORT | |||
# undef CARLA_EXPORT | |||
# define CARLA_EXPORT | |||
#endif | |||
#include "JackBridgeDefines.hpp" | |||
#ifdef JACKBRIDGE_DIRECT | |||
# include <jack/jack.h> | |||
@@ -34,7 +28,7 @@ | |||
#include <cstddef> | |||
#ifdef CARLA_PROPER_CPP11_SUPPORT | |||
#ifdef JACKBRIDGE_PROPER_CPP11_SUPPORT | |||
# include <cstdint> | |||
#else | |||
# include <stdint.h> | |||
@@ -94,18 +88,18 @@ enum JackOptions { | |||
}; | |||
enum JackStatus { | |||
JackFailure = 0x01, | |||
JackInvalidOption = 0x02, | |||
JackNameNotUnique = 0x04, | |||
JackServerStarted = 0x08, | |||
JackServerFailed = 0x10, | |||
JackServerError = 0x20, | |||
JackNoSuchClient = 0x40, | |||
JackLoadFailure = 0x80, | |||
JackInitFailure = 0x100, | |||
JackShmFailure = 0x200, | |||
JackVersionError = 0x400, | |||
JackBackendError = 0x800, | |||
JackFailure = 0x0001, | |||
JackInvalidOption = 0x0002, | |||
JackNameNotUnique = 0x0004, | |||
JackServerStarted = 0x0008, | |||
JackServerFailed = 0x0010, | |||
JackServerError = 0x0020, | |||
JackNoSuchClient = 0x0040, | |||
JackLoadFailure = 0x0080, | |||
JackInitFailure = 0x0100, | |||
JackShmFailure = 0x0200, | |||
JackVersionError = 0x0400, | |||
JackBackendError = 0x0800, | |||
JackClientZombie = 0x1000 | |||
}; | |||
@@ -115,10 +109,10 @@ enum JackLatencyCallbackMode { | |||
}; | |||
enum JackPortFlags { | |||
JackPortIsInput = 0x1, | |||
JackPortIsOutput = 0x2, | |||
JackPortIsPhysical = 0x4, | |||
JackPortCanMonitor = 0x8, | |||
JackPortIsInput = 0x01, | |||
JackPortIsOutput = 0x02, | |||
JackPortIsPhysical = 0x04, | |||
JackPortCanMonitor = 0x08, | |||
JackPortIsTerminal = 0x10, | |||
JackPortIsControlVoltage = 0x100 | |||
}; | |||
@@ -146,8 +140,8 @@ enum JackSessionEventType { | |||
}; | |||
enum JackSessionFlags { | |||
JackSessionSaveError = 0x01, | |||
JackSessionNeedTerminal = 0x02 | |||
JackSessionSaveError = 0x1, | |||
JackSessionNeedTerminal = 0x2 | |||
}; | |||
enum JackCustomChange { | |||
@@ -234,8 +228,8 @@ typedef struct _jack_session_command_t jack_session_command_t; | |||
typedef void (*JackLatencyCallback)(jack_latency_callback_mode_t mode, void* arg); | |||
typedef int (*JackProcessCallback)(jack_nframes_t nframes, void* arg); | |||
typedef void (*JackThreadInitCallback)(void *arg); | |||
typedef int (*JackGraphOrderCallback)(void *arg); | |||
typedef void (*JackThreadInitCallback)(void* arg); | |||
typedef int (*JackGraphOrderCallback)(void* arg); | |||
typedef int (*JackXRunCallback)(void* arg); | |||
typedef int (*JackBufferSizeCallback)(jack_nframes_t nframes, void* arg); | |||
typedef int (*JackSampleRateCallback)(jack_nframes_t nframes, void* arg); | |||
@@ -254,90 +248,110 @@ typedef void (*JackCustomDataAppearanceCallback)(const char* client_name, const | |||
#endif // ! JACKBRIDGE_DIRECT | |||
CARLA_EXPORT const char* jackbridge_get_version_string(); | |||
CARLA_EXPORT jack_client_t* jackbridge_client_open(const char* client_name, jack_options_t options, jack_status_t* status, ...); | |||
CARLA_EXPORT const char* jackbridge_client_rename(jack_client_t* client, const char* new_name); | |||
CARLA_EXPORT bool jackbridge_client_close(jack_client_t* client); | |||
CARLA_EXPORT int jackbridge_client_name_size(); | |||
CARLA_EXPORT char* jackbridge_get_client_name(jack_client_t* client); | |||
CARLA_EXPORT bool jackbridge_activate(jack_client_t* client); | |||
CARLA_EXPORT bool jackbridge_deactivate(jack_client_t* client); | |||
CARLA_EXPORT int jackbridge_get_client_pid(const char* name); | |||
CARLA_EXPORT int jackbridge_is_realtime(jack_client_t* client); | |||
CARLA_EXPORT bool jackbridge_set_thread_init_callback(jack_client_t* client, JackThreadInitCallback thread_init_callback, void* arg); | |||
CARLA_EXPORT void jackbridge_on_shutdown(jack_client_t* client, JackShutdownCallback shutdown_callback, void* arg); | |||
CARLA_EXPORT void jackbridge_on_info_shutdown(jack_client_t* client, JackInfoShutdownCallback shutdown_callback, void* arg); | |||
CARLA_EXPORT bool jackbridge_set_process_callback(jack_client_t* client, JackProcessCallback process_callback, void* arg); | |||
CARLA_EXPORT bool jackbridge_set_freewheel_callback(jack_client_t* client, JackFreewheelCallback freewheel_callback, void* arg); | |||
CARLA_EXPORT bool jackbridge_set_buffer_size_callback(jack_client_t* client, JackBufferSizeCallback bufsize_callback, void* arg); | |||
CARLA_EXPORT bool jackbridge_set_sample_rate_callback(jack_client_t* client, JackSampleRateCallback srate_callback, void* arg); | |||
CARLA_EXPORT bool jackbridge_set_client_registration_callback(jack_client_t* client, JackClientRegistrationCallback registration_callback, void* arg); | |||
#ifndef JACKBRIDGE_DIRECT | |||
CARLA_EXPORT bool jackbridge_set_client_rename_callback(jack_client_t* client, JackClientRenameCallback registration_callback, void* arg); | |||
#endif | |||
CARLA_EXPORT bool jackbridge_set_port_registration_callback(jack_client_t* client, JackPortRegistrationCallback registration_callback, void* arg); | |||
CARLA_EXPORT bool jackbridge_set_port_connect_callback(jack_client_t* client, JackPortConnectCallback connect_callback, void* arg); | |||
CARLA_EXPORT bool jackbridge_set_port_rename_callback(jack_client_t* client, JackPortRenameCallback rename_callback, void* arg); | |||
CARLA_EXPORT bool jackbridge_set_graph_order_callback(jack_client_t* client, JackGraphOrderCallback graph_callback, void* arg); | |||
CARLA_EXPORT bool jackbridge_set_xrun_callback(jack_client_t* client, JackXRunCallback xrun_callback, void* arg); | |||
CARLA_EXPORT bool jackbridge_set_latency_callback(jack_client_t* client, JackLatencyCallback latency_callback, void* arg); | |||
CARLA_EXPORT bool jackbridge_set_freewheel(jack_client_t* client, int onoff); | |||
CARLA_EXPORT bool jackbridge_set_buffer_size(jack_client_t* client, jack_nframes_t nframes); | |||
CARLA_EXPORT bool jackbridge_engine_takeover_timebase(jack_client_t* client); | |||
CARLA_EXPORT float jackbridge_cpu_load(jack_client_t* client); | |||
CARLA_EXPORT jack_nframes_t jackbridge_get_sample_rate(jack_client_t* client); | |||
CARLA_EXPORT jack_nframes_t jackbridge_get_buffer_size(jack_client_t* client); | |||
CARLA_EXPORT jack_port_t* jackbridge_port_register(jack_client_t* client, const char* port_name, const char* port_type, unsigned long flags, unsigned long buffer_size); | |||
CARLA_EXPORT bool jackbridge_port_unregister(jack_client_t* client, jack_port_t* port); | |||
CARLA_EXPORT void* jackbridge_port_get_buffer(jack_port_t* port, jack_nframes_t nframes); | |||
CARLA_EXPORT const char* jackbridge_port_name(const jack_port_t* port); | |||
CARLA_EXPORT const char* jackbridge_port_short_name(const jack_port_t* port); | |||
CARLA_EXPORT int jackbridge_port_flags(const jack_port_t* port); | |||
CARLA_EXPORT const char* jackbridge_port_type(const jack_port_t* port); | |||
CARLA_EXPORT bool jackbridge_port_is_mine(const jack_client_t* client, const jack_port_t* port); | |||
CARLA_EXPORT bool jackbridge_port_connected(const jack_port_t* port); | |||
CARLA_EXPORT bool jackbridge_port_connected_to(const jack_port_t* port, const char* port_name); | |||
CARLA_EXPORT const char** jackbridge_port_get_connections(const jack_port_t* port); | |||
CARLA_EXPORT const char** jackbridge_port_get_all_connections(const jack_client_t* client, const jack_port_t* port); | |||
CARLA_EXPORT bool jackbridge_port_set_name(jack_port_t* port, const char* port_name); | |||
CARLA_EXPORT bool jackbridge_connect(jack_client_t* client, const char* source_port, const char* destination_port); | |||
CARLA_EXPORT bool jackbridge_disconnect(jack_client_t* client, const char* source_port, const char* destination_port); | |||
CARLA_EXPORT int jackbridge_port_name_size(); | |||
CARLA_EXPORT void jackbridge_port_get_latency_range(jack_port_t* port, jack_latency_callback_mode_t mode, jack_latency_range_t* range); | |||
CARLA_EXPORT void jackbridge_port_set_latency_range(jack_port_t* port, jack_latency_callback_mode_t mode, jack_latency_range_t* range); | |||
CARLA_EXPORT bool jackbridge_recompute_total_latencies(jack_client_t* client); | |||
CARLA_EXPORT const char** jackbridge_get_ports(jack_client_t* client, const char* port_name_pattern, const char* type_name_pattern, unsigned long flags); | |||
CARLA_EXPORT jack_port_t* jackbridge_port_by_name(jack_client_t* client, const char* port_name); | |||
CARLA_EXPORT jack_port_t* jackbridge_port_by_id(jack_client_t* client, jack_port_id_t port_id); | |||
CARLA_EXPORT void jackbridge_free(void* ptr); | |||
CARLA_EXPORT uint32_t jackbridge_midi_get_event_count(void* port_buffer); | |||
CARLA_EXPORT bool jackbridge_midi_event_get(jack_midi_event_t* event, void* port_buffer, uint32_t event_index); | |||
CARLA_EXPORT void jackbridge_midi_clear_buffer(void* port_buffer); | |||
CARLA_EXPORT bool jackbridge_midi_event_write(void* port_buffer, jack_nframes_t time, const jack_midi_data_t* data, size_t data_size); | |||
CARLA_EXPORT jack_midi_data_t* jackbridge_midi_event_reserve(void* port_buffer, jack_nframes_t time, size_t data_size); | |||
CARLA_EXPORT int jackbridge_transport_locate(jack_client_t* client, jack_nframes_t frame); | |||
CARLA_EXPORT void jackbridge_transport_start(jack_client_t* client); | |||
CARLA_EXPORT void jackbridge_transport_stop(jack_client_t* client); | |||
CARLA_EXPORT jack_transport_state_t jackbridge_transport_query(const jack_client_t* client, jack_position_t* pos); | |||
CARLA_EXPORT bool jackbridge_custom_publish_data(jack_client_t* client, const char* key, const void* data, size_t size); | |||
CARLA_EXPORT bool jackbridge_custom_get_data(jack_client_t* client, const char* client_name, const char* key, void** data, size_t* size); | |||
CARLA_EXPORT bool jackbridge_custom_unpublish_data(jack_client_t* client, const char* key); | |||
CARLA_EXPORT bool jackbridge_custom_set_data_appearance_callback(jack_client_t* client, JackCustomDataAppearanceCallback callback, void* arg); | |||
CARLA_EXPORT const char** jackbridge_custom_get_keys(jack_client_t* client, const char* client_name); | |||
#endif // __JACKBRIDGE_HPP__ | |||
JACKBRIDGE_EXPORT void jackbridge_get_version(int* major_ptr, int* minor_ptr, int* micro_ptr, int* proto_ptr); | |||
JACKBRIDGE_EXPORT const char* jackbridge_get_version_string(); | |||
JACKBRIDGE_EXPORT jack_client_t* jackbridge_client_open(const char* client_name, jack_options_t options, jack_status_t* status, ...); | |||
JACKBRIDGE_EXPORT const char* jackbridge_client_rename(jack_client_t* client, const char* new_name); | |||
JACKBRIDGE_EXPORT bool jackbridge_client_close(jack_client_t* client); | |||
JACKBRIDGE_EXPORT int jackbridge_client_name_size(); | |||
JACKBRIDGE_EXPORT char* jackbridge_get_client_name(jack_client_t* client); | |||
JACKBRIDGE_EXPORT bool jackbridge_activate(jack_client_t* client); | |||
JACKBRIDGE_EXPORT bool jackbridge_deactivate(jack_client_t* client); | |||
JACKBRIDGE_EXPORT int jackbridge_get_client_pid(const char* name); | |||
JACKBRIDGE_EXPORT bool jackbridge_is_realtime(jack_client_t* client); | |||
JACKBRIDGE_EXPORT bool jackbridge_set_thread_init_callback(jack_client_t* client, JackThreadInitCallback thread_init_callback, void* arg); | |||
JACKBRIDGE_EXPORT void jackbridge_on_shutdown(jack_client_t* client, JackShutdownCallback shutdown_callback, void* arg); | |||
JACKBRIDGE_EXPORT void jackbridge_on_info_shutdown(jack_client_t* client, JackInfoShutdownCallback shutdown_callback, void* arg); | |||
JACKBRIDGE_EXPORT bool jackbridge_set_process_callback(jack_client_t* client, JackProcessCallback process_callback, void* arg); | |||
JACKBRIDGE_EXPORT bool jackbridge_set_freewheel_callback(jack_client_t* client, JackFreewheelCallback freewheel_callback, void* arg); | |||
JACKBRIDGE_EXPORT bool jackbridge_set_buffer_size_callback(jack_client_t* client, JackBufferSizeCallback bufsize_callback, void* arg); | |||
JACKBRIDGE_EXPORT bool jackbridge_set_sample_rate_callback(jack_client_t* client, JackSampleRateCallback srate_callback, void* arg); | |||
JACKBRIDGE_EXPORT bool jackbridge_set_client_registration_callback(jack_client_t* client, JackClientRegistrationCallback registration_callback, void* arg); | |||
JACKBRIDGE_EXPORT bool jackbridge_set_client_rename_callback(jack_client_t* client, JackClientRenameCallback rename_callback, void* arg); | |||
JACKBRIDGE_EXPORT bool jackbridge_set_port_registration_callback(jack_client_t* client, JackPortRegistrationCallback registration_callback, void* arg); | |||
JACKBRIDGE_EXPORT bool jackbridge_set_port_connect_callback(jack_client_t* client, JackPortConnectCallback connect_callback, void* arg); | |||
JACKBRIDGE_EXPORT bool jackbridge_set_port_rename_callback(jack_client_t* client, JackPortRenameCallback rename_callback, void* arg); | |||
JACKBRIDGE_EXPORT bool jackbridge_set_graph_order_callback(jack_client_t* client, JackGraphOrderCallback graph_callback, void* arg); | |||
JACKBRIDGE_EXPORT bool jackbridge_set_xrun_callback(jack_client_t* client, JackXRunCallback xrun_callback, void* arg); | |||
JACKBRIDGE_EXPORT bool jackbridge_set_latency_callback(jack_client_t* client, JackLatencyCallback latency_callback, void* arg); | |||
JACKBRIDGE_EXPORT bool jackbridge_set_freewheel(jack_client_t* client, bool onoff); | |||
JACKBRIDGE_EXPORT bool jackbridge_set_buffer_size(jack_client_t* client, jack_nframes_t nframes); | |||
JACKBRIDGE_EXPORT jack_nframes_t jackbridge_get_sample_rate(jack_client_t* client); | |||
JACKBRIDGE_EXPORT jack_nframes_t jackbridge_get_buffer_size(jack_client_t* client); | |||
JACKBRIDGE_EXPORT float jackbridge_cpu_load(jack_client_t* client); | |||
JACKBRIDGE_EXPORT jack_port_t* jackbridge_port_register(jack_client_t* client, const char* port_name, const char* port_type, unsigned long flags, unsigned long buffer_size); | |||
JACKBRIDGE_EXPORT bool jackbridge_port_unregister(jack_client_t* client, jack_port_t* port); | |||
JACKBRIDGE_EXPORT void* jackbridge_port_get_buffer(jack_port_t* port, jack_nframes_t nframes); | |||
JACKBRIDGE_EXPORT const char* jackbridge_port_name(const jack_port_t* port); | |||
JACKBRIDGE_EXPORT const char* jackbridge_port_short_name(const jack_port_t* port); | |||
JACKBRIDGE_EXPORT int jackbridge_port_flags(const jack_port_t* port); | |||
JACKBRIDGE_EXPORT const char* jackbridge_port_type(const jack_port_t* port); | |||
JACKBRIDGE_EXPORT bool jackbridge_port_is_mine(const jack_client_t* client, const jack_port_t* port); | |||
JACKBRIDGE_EXPORT bool jackbridge_port_connected(const jack_port_t* port); | |||
JACKBRIDGE_EXPORT bool jackbridge_port_connected_to(const jack_port_t* port, const char* port_name); | |||
JACKBRIDGE_EXPORT const char** jackbridge_port_get_connections(const jack_port_t* port); | |||
JACKBRIDGE_EXPORT const char** jackbridge_port_get_all_connections(const jack_client_t* client, const jack_port_t* port); | |||
JACKBRIDGE_EXPORT bool jackbridge_port_set_name(jack_port_t* port, const char* port_name); | |||
JACKBRIDGE_EXPORT bool jackbridge_port_set_alias(jack_port_t* port, const char* alias); | |||
JACKBRIDGE_EXPORT bool jackbridge_port_unset_alias(jack_port_t* port, const char* alias); | |||
JACKBRIDGE_EXPORT int jackbridge_port_get_aliases(const jack_port_t* port, char* const aliases[2]); | |||
JACKBRIDGE_EXPORT bool jackbridge_port_request_monitor(jack_port_t* port, bool onoff); | |||
JACKBRIDGE_EXPORT bool jackbridge_port_request_monitor_by_name(jack_client_t* client, const char* port_name, bool onoff); | |||
JACKBRIDGE_EXPORT bool jackbridge_port_ensure_monitor(jack_port_t* port, bool onoff); | |||
JACKBRIDGE_EXPORT bool jackbridge_port_monitoring_input(jack_port_t* port); | |||
JACKBRIDGE_EXPORT bool jackbridge_connect(jack_client_t* client, const char* source_port, const char* destination_port); | |||
JACKBRIDGE_EXPORT bool jackbridge_disconnect(jack_client_t* client, const char* source_port, const char* destination_port); | |||
JACKBRIDGE_EXPORT bool jackbridge_port_disconnect(jack_client_t* client, jack_port_t* port); | |||
JACKBRIDGE_EXPORT int jackbridge_port_name_size(); | |||
JACKBRIDGE_EXPORT int jackbridge_port_type_size(); | |||
JACKBRIDGE_EXPORT size_t jackbridge_port_type_get_buffer_size(jack_client_t* client, const char* port_type); | |||
JACKBRIDGE_EXPORT void jackbridge_port_get_latency_range(jack_port_t* port, jack_latency_callback_mode_t mode, jack_latency_range_t* range); | |||
JACKBRIDGE_EXPORT void jackbridge_port_set_latency_range(jack_port_t* port, jack_latency_callback_mode_t mode, jack_latency_range_t* range); | |||
JACKBRIDGE_EXPORT bool jackbridge_recompute_total_latencies(jack_client_t* client); | |||
JACKBRIDGE_EXPORT const char** jackbridge_get_ports(jack_client_t* client, const char* port_name_pattern, const char* type_name_pattern, unsigned long flags); | |||
JACKBRIDGE_EXPORT jack_port_t* jackbridge_port_by_name(jack_client_t* client, const char* port_name); | |||
JACKBRIDGE_EXPORT jack_port_t* jackbridge_port_by_id(jack_client_t* client, jack_port_id_t port_id); | |||
JACKBRIDGE_EXPORT void jackbridge_free(void* ptr); | |||
JACKBRIDGE_EXPORT uint32_t jackbridge_midi_get_event_count(void* port_buffer); | |||
JACKBRIDGE_EXPORT bool jackbridge_midi_event_get(jack_midi_event_t* event, void* port_buffer, uint32_t event_index); | |||
JACKBRIDGE_EXPORT void jackbridge_midi_clear_buffer(void* port_buffer); | |||
JACKBRIDGE_EXPORT bool jackbridge_midi_event_write(void* port_buffer, jack_nframes_t time, const jack_midi_data_t* data, size_t data_size); | |||
JACKBRIDGE_EXPORT jack_midi_data_t* jackbridge_midi_event_reserve(void* port_buffer, jack_nframes_t time, size_t data_size); | |||
JACKBRIDGE_EXPORT bool jackbridge_release_timebase(jack_client_t* client); | |||
JACKBRIDGE_EXPORT bool jackbridge_set_sync_callback(jack_client_t* client, JackSyncCallback sync_callback, void* arg); | |||
JACKBRIDGE_EXPORT bool jackbridge_set_sync_timeout(jack_client_t* client, jack_time_t timeout); | |||
JACKBRIDGE_EXPORT bool jackbridge_set_timebase_callback(jack_client_t* client, bool conditional, JackTimebaseCallback timebase_callback, void* arg); | |||
JACKBRIDGE_EXPORT bool jackbridge_transport_locate(jack_client_t* client, jack_nframes_t frame); | |||
JACKBRIDGE_EXPORT jack_transport_state_t jackbridge_transport_query(const jack_client_t* client, jack_position_t* pos); | |||
JACKBRIDGE_EXPORT jack_nframes_t jackbridge_get_current_transport_frame(const jack_client_t* client); | |||
JACKBRIDGE_EXPORT bool jackbridge_transport_reposition(jack_client_t* client, const jack_position_t* pos); | |||
JACKBRIDGE_EXPORT void jackbridge_transport_start(jack_client_t* client); | |||
JACKBRIDGE_EXPORT void jackbridge_transport_stop(jack_client_t* client); | |||
JACKBRIDGE_EXPORT bool jackbridge_custom_publish_data(jack_client_t* client, const char* key, const void* data, size_t size); | |||
JACKBRIDGE_EXPORT bool jackbridge_custom_get_data(jack_client_t* client, const char* client_name, const char* key, void** data, size_t* size); | |||
JACKBRIDGE_EXPORT bool jackbridge_custom_unpublish_data(jack_client_t* client, const char* key); | |||
JACKBRIDGE_EXPORT bool jackbridge_custom_set_data_appearance_callback(jack_client_t* client, JackCustomDataAppearanceCallback callback, void* arg); | |||
JACKBRIDGE_EXPORT const char** jackbridge_custom_get_keys(jack_client_t* client, const char* client_name); | |||
#endif // JACKBRIDGE_HPP_INCLUDED |
@@ -0,0 +1,77 @@ | |||
/* | |||
* JackBridge common defines | |||
* Copyright (C) 2013 Filipe Coelho <falktx@falktx.com> | |||
* | |||
* Permission to use, copy, modify, and/or distribute this software for any purpose with | |||
* or without fee is hereby granted, provided that the above copyright notice and this | |||
* permission notice appear in all copies. | |||
* | |||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD | |||
* TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN | |||
* NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL | |||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER | |||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN | |||
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |||
*/ | |||
#ifndef JACKBRIDGE_DEFINES_HPP_INCLUDED | |||
#define JACKBRIDGE_DEFINES_HPP_INCLUDED | |||
// Check OS | |||
#if defined(WIN64) || defined(_WIN64) || defined(__WIN64__) | |||
# define JACKBRIDGE_OS_WIN64 | |||
#elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__) | |||
# define JACKBRIDGE_OS_WIN32 | |||
#elif defined(__APPLE__) | |||
# define JACKBRIDGE_OS_MAC | |||
#elif defined(__HAIKU__) | |||
# define JACKBRIDGE_OS_HAIKU | |||
#elif defined(__linux__) || defined(__linux) | |||
# define JACKBRIDGE_OS_LINUX | |||
#else | |||
# warning Unsupported platform! | |||
#endif | |||
#if defined(JACKBRIDGE_OS_WIN32) || defined(JACKBRIDGE_OS_WIN64) | |||
# define JACKBRIDGE_OS_WIN | |||
#elif ! defined(JACKBRIDGE_OS_HAIKU) | |||
# define JACKBRIDGE_OS_UNIX | |||
#endif | |||
// Check for C++11 support | |||
#if defined(HAVE_CPP11_SUPPORT) | |||
# define JACKBRIDGE_PROPER_CPP11_SUPPORT | |||
#elif defined(__GNUC__) && defined(__GXX_EXPERIMENTAL_CXX0X__) | |||
# if (__GNUC__ * 100 + __GNUC_MINOR__) >= 405 | |||
# define JACKBRIDGE_PROPER_CPP11_SUPPORT | |||
# if (__GNUC__ * 100 + __GNUC_MINOR__) < 407 | |||
# define override // gcc4.7+ only | |||
# endif | |||
# endif | |||
#endif | |||
#ifndef JACKBRIDGE_PROPER_CPP11_SUPPORT | |||
# define override | |||
# define noexcept | |||
# define nullptr (0) | |||
#endif | |||
// Common includes | |||
#ifdef JACKBRIDGE_OS_WIN | |||
# include <winsock2.h> | |||
# include <windows.h> | |||
#else | |||
# include <unistd.h> | |||
# ifndef __cdecl | |||
# define __cdecl | |||
# endif | |||
#endif | |||
// Define JACKBRIDGE_EXPORT | |||
#if defined(JACKBRIDGE_OS_WIN) && ! defined(__WINE__) | |||
# define JACKBRIDGE_EXPORT extern "C" __declspec (dllexport) | |||
#else | |||
# define JACKBRIDGE_EXPORT extern "C" __attribute__ ((visibility("default"))) | |||
#endif | |||
#endif // JACKBRIDGE_DEFINES_HPP_INCLUDED |
@@ -1,26 +1,27 @@ | |||
/* | |||
* Carla library utils | |||
* Copyright (C) 2011-2013 Filipe Coelho <falktx@falktx.com> | |||
* JackBridge library utils | |||
* Copyright (C) 2013 Filipe Coelho <falktx@falktx.com> | |||
* | |||
* This program is free software; you can redistribute it and/or modify | |||
* it under the terms of the GNU General Public License as published by | |||
* the Free Software Foundation; either version 2 of the License, or | |||
* any later version. | |||
* Permission to use, copy, modify, and/or distribute this software for any purpose with | |||
* or without fee is hereby granted, provided that the above copyright notice and this | |||
* permission notice appear in all copies. | |||
* | |||
* This program is distributed in the hope that it will be useful, | |||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
* GNU General Public License for more details. | |||
* | |||
* For a full copy of the GNU General Public License see the COPYING file | |||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD | |||
* TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN | |||
* NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL | |||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER | |||
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN | |||
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |||
*/ | |||
#ifndef __CARLA_LIB_UTILS_HPP__ | |||
#define __CARLA_LIB_UTILS_HPP__ | |||
#ifndef JACKBRIDGE_LIB_UTILS_HPP_INCLUDED | |||
#define JACKBRIDGE_LIB_UTILS_HPP_INCLUDED | |||
#include "JackBridgeDefines.hpp" | |||
#include "CarlaUtils.hpp" | |||
#include <cstdio> | |||
#ifndef CARLA_OS_WIN | |||
#ifndef JACKBRIDGE_OS_WIN | |||
# include <dlfcn.h> | |||
#endif | |||
@@ -30,9 +31,7 @@ | |||
static inline | |||
void* lib_open(const char* const filename) | |||
{ | |||
CARLA_ASSERT(filename != nullptr); | |||
#ifdef CARLA_OS_WIN | |||
#ifdef JACKBRIDGE_OS_WIN | |||
return (void*)LoadLibraryA(filename); | |||
#else | |||
return dlopen(filename, RTLD_NOW|RTLD_LOCAL); | |||
@@ -42,12 +41,10 @@ void* lib_open(const char* const filename) | |||
static inline | |||
bool lib_close(void* const lib) | |||
{ | |||
CARLA_ASSERT(lib != nullptr); | |||
if (lib == nullptr) | |||
return false; | |||
#ifdef CARLA_OS_WIN | |||
#ifdef JACKBRIDGE_OS_WIN | |||
return FreeLibrary((HMODULE)lib); | |||
#else | |||
return (dlclose(lib) == 0); | |||
@@ -57,13 +54,10 @@ bool lib_close(void* const lib) | |||
static inline | |||
void* lib_symbol(void* const lib, const char* const symbol) | |||
{ | |||
CARLA_ASSERT(lib != nullptr); | |||
CARLA_ASSERT(symbol != nullptr); | |||
if (lib == nullptr && symbol == nullptr) | |||
return nullptr; | |||
#ifdef CARLA_OS_WIN | |||
#ifdef JACKBRIDGE_OS_WIN | |||
return (void*)GetProcAddress((HMODULE)lib, symbol); | |||
#else | |||
return dlsym(lib, symbol); | |||
@@ -73,11 +67,8 @@ void* lib_symbol(void* const lib, const char* const symbol) | |||
static inline | |||
const char* lib_error(const char* const filename) | |||
{ | |||
CARLA_ASSERT(filename != nullptr); | |||
#ifdef CARLA_OS_WIN | |||
#ifdef JACKBRIDGE_OS_WIN | |||
static char libError[2048]; | |||
//carla_fill<char>(libError, 2048, '\0'); | |||
LPVOID winErrorString; | |||
DWORD winErrorCode = GetLastError(); | |||
@@ -97,4 +88,4 @@ const char* lib_error(const char* const filename) | |||
// ------------------------------------------------- | |||
#endif // __CARLA_LIB_UTILS_HPP__ | |||
#endif // JACKBRIDGE_LIB_UTILS_HPP_INCLUDED |