diff --git a/ChangeLog b/ChangeLog index 00905c1b..4621c0c7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -20,6 +20,10 @@ Fernando Lopez-Lezcano Jackdmp changes log --------------------------- +2008-05-26 Stephane Letz + + * Merge control branch. + 2008-05-24 Stephane Letz * Tim Blechmann RAII idiom patch for JackServer ressource initialization. @@ -143,6 +147,10 @@ Fernando Lopez-Lezcano * Synchronise transport.h with latest jackd version (Video handling). +2008-03-19 Stephane Letz + + * Add jack_port_type_id in jack API. + 2008-03-17 Stephane Letz * New jack_server_control client to test notifications when linked to the server library. diff --git a/SConstruct b/SConstruct index 9c1ba085..33caf15b 100644 --- a/SConstruct +++ b/SConstruct @@ -81,6 +81,7 @@ opts.AddOptions( BoolOption('BUILD_EXAMPLES', 'Build the example clients in their directory', True), BoolOption('INSTALL_EXAMPLES', 'Install the example clients in the BINDIR directory', True), BoolOption('BUILD_DOXYGEN_DOCS', 'Build doxygen documentation', False), + BoolOption('ENABLE_DBUS', 'Whether to use D-Bus API', False), ('cc', 'cc', False), ('cxx', 'cxx', False), ('ccflags', 'ccflags', False), @@ -195,6 +196,7 @@ if env['DEBUG']: print '--> Doing a DEBUG build' # TODO: -Werror could be added to, which would force the devs to really remove all the warnings :-) env.AppendUnique(CCFLAGS = ['-DDEBUG', '-Wall', '-g']) + env.AppendUnique(LINKFLAGS = ['-g']) else: env.AppendUnique(CCFLAGS = ['-O3','-DNDEBUG']) @@ -234,6 +236,8 @@ pkg_config_dir = env['INSTALL_LIBDIR']+"/pkgconfig/" env.Install(pkg_config_dir, 'jack.pc') env.Alias('install', pkg_config_dir) +env['BINDIR']=env.subst(env['BINDIR']) + # To have the top_srcdir as the doxygen-script is used from auto* env['top_srcdir'] = env.Dir('.').abspath @@ -259,6 +263,10 @@ subdirs=['common'] if env['PLATFORM'] == 'posix': subdirs.append('linux') +if env['ENABLE_DBUS']: + subdirs.append('linux/dbus') + env.AppendUnique(CCFLAGS = ['-DJACK_DBUS']) + # TODO FOR Marc: make macosx/SConscript work right if env['PLATFORM'] == 'macosx': subdirs.append('macosx') diff --git a/common/JackAPI.cpp b/common/JackAPI.cpp index f8e396f4..31b7ef4d 100644 --- a/common/JackAPI.cpp +++ b/common/JackAPI.cpp @@ -26,6 +26,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "JackGlobals.h" #include "JackTime.h" #include "JackExports.h" +#include "JackPortType.h" #ifdef __APPLE__ #include "JackMachThread.h" @@ -47,6 +48,18 @@ extern "C" { #endif + EXPORT + void + jack_get_version( + int *major_ptr, + int *minor_ptr, + int *micro_ptr, + int *proto_ptr); + + EXPORT + const char * + jack_get_version_string(); + EXPORT jack_client_t * jack_client_open_aux (const char *client_name, jack_options_t options, jack_status_t *status, va_list ap); @@ -114,6 +127,7 @@ extern "C" EXPORT const char * jack_port_short_name (const jack_port_t *port); EXPORT int jack_port_flags (const jack_port_t *port); EXPORT const char * jack_port_type (const jack_port_t *port); + EXPORT jack_port_type_id_t jack_port_type_id (const jack_port_t *port); EXPORT int jack_port_is_mine (const jack_client_t *, const jack_port_t *port); EXPORT int jack_port_connected (const jack_port_t *port); EXPORT int jack_port_connected_to (const jack_port_t *port, @@ -359,6 +373,21 @@ EXPORT const char* jack_port_type(const jack_port_t* port) } } +EXPORT jack_port_type_id_t jack_port_type_id (const jack_port_t *port) +{ +#ifdef __CLIENTDEBUG__ + JackLibGlobals::CheckContext(); +#endif + jack_port_id_t myport = (jack_port_id_t)port; + if (!CheckPort(myport)) { + jack_error("jack_port_type_id called an incorrect port %ld", myport); + return 0; + } else { + JackGraphManager* manager = GetGraphManager(); + return (manager ? GetPortTypeId(manager->GetPort(myport)->GetType()) : 0); + } +} + EXPORT int jack_port_connected(const jack_port_t* port) { #ifdef __CLIENTDEBUG__ @@ -1686,3 +1715,25 @@ EXPORT jack_status_t jack_internal_client_unload(jack_client_t* ext_client, jack return my_status; } } + +EXPORT +void +jack_get_version( + int *major_ptr, + int *minor_ptr, + int *micro_ptr, + int *proto_ptr) +{ + // FIXME: We need these comming from build system + *major_ptr = 0; + *minor_ptr = 0; + *micro_ptr = 0; + *proto_ptr = 0; +} + +EXPORT +const char * +jack_get_version_string() +{ + return VERSION; +} diff --git a/common/JackAtomicArrayState.h b/common/JackAtomicArrayState.h index d05e49e2..94e89fce 100644 --- a/common/JackAtomicArrayState.h +++ b/common/JackAtomicArrayState.h @@ -21,7 +21,6 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #define __JackAtomicArrayState__ #include "JackAtomic.h" -#include "JackError.h" #include // for memcpy namespace Jack @@ -136,7 +135,6 @@ class JackAtomicArrayState JackAtomicArrayState() { - jack_log("JackAtomicArrayState constructor"); Counter1(fCounter) = 0; } diff --git a/common/JackChannel.h b/common/JackChannel.h index 1e76406e..055d7132 100644 --- a/common/JackChannel.h +++ b/common/JackChannel.h @@ -21,7 +21,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define __JackChannel__ #include "types.h" -#include "JackError.h" namespace Jack { diff --git a/common/JackConnectionManager.cpp b/common/JackConnectionManager.cpp index c2246230..e8933371 100644 --- a/common/JackConnectionManager.cpp +++ b/common/JackConnectionManager.cpp @@ -354,7 +354,7 @@ void JackConnectionManager::DirectDisconnect(int ref1, int ref2) bool JackConnectionManager::IsDirectConnection(int ref1, int ref2) const { assert(ref1 >= 0 && ref2 >= 0); - return fConnectionRef.GetItemCount(ref1, ref2); + return (fConnectionRef.GetItemCount(ref1, ref2) > 0); } /*! diff --git a/common/JackConnectionManager.h b/common/JackConnectionManager.h index f0a538f6..a9a1e2e8 100644 --- a/common/JackConnectionManager.h +++ b/common/JackConnectionManager.h @@ -22,6 +22,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "JackConstants.h" #include "JackActivationCount.h" +#include "JackError.h" + #include namespace Jack diff --git a/common/JackConstants.h b/common/JackConstants.h index 930088b0..e528586f 100644 --- a/common/JackConstants.h +++ b/common/JackConstants.h @@ -48,6 +48,8 @@ namespace Jack #define LOOPBACK_DRIVER_REFNUM 2 // Loopback driver is initialized third, it will get the refnum 2 #define REAL_REFNUM LOOPBACK_DRIVER_REFNUM + 1 // Real clients start at LOOPBACK_DRIVER_REFNUM + 1 +#define JACK_DEFAULT_SERVER_NAME "default" + #ifdef WIN32 #define jack_server_dir "server" #define jack_client_dir "client" diff --git a/common/JackDriverLoader.cpp b/common/JackDriverLoader.cpp index c41cc262..9eebb39e 100644 --- a/common/JackDriverLoader.cpp +++ b/common/JackDriverLoader.cpp @@ -36,6 +36,10 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #include #endif +#include + +jack_driver_desc_t * jackctl_driver_get_desc(jackctl_driver_t * driver); + static void jack_print_driver_options (jack_driver_desc_t * desc, FILE *file) { @@ -222,6 +226,147 @@ jack_parse_driver_params (jack_driver_desc_t * desc, int argc, char* argv[], JSL return 0; } +EXPORT int +jackctl_parse_driver_params (jackctl_driver *driver_ptr, int argc, char* argv[]) +{ + struct option * long_options; + char * options, * options_ptr; + unsigned long i; + int opt; + JSList * node_ptr; + jackctl_parameter_t * param; + union jackctl_parameter_value value; + + if (argc <= 1) + return 0; + + const JSList * driver_params = jackctl_driver_get_parameters(driver_ptr); + if (driver_params == NULL) + return 1; + + jack_driver_desc_t * desc = jackctl_driver_get_desc(driver_ptr); + + /* check for help */ + if (strcmp (argv[1], "-h") == 0 || strcmp (argv[1], "--help") == 0) { + if (argc > 2) { + for (i = 0; i < desc->nparams; i++) { + if (strcmp (desc->params[i].name, argv[2]) == 0) { + jack_print_driver_param_usage (desc, i, stdout); + return 1; + } + } + + fprintf (stderr, "jackd: unknown option '%s' " + "for driver '%s'\n", argv[2], + desc->name); + } + + printf ("Parameters for driver '%s' (all parameters are optional):\n", desc->name); + jack_print_driver_options (desc, stdout); + return 1; + } + + /* set up the stuff for getopt */ + options = (char*)calloc (desc->nparams * 3 + 1, sizeof (char)); + long_options = (option*)calloc (desc->nparams + 1, sizeof (struct option)); + + options_ptr = options; + for (i = 0; i < desc->nparams; i++) { + sprintf (options_ptr, "%c::", desc->params[i].character); + options_ptr += 3; + long_options[i].name = desc->params[i].name; + long_options[i].flag = NULL; + long_options[i].val = desc->params[i].character; + long_options[i].has_arg = optional_argument; + } + + /* create the params */ + optind = 0; + opterr = 0; + while ((opt = getopt_long(argc, argv, options, long_options, NULL)) != -1) { + + if (opt == ':' || opt == '?') { + if (opt == ':') { + fprintf (stderr, "Missing option to argument '%c'\n", optopt); + } else { + fprintf (stderr, "Unknownage with option '%c'\n", optopt); + } + + fprintf (stderr, "Options for driver '%s':\n", desc->name); + jack_print_driver_options (desc, stderr); + exit (1); + } + + node_ptr = (JSList *)driver_params; + while (node_ptr) { + param = (jackctl_parameter_t*)node_ptr->data; + if (opt == jackctl_parameter_get_id(param)) { + break; + } + node_ptr = node_ptr->next; + } + + if (!optarg && optind < argc && + strlen(argv[optind]) && + argv[optind][0] != '-') { + optarg = argv[optind]; + } + + if (optarg) { + switch (jackctl_parameter_get_type(param)) { + case JackDriverParamInt: + value.i = atoi (optarg); + jackctl_parameter_set_value(param, &value); + break; + case JackDriverParamUInt: + value.ui = strtoul (optarg, NULL, 10); + jackctl_parameter_set_value(param, &value); + break; + case JackDriverParamChar: + value.c = optarg[0]; + jackctl_parameter_set_value(param, &value); + break; + case JackDriverParamString: + strncpy (value.str, optarg, JACK_DRIVER_PARAM_STRING_MAX); + jackctl_parameter_set_value(param, &value); + break; + case JackDriverParamBool: + + /* + if (strcasecmp ("false", optarg) == 0 || + strcasecmp ("off", optarg) == 0 || + strcasecmp ("no", optarg) == 0 || + strcasecmp ("0", optarg) == 0 || + strcasecmp ("(null)", optarg) == 0 ) { + */ + // steph + if (strcmp ("false", optarg) == 0 || + strcmp ("off", optarg) == 0 || + strcmp ("no", optarg) == 0 || + strcmp ("0", optarg) == 0 || + strcmp ("(null)", optarg) == 0 ) { + value.i = false; + } else { + value.i = true; + } + jackctl_parameter_set_value(param, &value); + break; + } + } else { + if (jackctl_parameter_get_type(param) == JackParamBool) { + value.i = true; + } else { + value = jackctl_parameter_get_default_value(param); + jackctl_parameter_set_value(param, &value); + } + } + } + + free (options); + free (long_options); + return 0; +} + EXPORT jack_driver_desc_t * jack_find_driver_descriptor (JSList * drivers, const char * name) { diff --git a/common/JackDriverLoader.h b/common/JackDriverLoader.h index 1421037c..6e5671a8 100644 --- a/common/JackDriverLoader.h +++ b/common/JackDriverLoader.h @@ -21,9 +21,10 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #ifndef __JackDriverLoader__ #define __JackDriverLoader__ -#include "jslist.h" #include "driver_interface.h" #include "JackDriver.h" +#include "control_types.h" +#include "jslist.h" #ifdef WIN32 @@ -54,14 +55,13 @@ typedef struct _jack_driver_info jack_driver_info_t; EXPORT jack_driver_desc_t * jack_find_driver_descriptor (JSList * drivers, const char * name); - jack_driver_desc_t * jack_drivers_get_descriptor (JSList * drivers, const char * sofile); EXPORT JSList * jack_drivers_load (JSList * drivers); - jack_driver_info_t * jack_load_driver (jack_driver_desc_t * driver_desc); EXPORT int jack_parse_driver_params (jack_driver_desc_t * desc, int argc, char* argv[], JSList ** param_ptr); +EXPORT int jackctl_parse_driver_params (jackctl_driver *driver_ptr, int argc, char* argv[]); #endif diff --git a/common/JackEngine.cpp b/common/JackEngine.cpp index 918aa692..f0edeb3e 100644 --- a/common/JackEngine.cpp +++ b/common/JackEngine.cpp @@ -34,6 +34,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #include "JackGlobals.h" #include "JackChannel.h" #include "JackSyncInterface.h" +#include "JackError.h" namespace Jack { @@ -76,6 +77,7 @@ int JackEngine::Close() jack_log("JackEngine::Close"); fChannel->Close(); + // Close (possibly) remaining clients (RT is stopped) for (int i = 0; i < CLIENT_NUM; i++) { /* Can only delete clients that where loaded using "jack_internal_client_load" (and not properly unloaded using "jack_internal_client_unload"...) @@ -112,6 +114,7 @@ void JackEngine::ReleaseRefnum(int ref) fClientTable[ref] = NULL; if (fEngineControl->fTemporary) { + jack_log("JackEngine::ReleaseRefnum fTemporary"); int i; for (i = REAL_REFNUM; i < CLIENT_NUM; i++) { if (fClientTable[i]) @@ -217,7 +220,7 @@ void JackEngine::NotifyClient(int refnum, int event, int sync, int value1, int v jack_log("JackEngine::NotifyClient: client not available anymore"); } else if (client->GetClientControl()->fCallback[event]) { if (client->ClientNotify(refnum, client->GetClientControl()->fName, event, sync, value1, value2) < 0) - jack_error("NotifyClient fails name = %s event = %ld val1 = %ld val2 = %ld", client->GetClientControl()->fName, event, value1, value2); + jack_error("NotifyClient fails name = %s event = %ld = val1 = %ld val2 = %ld", client->GetClientControl()->fName, event, value1, value2); } else { jack_log("JackEngine::NotifyClient: no callback for event = %ld", event); } @@ -680,7 +683,7 @@ int JackEngine::PortRegister(int refnum, const char* name, const char *type, uns assert(fClientTable[refnum]); // Check if port name already exists - if (fGraphManager->GetPort(name) != NO_PORT) { + if (GetGraphManager()->GetPort(name) != NO_PORT) { jack_error("port_name \"%s\" already exists", name); return -1; } diff --git a/common/JackEngineControl.h b/common/JackEngineControl.h index 6b453ecb..1e321c93 100644 --- a/common/JackEngineControl.h +++ b/common/JackEngineControl.h @@ -25,6 +25,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "JackFrameTimer.h" #include "JackTransportEngine.h" #include "types.h" +#include namespace Jack { diff --git a/common/JackError.c b/common/JackError.c index acd0fda4..e69de29b 100644 --- a/common/JackError.c +++ b/common/JackError.c @@ -1,92 +0,0 @@ -/* - Copyright (C) 2001 Paul Davis - Copyright (C) 2004-2008 Grame - - 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 - (at your option) 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. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -*/ - -#include -#include -#include "JackError.h" - -int jack_verbose = 0; - -static -void -jack_format_and_log(const char *prefix, const char *fmt, va_list ap, void (* log_callback)(const char *)) -{ - char buffer[300]; - size_t len; - - if (prefix != NULL) { - len = strlen(prefix); - memcpy(buffer, prefix, len); - } else { - len = 0; - } - - vsnprintf(buffer + len, sizeof(buffer) - len, fmt, ap); - log_callback(buffer); -} - -EXPORT void jack_error(const char *fmt, ...) -{ - va_list ap; - va_start(ap, fmt); - jack_format_and_log(NULL, fmt, ap, jack_error_callback); - va_end(ap); -} - -EXPORT void jack_info(const char *fmt, ...) -{ - va_list ap; - va_start(ap, fmt); - jack_format_and_log(NULL, fmt, ap, jack_info_callback); - va_end(ap); -} - -EXPORT void jack_info_multiline(const char *fmt, ...) -{ - va_list ap; - va_start(ap, fmt); - jack_format_and_log(NULL, fmt, ap, jack_info_callback); - va_end(ap); -} - -EXPORT void jack_log(const char *fmt,...) -{ - if (jack_verbose) { - va_list ap; - va_start(ap, fmt); - jack_format_and_log("Jack: ", fmt, ap, jack_info_callback); - va_end(ap); - } -} - -static void default_jack_error_callback(const char *desc) -{ - fprintf(stderr, "%s\n", desc); - fflush(stderr); -} - -static void default_jack_info_callback (const char *desc) -{ - fprintf(stdout, "%s\n", desc); - fflush(stdout); -} - -void (*jack_error_callback)(const char *desc) = &default_jack_error_callback; -void (*jack_info_callback)(const char *desc) = &default_jack_info_callback; diff --git a/common/JackError.h b/common/JackError.h index 6d5f244c..04642947 100644 --- a/common/JackError.h +++ b/common/JackError.h @@ -1,6 +1,7 @@ /* Copyright (C) 2001 Paul Davis Copyright (C) 2004-2008 Grame +Copyright (C) 2008 Nedko Arnaudov 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 @@ -19,20 +20,22 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +#ifndef __JackError__ +#define __JackError__ + #include #include #include #include "JackExports.h" +#include "types.h" #ifdef __cplusplus extern "C" { #endif -#ifdef WIN32 -#define vsnprintf _vsnprintf -#define snprintf _snprintf -#endif +#define LOG_LEVEL_INFO 1 +#define LOG_LEVEL_ERROR 2 EXPORT void jack_error(const char *fmt, ...); @@ -41,11 +44,20 @@ extern "C" // like jack_info() but only if verbose mode is enabled EXPORT void jack_log(const char *fmt, ...); - extern int jack_verbose; - extern void (*jack_error_callback)(const char *desc); extern void (*jack_info_callback)(const char *desc); + typedef void (* jack_log_function_t)(int level, const char *message); + + void change_thread_log_function(jack_log_function_t log_function); + void jack_log_function(int level, const char *message); + + EXPORT void set_threaded_log_function(); + + extern int jack_verbose; + #ifdef __cplusplus } #endif + +#endif diff --git a/common/JackException.h b/common/JackException.h index 603c5003..c044f439 100644 --- a/common/JackException.h +++ b/common/JackException.h @@ -58,6 +58,71 @@ namespace Jack JackDriverException(const char* msg) : JackException(msg) {} }; + +} + +#endif +/* +Copyright (C) 2008 Grame + +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 +(at your option) 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. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#ifndef __JackException__ +#define __JackException__ + +#include +#include +#include +#include "JackError.h" + +namespace Jack +{ + + class JackException : public std::runtime_error { + + public: + + JackException(const std::string& msg) : runtime_error(msg) + {} + JackException(const char* msg) : runtime_error(msg) + {} + + std::string Message() + { + return what(); + } + + void PrintMessage() + { + std::string str = what(); + jack_error(str.c_str()); + } + }; + + class JackDriverException : public JackException { + + public: + + JackDriverException(const std::string& msg) : JackException(msg) + {} + JackDriverException(const char* msg) : JackException(msg) + {} + }; + } #endif diff --git a/common/JackExternalClient.cpp b/common/JackExternalClient.cpp index 58026f72..490bb02c 100644 --- a/common/JackExternalClient.cpp +++ b/common/JackExternalClient.cpp @@ -22,6 +22,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #include "JackClientControl.h" #include "JackGlobals.h" #include "JackChannel.h" +#include "JackError.h" namespace Jack { diff --git a/common/JackGlobals.cpp b/common/JackGlobals.cpp index fa792fd6..0d1fbac2 100644 --- a/common/JackGlobals.cpp +++ b/common/JackGlobals.cpp @@ -18,22 +18,78 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "JackGlobals.h" +#include "JackError.h" namespace Jack { - JackFactoryImpl* JackGlobals::fInstance; +JackFactoryImpl* JackGlobals::fInstance; + +void JackGlobals::InitServer() +{ + jack_log("JackGlobals InitServer"); + if (!fInstance) { + +#ifdef __APPLE__ + fInstance = new JackFactoryOSXServer(); +#endif + +#ifdef WIN32 + fInstance = new JackFactoryWindowsServer(); +#endif + +#ifdef __linux__ + fInstance = new JackFactoryLinuxServer(); +#endif + + } +} + +void JackGlobals::InitClient() +{ + jack_log("JackGlobals InitClient"); + if (!fInstance) { + +#ifdef __APPLE__ + fInstance = new JackFactoryOSXClient(); +#endif + +#ifdef WIN32 + fInstance = new JackFactoryWindowsClient(); +#endif + +#ifdef __linux__ + fInstance = new JackFactoryLinuxClient(); +#endif + + } +} + +void JackGlobals::Destroy() +{ + jack_log("JackGlobals Destroy"); + if (fInstance) { + delete fInstance; + fInstance = NULL; + } +} } // end of namespace static bool gKeyRealtimeInitialized = false; +static bool g_key_log_function_initialized = false; + jack_tls_key gRealTime; +jack_tls_key g_key_log_function; void jack_init() { if (!gKeyRealtimeInitialized) { gKeyRealtimeInitialized = jack_tls_allocate_key(&gRealTime); } + + if (!g_key_log_function_initialized) + g_key_log_function_initialized = jack_tls_allocate_key(&g_key_log_function); } void jack_uninit() @@ -42,6 +98,11 @@ void jack_uninit() jack_tls_free_key(gRealTime); gKeyRealtimeInitialized = false; } + + if (g_key_log_function_initialized) { + jack_tls_free_key(g_key_log_function); + g_key_log_function_initialized = false; + } } // Initialisation at library load time diff --git a/common/JackGlobals.h b/common/JackGlobals.h index 6e83590e..aabd861d 100644 --- a/common/JackGlobals.h +++ b/common/JackGlobals.h @@ -229,55 +229,12 @@ class JackGlobals return fInstance->MakeThread(runnable); } - static void InitServer() - { - jack_log("JackGlobals InitServer"); - if (!fInstance) { - -#ifdef __APPLE__ - fInstance = new JackFactoryOSXServer(); -#endif - -#ifdef WIN32 - fInstance = new JackFactoryWindowsServer(); -#endif - -#ifdef __linux__ - fInstance = new JackFactoryLinuxServer(); -#endif - - } - } - - static void InitClient() - { - jack_log("JackGlobals InitClient"); - if (!fInstance) { - -#ifdef __APPLE__ - fInstance = new JackFactoryOSXClient(); -#endif - -#ifdef WIN32 - fInstance = new JackFactoryWindowsClient(); -#endif - -#ifdef __linux__ - fInstance = new JackFactoryLinuxClient(); -#endif - - } - } - - static void Destroy() - { - jack_log("JackGlobals Destroy"); - if (fInstance) { - delete fInstance; - fInstance = NULL; - } - } - + static void InitServer(); + + static void InitClient(); + + static void Destroy(); + }; namespace detail @@ -304,6 +261,7 @@ extern "C" #endif extern jack_tls_key gRealTime; +extern jack_tls_key g_key_log_function; #ifdef WIN32 diff --git a/common/JackGlobalsClient.cpp b/common/JackGlobalsClient.cpp index 9ca10f00..38110170 100644 --- a/common/JackGlobalsClient.cpp +++ b/common/JackGlobalsClient.cpp @@ -67,6 +67,13 @@ namespace Jack { #ifdef WIN32 +JackSynchro* JackFactoryWindowsServer::MakeSynchro() {return NULL;} +JackServerNotifyChannelInterface* JackFactoryWindowsServer::MakeServerNotifyChannel() {return NULL;} +JackClientChannelInterface* JackFactoryWindowsServer::MakeClientChannel() {return NULL;} +JackNotifyChannelInterface* JackFactoryWindowsServer::MakeNotifyChannel() {return NULL;} +JackServerChannelInterface* JackFactoryWindowsServer::MakeServerChannel() {return NULL;} +JackSyncInterface* JackFactoryWindowsServer::MakeInterProcessSync() {return NULL;} +JackThread* JackFactoryWindowsServer::MakeThread(JackRunnableInterface* runnable) {return NULL;} JackSynchro* JackFactoryWindowsClient::MakeSynchro() { @@ -144,6 +151,14 @@ JackThread* JackFactoryLinuxClient::MakeThread(JackRunnableInterface* runnable) #endif #if defined(SOCKET_RPC_FIFO_SEMA) +JackSynchro* JackFactoryLinuxServer::MakeSynchro() {return NULL;} +JackServerNotifyChannelInterface* JackFactoryLinuxServer::MakeServerNotifyChannel() {return NULL;} +JackClientChannelInterface* JackFactoryLinuxServer::MakeClientChannel() {return NULL;} +JackNotifyChannelInterface* JackFactoryLinuxServer::MakeNotifyChannel() {return NULL;} +JackServerChannelInterface* JackFactoryLinuxServer::MakeServerChannel() {return NULL;} +JackSyncInterface* JackFactoryLinuxServer::MakeInterProcessSync() {return NULL;} +JackThread* JackFactoryLinuxServer::MakeThread(JackRunnableInterface* runnable) {return NULL;} + JackSynchro* JackFactoryLinuxClient::MakeSynchro() { return new JackFifo(); @@ -223,6 +238,14 @@ JackThread* JackFactoryLinuxClient::MakeThread(JackRunnableInterface* runnable) #if defined(MACH_RPC_MACH_SEMA) // Mach RPC + Mach Semaphore +JackSynchro* JackFactoryOSXServer::MakeSynchro() {return NULL;} +JackServerNotifyChannelInterface* JackFactoryOSXServer::MakeServerNotifyChannel() {return NULL;} +JackClientChannelInterface* JackFactoryOSXServer::MakeClientChannel() {return NULL;} +JackNotifyChannelInterface* JackFactoryOSXServer::MakeNotifyChannel() {return NULL;} +JackServerChannelInterface* JackFactoryOSXServer::MakeServerChannel() {return NULL;} +JackSyncInterface* JackFactoryOSXServer::MakeInterProcessSync() {return NULL;} +JackThread* JackFactoryOSXServer::MakeThread(JackRunnableInterface* runnable) {return NULL;} + JackSynchro* JackFactoryOSXClient::MakeSynchro() { return new JackMachSemaphore(); @@ -338,6 +361,7 @@ JackThread* JackFactoryOSXClient::MakeThread(JackRunnableInterface* runnable) #if defined(MACH_RPC_FIFO_SEMA) // Mach RPC + Fifo Semaphore + JackSynchro* JackFactoryOSXClient::MakeSynchro() { return new JackFifo(); diff --git a/common/JackGlobalsServer.cpp b/common/JackGlobalsServer.cpp index b3ed5ebf..601302b1 100644 --- a/common/JackGlobalsServer.cpp +++ b/common/JackGlobalsServer.cpp @@ -78,6 +78,14 @@ namespace Jack { #ifdef WIN32 +JackSynchro* JackFactoryWindowsClient::MakeSynchro() {return NULL;} +JackServerNotifyChannelInterface* JackFactoryWindowsClient::MakeServerNotifyChannel() {return NULL;} +JackClientChannelInterface* JackFactoryWindowsClient::MakeClientChannel() {return NULL;} +JackNotifyChannelInterface* JackFactoryWindowsClient::MakeNotifyChannel() {return NULL;} +JackServerChannelInterface* JackFactoryWindowsClient::MakeServerChannel() {return NULL;} +JackSyncInterface* JackFactoryWindowsClient::MakeInterProcessSync() {return NULL;} +JackThread* JackFactoryWindowsClient::MakeThread(JackRunnableInterface* runnable) {return NULL;} + JackSynchro* JackFactoryWindowsServer::MakeSynchro() { return new JackWinSemaphore(); @@ -154,6 +162,14 @@ JackThread* JackFactoryLinuxServer::MakeThread(JackRunnableInterface* runnable) #endif #if defined(SOCKET_RPC_FIFO_SEMA) +JackSynchro* JackFactoryLinuxClient::MakeSynchro() {return NULL;} +JackServerNotifyChannelInterface* JackFactoryLinuxClient::MakeServerNotifyChannel() {return NULL;} +JackClientChannelInterface* JackFactoryLinuxClient::MakeClientChannel() {return NULL;} +JackNotifyChannelInterface* JackFactoryLinuxClient::MakeNotifyChannel() {return NULL;} +JackServerChannelInterface* JackFactoryLinuxClient::MakeServerChannel() {return NULL;} +JackSyncInterface* JackFactoryLinuxClient::MakeInterProcessSync() {return NULL;} +JackThread* JackFactoryLinuxClient::MakeThread(JackRunnableInterface* runnable) {return NULL;} + JackSynchro* JackFactoryLinuxServer::MakeSynchro() { return new JackFifo(); @@ -233,6 +249,14 @@ JackThread* JackFactoryLinuxServer::MakeThread(JackRunnableInterface* runnable) #if defined(MACH_RPC_MACH_SEMA) // Mach RPC + Mach Semaphore +JackSynchro* JackFactoryOSXClient::MakeSynchro() {return NULL;} +JackServerNotifyChannelInterface* JackFactoryOSXClient::MakeServerNotifyChannel() {return NULL;} +JackClientChannelInterface* JackFactoryOSXClient::MakeClientChannel() {return NULL;} +JackNotifyChannelInterface* JackFactoryOSXClient::MakeNotifyChannel() {return NULL;} +JackServerChannelInterface* JackFactoryOSXClient::MakeServerChannel() {return NULL;} +JackSyncInterface* JackFactoryOSXClient::MakeInterProcessSync() {return NULL;} +JackThread* JackFactoryOSXClient::MakeThread(JackRunnableInterface* runnable) {return NULL;} + JackSynchro* JackFactoryOSXServer::MakeSynchro() { return new JackMachSemaphore(); diff --git a/common/JackGraphManager.cpp b/common/JackGraphManager.cpp index b916b0e0..f0516357 100644 --- a/common/JackGraphManager.cpp +++ b/common/JackGraphManager.cpp @@ -20,6 +20,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "JackGraphManager.h" #include "JackConstants.h" +#include "JackError.h" #include #include #include diff --git a/common/JackLibClient.cpp b/common/JackLibClient.cpp index ab7047df..a0523d6a 100644 --- a/common/JackLibClient.cpp +++ b/common/JackLibClient.cpp @@ -27,22 +27,23 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. namespace Jack { + // Used for external C API (JackAPI.cpp) JackGraphManager* GetGraphManager() { - if (JackLibGlobals::fGlobals) { - return JackLibGlobals::fGlobals->fGraphManager; - } else { - return NULL; + if (JackLibGlobals::fGlobals) { + return JackLibGlobals::fGlobals->fGraphManager; + } else { + return NULL; } } JackEngineControl* GetEngineControl() { - if (JackLibGlobals::fGlobals) { - return JackLibGlobals::fGlobals->fEngineControl; - } else { - return NULL; + if (JackLibGlobals::fGlobals) { + return JackLibGlobals::fGlobals->fEngineControl; + } else { + return NULL; } } diff --git a/common/JackLibGlobals.h b/common/JackLibGlobals.h index 8daa3117..7ba59971 100644 --- a/common/JackLibGlobals.h +++ b/common/JackLibGlobals.h @@ -28,7 +28,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #endif #include "JackGlobals.h" #include "JackGraphManager.h" +#include "JackMessageBuffer.h" #include "JackTime.h" +#include "JackError.h" #include namespace Jack @@ -55,6 +57,7 @@ struct JackLibGlobals JackLibGlobals() { jack_log("JackLibGlobals"); + JackMessageBuffer::Create(); for (int i = 0; i < CLIENT_NUM; i++) fSynchroTable[i] = JackGlobals::MakeSynchro(); fGraphManager = -1; @@ -68,6 +71,7 @@ struct JackLibGlobals fSynchroTable[i]->Disconnect(); delete fSynchroTable[i]; } + JackMessageBuffer::Destroy(); } static void Init() diff --git a/common/JackLoopbackDriver.cpp b/common/JackLoopbackDriver.cpp index 048988e6..3a570479 100644 --- a/common/JackLoopbackDriver.cpp +++ b/common/JackLoopbackDriver.cpp @@ -25,6 +25,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #include "JackLoopbackDriver.h" #include "JackEngineControl.h" #include "JackGraphManager.h" +#include "JackError.h" #include #include diff --git a/common/JackPortType.cpp b/common/JackPortType.cpp index 91781baa..e2f2f22f 100644 --- a/common/JackPortType.cpp +++ b/common/JackPortType.cpp @@ -35,7 +35,7 @@ enum PORT_TYPES_MAX = sizeof(port_types) / sizeof(port_types[0]) }; -int GetPortTypeId(const char* port_type) +jack_port_type_id_t GetPortTypeId(const char* port_type) { for (int i = 0; i < PORT_TYPES_MAX; ++i) { const JackPortType* type = port_types[i]; @@ -46,7 +46,7 @@ int GetPortTypeId(const char* port_type) return -1; } -const JackPortType* GetPortType(int type_id) +const JackPortType* GetPortType(jack_port_type_id_t type_id) { assert(type_id >= 0 && type_id <= PORT_TYPES_MAX); const JackPortType* type = port_types[type_id]; diff --git a/common/JackPortType.h b/common/JackPortType.h index c03168da..15813ba3 100644 --- a/common/JackPortType.h +++ b/common/JackPortType.h @@ -34,11 +34,11 @@ struct JackPortType void (*mixdown)(void *mixbuffer, void** src_buffers, int src_count, jack_nframes_t nframes); }; -extern int GetPortTypeId(const char* port_type); -extern const JackPortType* GetPortType(int port_type_id); +extern jack_port_type_id_t GetPortTypeId(const char* port_type); +extern const struct JackPortType* GetPortType(jack_port_type_id_t port_type_id); -extern const JackPortType gAudioPortType; -extern const JackPortType gMidiPortType; +extern const struct JackPortType gAudioPortType; +extern const struct JackPortType gMidiPortType; } // namespace Jack diff --git a/common/JackProcessSync.h b/common/JackProcessSync.h index 0c9a1824..41391217 100644 --- a/common/JackProcessSync.h +++ b/common/JackProcessSync.h @@ -67,45 +67,10 @@ class JackProcessSync : public JackSyncInterface void Destroy() {} - bool TimedWait(long usec) - { - struct timeval T0, T1; - timespec time; - struct timeval now; - int res; - - pthread_mutex_lock(&fLock); - jack_log("JackProcessSync::Wait time out = %ld", usec); - gettimeofday(&T0, 0); - - static const UInt64 kNanosPerSec = 1000000000ULL; - static const UInt64 kNanosPerUsec = 1000ULL; - gettimeofday(&now, 0); - UInt64 nextDateNanos = now.tv_sec * kNanosPerSec + (now.tv_usec + usec) * kNanosPerUsec; - time.tv_sec = nextDateNanos / kNanosPerSec; - time.tv_nsec = nextDateNanos % kNanosPerSec; - res = pthread_cond_timedwait(&fCond, &fLock, &time); - if (res != 0) - jack_error("pthread_cond_timedwait error usec = %ld err = %s", usec, strerror(res)); - - gettimeofday(&T1, 0); - pthread_mutex_unlock(&fLock); - jack_log("JackProcessSync::Wait finished delta = %5.1lf", - (1e6 * T1.tv_sec - 1e6 * T0.tv_sec + T1.tv_usec - T0.tv_usec)); - return (res == 0); - } - - void Wait() - { - int res; - pthread_mutex_lock(&fLock); - jack_log("JackProcessSync::Wait..."); - if ((res = pthread_cond_wait(&fCond, &fLock)) != 0) - jack_error("pthread_cond_wait error err = %s", strerror(errno)); - pthread_mutex_unlock(&fLock); - jack_log("JackProcessSync::Wait finished"); - } - + bool TimedWait(long usec); + + void Wait(); + void SignalAll() { //pthread_mutex_lock(&fLock); @@ -150,17 +115,7 @@ class JackInterProcessSync : public JackSyncInterface return fSynchro->Connect(name, ""); } - bool TimedWait(long usec) - { - struct timeval T0, T1; - jack_log("JackInterProcessSync::Wait..."); - gettimeofday(&T0, 0); - bool res = fSynchro->TimedWait(usec); - gettimeofday(&T1, 0); - jack_log("JackInterProcessSync::Wait finished delta = %5.1lf", - (1e6 * T1.tv_sec - 1e6 * T0.tv_sec + T1.tv_usec - T0.tv_usec)); - return res; - } + bool TimedWait(long usec); void Wait() { diff --git a/common/JackRequest.h b/common/JackRequest.h index 246c740d..09d13f6c 100644 --- a/common/JackRequest.h +++ b/common/JackRequest.h @@ -23,8 +23,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "JackConstants.h" #include "JackChannelTransaction.h" -#include "JackError.h" #include +#include namespace Jack { diff --git a/common/JackServer.cpp b/common/JackServer.cpp index f9766a15..18dc2c70 100644 --- a/common/JackServer.cpp +++ b/common/JackServer.cpp @@ -36,6 +36,8 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #include "JackSyncInterface.h" #include "JackGraphManager.h" #include "JackInternalClient.h" +#include "JackError.h" +#include "JackMessageBuffer.h" namespace Jack { @@ -81,6 +83,9 @@ JackServer::~JackServer() int JackServer::Open(jack_driver_desc_t* driver_desc, JSList* driver_params) { + // TODO: move that in reworked JackServerGlobals::Init() + JackMessageBuffer::Create(); + if (fChannel->Open(fEngineControl->fServerName, this) < 0) { jack_error("Server channel open error"); return -1; @@ -141,6 +146,8 @@ int JackServer::Close() fFreewheelDriver->Close(); fLoopbackDriver->Close(); fEngine->Close(); + // TODO: move that in reworked JackServerGlobals::Destroy() + JackMessageBuffer::Destroy(); return 0; } @@ -151,10 +158,9 @@ int JackServer::InternalClientLoad(const char* client_name, const char* so_name, *status = 0; JackLoadableInternalClient* client = new JackLoadableInternalClient(fInstance, GetSynchroTable(), so_name, objet_data); assert(client); - if (client->Open("unused", client_name, (jack_options_t)options, (jack_status_t*)status) < 0) { + int res = client->Open("unused", client_name, (jack_options_t)options, (jack_status_t*)status); + if (res < 0) { delete client; - int my_status1 = *status | JackFailure; - *status = (jack_status_t)my_status1; *int_ref = 0; } else { *int_ref = client->GetClientControl()->fRefNum; @@ -164,6 +170,7 @@ int JackServer::InternalClientLoad(const char* client_name, const char* so_name, *status = (jack_status_t)my_status1; *int_ref = 0; } + return 0; } diff --git a/common/JackServerAPI.cpp b/common/JackServerAPI.cpp index 8180a1c1..8853f19d 100644 --- a/common/JackServerAPI.cpp +++ b/common/JackServerAPI.cpp @@ -27,17 +27,11 @@ This program is free software; you can redistribute it and/or modify #include "JackServer.h" #include "JackDebugClient.h" #include "JackServerGlobals.h" -#include "JackError.h" #include "JackServerLaunch.h" #include "JackTools.h" +#include "JackExports.h" #include "JackEngine.h" -#ifdef WIN32 -#define EXPORT __declspec(dllexport) -#else -#define EXPORT -#endif - #ifdef __cplusplus extern "C" { @@ -58,6 +52,9 @@ extern "C" using namespace Jack; +// beware!!! things can go nasty if one client is started with JackNoStartServer and another without it +bool g_nostart; + EXPORT jack_client_t* jack_client_open_aux(const char* ext_client_name, jack_options_t options, jack_status_t* status, va_list ap) { jack_varargs_t va; /* variable arguments */ @@ -90,10 +87,13 @@ EXPORT jack_client_t* jack_client_open_aux(const char* ext_client_name, jack_opt else jack_varargs_init(&va); - if (!JackServerGlobals::Init()) { // jack server initialisation - int my_status1 = (JackFailure | JackServerError); - *status = (jack_status_t)my_status1; - return NULL; + g_nostart = (options & JackNoStartServer) != 0; + if (!g_nostart) { + if (!JackServerGlobals::Init()) { // jack server initialisation + int my_status1 = (JackFailure | JackServerError); + *status = (jack_status_t)my_status1; + return NULL; + } } #ifndef WIN32 @@ -109,7 +109,9 @@ EXPORT jack_client_t* jack_client_open_aux(const char* ext_client_name, jack_opt int res = client->Open(va.server_name, client_name, options, status); if (res < 0) { delete client; - JackServerGlobals::Destroy(); // jack server destruction + if (!g_nostart) { + JackServerGlobals::Destroy(); // jack server destruction + } int my_status1 = (JackFailure | JackServerError); *status = (jack_status_t)my_status1; return NULL; @@ -138,7 +140,9 @@ EXPORT int jack_client_close(jack_client_t* ext_client) int res = client->Close(); delete client; jack_log("jack_client_close OK"); - JackServerGlobals::Destroy(); // jack server destruction + if (!g_nostart) { + JackServerGlobals::Destroy(); // jack server destruction + } return res; } } diff --git a/common/JackServerGlobals.cpp b/common/JackServerGlobals.cpp index 080d8738..8224310a 100644 --- a/common/JackServerGlobals.cpp +++ b/common/JackServerGlobals.cpp @@ -22,10 +22,11 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #endif #include "JackServerGlobals.h" -#include "JackError.h" #include "JackTools.h" #include "shm.h" #include +#include +#include static char* server_name = NULL; @@ -277,8 +278,7 @@ bool JackServerGlobals::Init() jack_error("no access to shm registry"); goto error; default: - if (jack_verbose) - jack_info("server `%s' registered", server_name); + jack_info("server `%s' registered", server_name); } /* clean up shared memory and files from any previous instance of this server name */ diff --git a/common/JackServerLaunch.cpp b/common/JackServerLaunch.cpp index 5141f8a0..13bdf89c 100644 --- a/common/JackServerLaunch.cpp +++ b/common/JackServerLaunch.cpp @@ -30,6 +30,55 @@ using namespace Jack; #ifndef WIN32 +#if defined(JACK_DBUS) + +#include + +int start_server_dbus(const char* server_name) +{ + DBusError err; + DBusConnection *conn; + DBusMessage *msg; + + // initialise the errors + dbus_error_init(&err); + + // connect to the bus + conn = dbus_bus_get(DBUS_BUS_SESSION, &err); + if (dbus_error_is_set(&err)) { + fprintf(stderr, "Connection Error (%s)\n", err.message); + dbus_error_free(&err); + } + if (NULL == conn) { + return 1; + } + + msg = dbus_message_new_method_call( + "org.jackaudio.service", // target for the method call + "/org/jackaudio/Controller", // object to call on + "org.jackaudio.JackControl", // interface to call on + "StartServer"); // method name + if (NULL == msg) { + fprintf(stderr, "Message Null\n"); + return 1; + } + + // send message and get a handle for a reply + if (!dbus_connection_send(conn, msg, NULL)) + { + fprintf(stderr, "Out Of Memory!\n"); + return 1; + } + + dbus_message_unref(msg); + dbus_connection_flush(conn); + dbus_error_free(&err); + + return 0; +} + +#else + /* Exec the JACK server in this process. Does not return. */ static void start_server_aux(const char* server_name) { @@ -114,12 +163,18 @@ static void start_server_aux(const char* server_name) fprintf(stderr, "exec of JACK server (command = \"%s\") failed: %s\n", command, strerror(errno)); } +#endif + int start_server(const char* server_name, jack_options_t options) { if ((options & JackNoStartServer) || getenv("JACK_NO_START_SERVER")) { return 1; } +#if defined(JACK_DBUS) + return start_server_dbus(server_name); +#else + /* The double fork() forces the server to become a child of * init, which will always clean up zombie process state on * termination. This even works in cases where the server @@ -146,6 +201,7 @@ int start_server(const char* server_name, jack_options_t options) /* only the original parent process goes here */ return 0; /* (probably) successful */ +#endif } int server_connect(char* server_name) diff --git a/common/JackShmMem.cpp b/common/JackShmMem.cpp index 56e838f5..084112d4 100644 --- a/common/JackShmMem.cpp +++ b/common/JackShmMem.cpp @@ -18,8 +18,8 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#include "JackShmMem.h" #include "JackError.h" +#include "JackShmMem.h" #include namespace Jack @@ -82,6 +82,11 @@ void JackShmMem::operator delete(void* p, size_t size) jack_destroy_shm(&info); } +void JackShmMem::operator delete(void* p) +{ + JackShmMem::operator delete(p, 0); +} + void LockMemoryImp(void* ptr, size_t size) { if (CHECK_MLOCK(ptr, size)) { diff --git a/common/JackShmMem.h b/common/JackShmMem.h index 76fe7f0c..6c327f7a 100644 --- a/common/JackShmMem.h +++ b/common/JackShmMem.h @@ -68,7 +68,7 @@ class JackMem { free(ptr); } - + JackMem(): fSize(gSize) {} @@ -107,6 +107,7 @@ class JackShmMem void* operator new(size_t size); void* operator new(size_t size, void* memory); void operator delete(void* p, size_t size); + void operator delete(void* p); JackShmMem() { diff --git a/common/JackSocketServerChannel.h b/common/JackSocketServerChannel.h index d5245d33..a73b347c 100644 --- a/common/JackSocketServerChannel.h +++ b/common/JackSocketServerChannel.h @@ -62,6 +62,7 @@ class JackSocketServerChannel : public JackServerChannelInterface, public JackRu void Close(); // Close the Server/Client connection // JackRunnableInterface interface + bool Init(); bool Execute(); }; diff --git a/common/JackSynchro.h b/common/JackSynchro.h index a3ecc3eb..64c6e2b7 100644 --- a/common/JackSynchro.h +++ b/common/JackSynchro.h @@ -20,8 +20,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifndef __JackSynchro__ #define __JackSynchro__ -#include "JackError.h" - #define SYNC_MAX_NAME_SIZE 256 namespace Jack diff --git a/common/JackThread.h b/common/JackThread.h index d924412f..cf30f07f 100644 --- a/common/JackThread.h +++ b/common/JackThread.h @@ -1,22 +1,22 @@ /* -Copyright (C) 2001 Paul Davis -Copyright (C) 2004-2008 Grame - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation; either version 2.1 of the License, or -(at your option) 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 Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ + Copyright (C) 2001 Paul Davis + Copyright (C) 2004-2008 Grame + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 2.1 of the License, or + (at your option) 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + */ #ifndef __JackThread__ #define __JackThread__ @@ -32,21 +32,21 @@ typedef unsigned long long UInt64; namespace Jack { - + /*! -\brief The base class for runnable objects, that have an Init and Execute method to be called in a thread. -*/ + \brief The base class for runnable objects, that have an Init and Execute method to be called in a thread. + */ class JackRunnableInterface { - + public: - + JackRunnableInterface() {} virtual ~JackRunnableInterface() {} - + virtual bool Init() /*! Called once when the thread is started */ { return true; @@ -55,37 +55,37 @@ class JackRunnableInterface }; /*! -\brief The thread base class. -*/ + \brief The thread base class. + */ class JackThread { public: - - enum kThreadState {kIdle, kStarting, kRunning}; - + + enum kThreadState {kIdle, kStarting, kRunning}; + protected: - + JackRunnableInterface* fRunnable; int fPriority; bool fRealTime; volatile kThreadState fStatus; int fCancellation; - + public: - + JackThread(JackRunnableInterface* runnable, int priority, bool real_time, int cancellation): - fRunnable(runnable), fPriority(priority), fRealTime(real_time), fStatus(kIdle), fCancellation(cancellation) + fRunnable(runnable), fPriority(priority), fRealTime(real_time), fStatus(kIdle), fCancellation(cancellation) {} virtual ~JackThread() {} - + virtual int Start() = 0; virtual int StartSync() = 0; virtual int Kill() = 0; virtual int Stop() = 0; virtual void Terminate() = 0; - + virtual int AcquireRealTime() = 0; virtual int AcquireRealTime(int priority) = 0; virtual int DropRealTime() = 0; @@ -98,14 +98,14 @@ class JackThread { fStatus = status; } - + virtual void SetParams(UInt64 period, UInt64 computation, UInt64 constraint) // Empty implementation, will only make sense on OSX... {} - + virtual pthread_t GetThreadID() = 0; - + }; - + } // end of namespace #if defined(WIN32) diff --git a/common/JackTools.cpp b/common/JackTools.cpp index 5311818e..7f9468ba 100644 --- a/common/JackTools.cpp +++ b/common/JackTools.cpp @@ -25,6 +25,8 @@ #include #endif +#include "JackConstants.h" + namespace Jack { @@ -54,7 +56,7 @@ const char* JackTools::DefaultServerName() { const char* server_name; if ((server_name = getenv("JACK_DEFAULT_SERVER")) == NULL) - server_name = "default"; + server_name = JACK_DEFAULT_SERVER_NAME; return server_name; } diff --git a/common/Jackdmp.cpp b/common/Jackdmp.cpp index ece91fa3..d4450f0e 100644 --- a/common/Jackdmp.cpp +++ b/common/Jackdmp.cpp @@ -21,38 +21,56 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. #include #include #include -#include + #include -#include #include - -#include "JackServer.h" +#include +#include "jack.h" #include "JackConstants.h" -#include "driver_interface.h" #include "JackDriverLoader.h" -#include "jslist.h" -#include "JackError.h" -#include "JackTools.h" -#include "shm.h" -#include "jack.h" + +/* +This is a simple port of the old jackdmp.cpp file to use the new Jack 2.0 control API. Available options for the server +are "hard-coded" in the source. A much better approach would be to use the control API to: +- dynamically retrieve available server parameters and then prepare to parse them +- get available drivers and their possible parameters, then prepare to parse them. +*/ #ifdef __APPLE_ #include -#endif -using namespace Jack; +static void notify_server_start(const char* server_name) +{ + // Send notification to be used in the JackRouter plugin + CFStringRef ref = CFStringCreateWithCString(NULL, server_name, kCFStringEncodingMacRoman); + CFNotificationCenterPostNotificationWithOptions(CFNotificationCenterGetDistributedCenter(), + CFSTR("com.grame.jackserver.start"), + ref, + NULL, + kCFNotificationDeliverImmediately | kCFNotificationPostToAllSessions); + CFRelease(ref); +} + +static void notify_server_stop(const char* server_name) +{ + // Send notification to be used in the JackRouter plugin + CFStringRef ref1 = CFStringCreateWithCString(NULL, server_name, kCFStringEncodingMacRoman); + CFNotificationCenterPostNotificationWithOptions(CFNotificationCenterGetDistributedCenter(), + CFSTR("com.grame.jackserver.stop"), + ref1, + NULL, + kCFNotificationDeliverImmediately | kCFNotificationPostToAllSessions); + CFRelease(ref1); +} -static JackServer* fServer; -static char* server_name = NULL; -static int realtime_priority = 10; -static int do_mlock = 1; -static int realtime = 0; -static int loopback = 0; -static int temporary = 0; -static int client_timeout = 0; /* msecs; if zero, use period size. */ -static int do_unlock = 0; -static JSList* drivers = NULL; -static sigset_t signals; +#else + +static void notify_server_start(const char* server_name) +{} +static void notify_server_stop(const char* server_name) +{} + +#endif static void silent_jack_error_callback(const char *desc) {} @@ -87,63 +105,56 @@ static void usage(FILE* file) " to display options for each driver\n\n"); } - -static void DoNothingHandler(int sig) +// To put in the control.h interface?? +static jackctl_driver_t * +jackctl_server_get_driver( + jackctl_server_t *server, + const char *driver_name) { - /* this is used by the child (active) process, but it never - gets called unless we are already shutting down after - another signal. - */ - char buf[64]; - snprintf(buf, sizeof(buf), "received signal %d during shutdown(ignored)\n", sig); - write(1, buf, strlen(buf)); -} + const JSList * node_ptr; -static int JackStart(const char* server_name, jack_driver_desc_t* driver_desc, JSList* driver_params, int sync, int temporary, int time_out_ms, int rt, int priority, int loopback, int verbose) -{ - jack_log("Jackdmp: sync = %ld timeout = %ld rt = %ld priority = %ld verbose = %ld ", sync, time_out_ms, rt, priority, verbose); - fServer = new JackServer(sync, temporary, time_out_ms, rt, priority, loopback, verbose, server_name); - int res = fServer->Open(driver_desc, driver_params); - return (res < 0) ? res : fServer->Start(); -} + node_ptr = jackctl_server_get_drivers_list(server); -static int JackStop() -{ - fServer->Stop(); - fServer->Close(); - jack_log("Jackdmp: server close"); - delete fServer; - jack_log("Jackdmp: delete server"); - return 0; -} + while (node_ptr) + { + if (strcmp(jackctl_driver_get_name((jackctl_driver_t *)node_ptr->data), driver_name) == 0) + { + return (jackctl_driver_t *)node_ptr->data; + } -static int JackDelete() -{ - delete fServer; - jack_log("Jackdmp: delete server"); - return 0; + node_ptr = jack_slist_next(node_ptr); + } + + return NULL; } -static void FilterSIGPIPE() +static jackctl_parameter_t * +jackctl_get_parameter( + const JSList * parameters_list, + const char * parameter_name) { - sigset_t set; - sigemptyset(&set); - sigaddset(&set, SIGPIPE); - //sigprocmask(SIG_BLOCK, &set, 0); - pthread_sigmask(SIG_BLOCK, &set, 0); + while (parameters_list) + { + if (strcmp(jackctl_parameter_get_name((jackctl_parameter_t *)parameters_list->data), parameter_name) == 0) + { + return (jackctl_parameter_t *)parameters_list->data; + } + + parameters_list = jack_slist_next(parameters_list); + } + + return NULL; } int main(int argc, char* argv[]) { - int sig; - sigset_t allsignals; - struct sigaction action; - int waiting; - - jack_driver_desc_t* driver_desc; + jackctl_server_t * server_ctl; + const JSList * server_parameters; + const char* server_name = "default"; + jackctl_driver_t * driver_ctl; const char *options = "-ad:P:uvrshVRL:STFl:t:mn:"; struct option long_options[] = { - { "driver", 1, 0, 'd'}, + { "driver", 1, 0, 'd' }, { "verbose", 0, 0, 'v' }, { "help", 0, 0, 'h' }, { "port-max", 1, 0, 'p' }, @@ -161,17 +172,26 @@ int main(int argc, char* argv[]) { "sync", 0, 0, 'S' }, { 0, 0, 0, 0 } }; - int opt = 0; + int i,opt = 0; int option_index = 0; - int seen_driver = 0; + bool seen_driver = false; char *driver_name = NULL; char **driver_args = NULL; - JSList* driver_params; int driver_nargs = 1; - int show_version = 0; - int replace_registry = 0; - int sync = 0; - int rc, i; + bool show_version = false; + sigset_t signals; + jackctl_parameter_t* param; + union jackctl_parameter_value value; + + copyright(stdout); + + server_ctl = jackctl_server_create(); + if (server_ctl == NULL) { + fprintf(stderr, "Failed to create server object"); + return -1; + } + + server_parameters = jackctl_server_get_parameters(server_ctl); opterr = 0; while (!seen_driver && @@ -180,12 +200,16 @@ int main(int argc, char* argv[]) switch (opt) { case 'd': - seen_driver = 1; + seen_driver = true; driver_name = optarg; break; case 'v': - jack_verbose = 1; + param = jackctl_get_parameter(server_parameters, "verbose"); + if (param != NULL) { + value.b = true; + jackctl_parameter_set_value(param, &value); + } break; case 's': @@ -193,80 +217,98 @@ int main(int argc, char* argv[]) break; case 'S': - sync = 1; + param = jackctl_get_parameter(server_parameters, "sync"); + if (param != NULL) { + value.b = true; + jackctl_parameter_set_value(param, &value); + } break; case 'n': server_name = optarg; - break; - - case 'm': - do_mlock = 0; + param = jackctl_get_parameter(server_parameters, "name"); + if (param != NULL) { + strncpy(value.str, optarg, JACK_PARAM_STRING_MAX); + jackctl_parameter_set_value(param, &value); + } break; case 'P': - realtime_priority = atoi(optarg); + param = jackctl_get_parameter(server_parameters, "realtime-priority"); + if (param != NULL) { + value.i = atoi(optarg); + jackctl_parameter_set_value(param, &value); + } break; case 'r': - replace_registry = 1; + param = jackctl_get_parameter(server_parameters, "replace-registry"); + if (param != NULL) { + value.b = true; + jackctl_parameter_set_value(param, &value); + } break; case 'R': - realtime = 1; + param = jackctl_get_parameter(server_parameters, "realtime"); + if (param != NULL) { + value.b = true; + jackctl_parameter_set_value(param, &value); + } break; case 'L': - loopback = atoi(optarg); + param = jackctl_get_parameter(server_parameters, "loopback ports"); + if (param != NULL) { + value.ui = atoi(optarg); + jackctl_parameter_set_value(param, &value); + } break; case 'T': - temporary = 1; + param = jackctl_get_parameter(server_parameters, "temporary"); + if (param != NULL) { + value.b = true; + jackctl_parameter_set_value(param, &value); + } break; case 't': - client_timeout = atoi(optarg); - break; - - case 'u': - do_unlock = 1; + param = jackctl_get_parameter(server_parameters, "client-timeout"); + if (param != NULL) { + value.i = atoi(optarg); + jackctl_parameter_set_value(param, &value); + } break; case 'V': - show_version = 1; + show_version = true; break; default: - fprintf(stderr, "unknown option character %c\n", - optopt); + fprintf(stderr, "unknown option character %c\n", optopt); /*fallthru*/ case 'h': usage(stdout); - return -1; + goto fail_free; } } - if (show_version) { - printf("jackdmp version " VERSION + if (show_version) { + printf("jackdmp version" VERSION "\n"); return -1; } if (!seen_driver) { usage(stderr); - exit(1); - } - - drivers = jack_drivers_load(drivers); - if (!drivers) { - fprintf(stderr, "jackdmp: no drivers found; exiting\n"); - exit(1); + goto fail_free; } - driver_desc = jack_find_driver_descriptor(drivers, driver_name); - if (!driver_desc) { - fprintf(stderr, "jackdmp: unknown driver '%s'\n", driver_name); - exit(1); + driver_ctl = jackctl_server_get_driver(server_ctl, driver_name); + if (driver_ctl == NULL) { + fprintf(stderr, "Unkown driver \"%s\"\n", driver_name); + goto fail_free; } if (optind < argc) { @@ -278,7 +320,7 @@ int main(int argc, char* argv[]) if (driver_nargs == 0) { fprintf(stderr, "No driver specified ... hmm. JACK won't do" " anything when run like this.\n"); - return -1; + goto fail_free; } driver_args = (char **) malloc(sizeof(char *) * driver_nargs); @@ -288,132 +330,27 @@ int main(int argc, char* argv[]) driver_args[i] = argv[optind++]; } - if (jack_parse_driver_params(driver_desc, driver_nargs, - driver_args, &driver_params)) { - exit(0); - } - - if (server_name == NULL) - server_name = (char*)JackTools::DefaultServerName(); - - copyright(stdout); - - rc = jack_register_server(server_name, replace_registry); - switch (rc) { - case EEXIST: - fprintf(stderr, "`%s' server already active\n", server_name); - exit(1); - case ENOSPC: - fprintf(stderr, "too many servers already active\n"); - exit(2); - case ENOMEM: - fprintf(stderr, "no access to shm registry\n"); - exit(3); - default: - if (jack_verbose) - fprintf(stderr, "server `%s' registered\n", server_name); - } - - /* clean up shared memory and files from any previous - * instance of this server name */ - jack_cleanup_shm(); - JackTools::CleanupFiles(server_name); - - pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); - - sigemptyset(&signals); - sigaddset(&signals, SIGHUP); - sigaddset(&signals, SIGINT); - sigaddset(&signals, SIGQUIT); - sigaddset(&signals, SIGPIPE); - sigaddset(&signals, SIGTERM); - sigaddset(&signals, SIGUSR1); - sigaddset(&signals, SIGUSR2); - - // all child threads will inherit this mask unless they - // explicitly reset it - - FilterSIGPIPE(); - pthread_sigmask(SIG_BLOCK, &signals, 0); - - if (!realtime && client_timeout == 0) - client_timeout = 500; /* 0.5 sec; usable when non realtime. */ - - int res = JackStart(server_name, driver_desc, driver_params, sync, temporary, client_timeout, realtime, realtime_priority, loopback, jack_verbose); - if (res < 0) { - jack_error("Cannot start server... exit"); - JackDelete(); - return 0; - } - -#ifdef __APPLE__ - CFStringRef ref = CFStringCreateWithCString(NULL, server_name, kCFStringEncodingMacRoman); - // Send notification to be used in the JackRouter plugin - CFNotificationCenterPostNotificationWithOptions(CFNotificationCenterGetDistributedCenter(), - CFSTR("com.grame.jackserver.start"), - ref, - NULL, - kCFNotificationDeliverImmediately | kCFNotificationPostToAllSessions); - CFRelease(ref); -#endif - - // install a do-nothing handler because otherwise pthreads - // behaviour is undefined when we enter sigwait. - - sigfillset(&allsignals); - action.sa_handler = DoNothingHandler; - action.sa_mask = allsignals; - action.sa_flags = SA_RESTART | SA_RESETHAND; - - for (i = 1; i < NSIG; i++) { - if (sigismember(&signals, i)) { - sigaction(i, &action, 0); - } - } - - waiting = TRUE; - - while (waiting) { - sigwait(&signals, &sig); - fprintf(stderr, "jack main caught signal %d\n", sig); - - switch (sig) { - case SIGUSR1: - //jack_dump_configuration(engine, 1); - break; - case SIGUSR2: - // driver exit - waiting = FALSE; - break; - default: - waiting = FALSE; - break; - } + if (jackctl_parse_driver_params(driver_ctl, driver_nargs, driver_args)) { + goto fail_free; } - - if (sig != SIGSEGV) { - // unblock signals so we can see them during shutdown. - // this will help prod developers not to lose sight of - // bugs that cause segfaults etc. during shutdown. - sigprocmask(SIG_UNBLOCK, &signals, 0); + + if (!jackctl_server_start(server_ctl, driver_ctl)) { + fprintf(stderr,"Failed to start server"); + goto fail_free; } - - JackStop(); - - jack_cleanup_shm(); - JackTools::CleanupFiles(server_name); - jack_unregister_server(server_name); - -#ifdef __APPLE__ - CFStringRef ref1 = CFStringCreateWithCString(NULL, server_name, kCFStringEncodingMacRoman); - // Send notification to be used in the JackRouter plugin - CFNotificationCenterPostNotificationWithOptions(CFNotificationCenterGetDistributedCenter(), - CFSTR("com.grame.jackserver.stop"), - ref1, - NULL, - kCFNotificationDeliverImmediately | kCFNotificationPostToAllSessions); - CFRelease(ref1); -#endif - + + notify_server_start(server_name); + + // Waits for signal + signals = jackctl_setup_signals(0); + jackctl_wait_signals(signals); + + if (!jackctl_server_stop(server_ctl)) + fprintf(stderr,"Cannot stop server..."); + +fail_free: + + jackctl_server_destroy(server_ctl); + notify_server_stop(server_name); return 1; } diff --git a/common/SConscript b/common/SConscript index cf31fef6..42082af7 100644 --- a/common/SConscript +++ b/common/SConscript @@ -23,6 +23,31 @@ import os import glob from string import Template +def pkg_config_get_value(module, args): + return env.backtick('pkg-config ' + args + ' ' + module).strip() + +def merge_pkg_config_append_string(env, envvar, module, args): + value = pkg_config_get_value(module, args) + #print value + if env._dict.has_key(envvar): + env._dict[envvar] += value + else: + env._dict[envvar] = value + +def merge_pkg_config_libs(env, module): + for lib in pkg_config_get_value(module, "--libs").split(' '): + if lib[:2] == '-l': + env._dict['LIBS'].append(lib[2:]) + elif lib[:2] == '-L': + env._dict['LIBPATH'].append(lib[2:]) + +def merge_pkg_config_variable(env, envvar, module, pkgvar): + merge_pkg_config_append_string(env, envvar, module, '--variable=' + pkgvar) + +def merge_pkg_config_std(env, module): + merge_pkg_config_append_string(env, 'CCFLAGS', module, '--cflags') + merge_pkg_config_libs(env, module) + Import('env') @@ -51,7 +76,7 @@ srcfiles_common_serverlib = [ 'JackDriver.cpp', 'JackEngine.cpp', 'JackEngineControl.cpp', - 'JackError.c', + 'JackError.cpp', 'JackExternalClient.cpp', 'JackFrameTimer.cpp', 'JackFreewheelDriver.cpp', @@ -85,7 +110,10 @@ srcfiles_common_serverlib = [ 'JackServerLaunch.cpp', 'timestamps.c', 'JackTools.cpp', - 'ringbuffer.c' + 'ringbuffer.c', + 'JackControl.cpp', + 'JackMessageBuffer.cpp', + 'JackProcessSync.cpp' ] srcfiles_common_clientlib = [ @@ -95,7 +123,7 @@ srcfiles_common_clientlib = [ 'JackConnectionManager.cpp', 'ringbuffer.c', 'JackServerLaunch.cpp', - 'JackError.c', + 'JackError.cpp', 'JackFrameTimer.cpp', 'JackGlobalsClient.cpp', 'JackGraphManager.cpp', @@ -119,7 +147,9 @@ srcfiles_common_clientlib = [ 'JackDebugClient.cpp', 'JackTransportEngine.cpp', 'timestamps.c', - 'JackTools.cpp' + 'JackTools.cpp', + 'JackMessageBuffer.cpp', + 'JackProcessSync.cpp' ] jack_headers = [ @@ -130,7 +160,9 @@ jack_headers = [ 'statistics.h', 'thread.h', 'transport.h', - 'types.h' + 'types.h', + 'control.h', + 'jslist.h' ] # @@ -138,6 +170,10 @@ jack_headers = [ # # Libraries + +if env['ENABLE_DBUS']: + merge_pkg_config_std(env, 'dbus-1') # actually we need this only for client lib + # Each platform should get it's own environment libenv = env.Copy() if env['PLATFORM'] == 'posix': diff --git a/common/jack/jack.h b/common/jack/jack.h index 0a1249f8..3862f534 100644 --- a/common/jack/jack.h +++ b/common/jack/jack.h @@ -41,6 +41,34 @@ extern "C" * Note: More documentation can be found in jack/types.h. */ + /** + * Call this function to get version of the JACK, in form of several numbers + * + * @param major_ptr pointer to variable receiving major version of JACK. + * + * @param minor_ptr pointer to variable receiving minor version of JACK. + * + * @param major_ptr pointer to variable receiving micro version of JACK. + * + * @param major_ptr pointer to variable receiving protocol version of JACK. + * + */ + void + jack_get_version( + int *major_ptr, + int *minor_ptr, + int *micro_ptr, + int *proto_ptr); + + /** + * Call this function to get version of the JACK, in form of a string + * + * @return Human readable string describing JACK version being used. + * + */ + const char * + jack_get_version_string(); + /** * Open an external client session with a JACK server. This interface * is more complex but more powerful than jack_client_new(). With it, @@ -513,6 +541,11 @@ extern "C" * including a final NULL. */ const char * jack_port_type (const jack_port_t *port); + + /** + * @return the @a port type id. + */ + jack_port_type_id_t jack_port_type_id (const jack_port_t *port); /** * @return TRUE if the jack_port_t belongs to the jack_client_t. diff --git a/common/jack/types.h b/common/jack/types.h index 83c50145..c6c32f62 100644 --- a/common/jack/types.h +++ b/common/jack/types.h @@ -19,10 +19,12 @@ */ #ifndef __jack_types_h__ -#define __jack_types_h__ +#define __jack_types_h__ -#ifdef WIN32 -#include +#ifdef WIN32 +#include +#define vsnprintf _vsnprintf +#define snprintf _snprintf #ifndef __MINGW32__ typedef long int32_t; typedef unsigned long uint32_t; @@ -97,6 +99,8 @@ typedef uint64_t jack_port_id_t; typedef uint32_t jack_port_id_t; #endif +typedef uint32_t jack_port_type_id_t; + /** * Prototype for the client supplied function that is called * by the engine anytime there is work to be done. diff --git a/common/jslist.h b/common/jslist.h deleted file mode 100644 index e948311e..00000000 --- a/common/jslist.h +++ /dev/null @@ -1,287 +0,0 @@ -/* - Based on gslist.c from glib-1.2.9 (LGPL). - - Adaption to JACK, Copyright (C) 2002 Kai Vehmanen. - - replaced use of gtypes with normal ANSI C types - - glib's memory allocation routines replaced with - malloc/free calls - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU Lesser General Public License as published by - the Free Software Foundation; either version 2.1 of the License, or - (at your option) 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 Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ - -#ifndef __jack_jslist_h__ -#define __jack_jslist_h__ - -#include - -#ifdef WIN32 -#define __inline__ inline -#endif - -typedef struct _JSList JSList; - -typedef int (*JCompareFunc) (void* a, void* b); -struct _JSList -{ - void *data; - JSList *next; -}; - -static __inline__ -JSList* -jack_slist_alloc (void) -{ - JSList *new_list; - - new_list = (JSList*)malloc(sizeof(JSList)); - new_list->data = NULL; - new_list->next = NULL; - - return new_list; -} - -static __inline__ -JSList* -jack_slist_prepend (JSList* list, void* data) -{ - JSList *new_list; - - new_list = (JSList*)malloc(sizeof(JSList)); - new_list->data = data; - new_list->next = list; - - return new_list; -} - -#define jack_slist_next(slist) ((slist) ? (((JSList *)(slist))->next) : NULL) -static __inline__ -JSList* -jack_slist_last (JSList *list) -{ - if (list) { - while (list->next) - list = list->next; - } - - return list; -} - -static __inline__ -JSList* -jack_slist_remove_link (JSList *list, - JSList *link) -{ - JSList *tmp; - JSList *prev; - - prev = NULL; - tmp = list; - - while (tmp) { - if (tmp == link) { - if (prev) - prev->next = tmp->next; - if (list == tmp) - list = list->next; - - tmp->next = NULL; - break; - } - - prev = tmp; - tmp = tmp->next; - } - - return list; -} - -static __inline__ -void -jack_slist_free (JSList *list) -{ - while (list) { - JSList *next = list->next; - free(list); - list = next; - } -} - -static __inline__ -void -jack_slist_free_1 (JSList *list) -{ - if (list) { - free(list); - } -} - -static __inline__ -JSList* -jack_slist_remove (JSList *list, - void *data) -{ - JSList *tmp; - JSList *prev; - - prev = NULL; - tmp = list; - - while (tmp) { - if (tmp->data == data) { - if (prev) - prev->next = tmp->next; - if (list == tmp) - list = list->next; - - tmp->next = NULL; - jack_slist_free (tmp); - - break; - } - - prev = tmp; - tmp = tmp->next; - } - - return list; -} - -static __inline__ -unsigned int -jack_slist_length (JSList *list) -{ - unsigned int length; - - length = 0; - while (list) { - length++; - list = list->next; - } - - return length; -} - -static __inline__ -JSList* -jack_slist_find (JSList *list, - void *data) -{ - while (list) { - if (list->data == data) - break; - list = list->next; - } - - return list; -} - -static __inline__ -JSList* -jack_slist_copy (JSList *list) -{ - JSList *new_list = NULL; - - if (list) { - JSList *last; - - new_list = jack_slist_alloc (); - new_list->data = list->data; - last = new_list; - list = list->next; - while (list) { - last->next = jack_slist_alloc (); - last = last->next; - last->data = list->data; - list = list->next; - } - } - - return new_list; -} - -static __inline__ -JSList* -jack_slist_append (JSList *list, - void *data) -{ - JSList *new_list; - JSList *last; - - new_list = jack_slist_alloc (); - new_list->data = data; - - if (list) { - last = jack_slist_last (list); - last->next = new_list; - - return list; - } else - return new_list; -} - -static __inline__ -JSList* -jack_slist_sort_merge (JSList *l1, - JSList *l2, - JCompareFunc compare_func) -{ - JSList list, *l; - - l = &list; - - while (l1 && l2) { - if (compare_func(l1->data, l2->data) < 0) { - l = l->next = l1; - l1 = l1->next; - } else { - l = l->next = l2; - l2 = l2->next; - } - } - l->next = l1 ? l1 : l2; - - return list.next; -} - -static __inline__ -JSList* -jack_slist_sort (JSList *list, - JCompareFunc compare_func) -{ - JSList *l1, *l2; - - if (!list) - return NULL; - if (!list->next) - return list; - - l1 = list; - l2 = list->next; - - while ((l2 = l2->next) != NULL) { - if ((l2 = l2->next) == NULL) - break; - l1 = l1->next; - } - l2 = l1->next; - l1->next = NULL; - - return jack_slist_sort_merge (jack_slist_sort (list, compare_func), - jack_slist_sort (l2, compare_func), - compare_func); -} - -#endif /* __jack_jslist_h__ */ diff --git a/doxyfile b/doxyfile index 67b254d1..62fb8c3b 100644 --- a/doxyfile +++ b/doxyfile @@ -192,7 +192,7 @@ INLINE_INFO = YES # alphabetically by member name. If set to NO the members will appear in # declaration order. -SORT_MEMBER_DOCS = YES +SORT_MEMBER_DOCS = NO # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first @@ -304,7 +304,7 @@ WARN_LOGFILE = # directories like "/usr/src/myproject". Separate the files or directories # with spaces. -INPUT = common macosx linux/alsa windows +INPUT = common macosx linux/alsa windows common/jack/control.h # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp diff --git a/example-clients/SConscript b/example-clients/SConscript index 6565e0bf..b1202710 100644 --- a/example-clients/SConscript +++ b/example-clients/SConscript @@ -82,3 +82,6 @@ if env['BUILD_EXAMPLES']: if clientenv['INSTALL_EXAMPLES']: env.InstallAs(env['INSTALL_ADDON_DIR'] + '/' + example_lib + '.so', lib) env.Alias('install', env['INSTALL_ADDON_DIR'] + '/' + example_lib + '.so') + +if env['ENABLE_DBUS']: + clientenv.Install(env['BINDIR'], 'jack_control') diff --git a/linux/alsa/JackAlsaDriver.cpp b/linux/alsa/JackAlsaDriver.cpp index 8b654ad5..78b1257d 100644 --- a/linux/alsa/JackAlsaDriver.cpp +++ b/linux/alsa/JackAlsaDriver.cpp @@ -435,7 +435,7 @@ JackAlsaDriver::alsa_driver_configure_stream (alsa_driver_t *driver, char *devic handle, hw_params, formats[format].format)) < 0) { if ((sample_width == 4 - ? format++ >= NUMFORMATS - 1 + ? format++ >= (int)NUMFORMATS - 1 : format-- <= 0)) { jack_error ("Sorry. The audio interface \"%s\"" " doesn't support any of the" @@ -450,7 +450,7 @@ JackAlsaDriver::alsa_driver_configure_stream (alsa_driver_t *driver, char *devic } else { driver->quirk_bswap = 0; } - jack_error ("ALSA: final selected sample format for %s: %s", stream_name, formats[format].Name); + jack_info ("ALSA: final selected sample format for %s: %s", stream_name, formats[format].Name); break; } } @@ -524,7 +524,7 @@ JackAlsaDriver::alsa_driver_configure_stream (alsa_driver_t *driver, char *devic stream_name); return -1; } - jack_error ("ALSA: use %d periods for %s", *nperiodsp, stream_name); + jack_info ("ALSA: use %d periods for %s", *nperiodsp, stream_name); /* if (!jack_power_of_two(driver->frames_per_cycle)) { @@ -1782,6 +1782,11 @@ JackAlsaDriver::alsa_driver_delete (alsa_driver_t *driver) driver->ctl_handle = 0; } + if (driver->ctl_handle) { + snd_ctl_close (driver->ctl_handle); + driver->ctl_handle = 0; + } + if (driver->capture_handle) { snd_pcm_close (driver->capture_handle); driver->capture_handle = 0; @@ -2159,7 +2164,7 @@ int JackAlsaDriver::Attach() // Monitor ports if (fWithMonitorPorts) { jack_log("Create monitor port "); - snprintf(name, sizeof(name) - 1, "%s:monitor_%lu", fClientControl->fName, i + 1); + snprintf(name, sizeof(name) - 1, "%s:monitor_%d", fClientControl->fName, i + 1); if ((port_index = fGraphManager->AllocatePort(fClientControl->fRefNum, name, JACK_DEFAULT_AUDIO_TYPE, JackPortIsOutput, fEngineControl->fBufferSize)) == NO_PORT) { jack_error ("ALSA: cannot register monitor port for %s", name); } else { @@ -2713,7 +2718,6 @@ extern "C" case 'X': midi_driver = strdup(param->value.str); break; - } } diff --git a/linux/alsa/alsa_midi.h b/linux/alsa/alsa_midi.h index ec2575d8..1437e21a 100644 --- a/linux/alsa/alsa_midi.h +++ b/linux/alsa/alsa_midi.h @@ -22,6 +22,8 @@ #ifdef __cplusplus extern "C" { +#else +#include #endif typedef struct alsa_midi_t alsa_midi_t; diff --git a/linux/alsa/alsa_midi_impl.h b/linux/alsa/alsa_midi_impl.h index 1149163b..87c44e8f 100644 --- a/linux/alsa/alsa_midi_impl.h +++ b/linux/alsa/alsa_midi_impl.h @@ -67,17 +67,15 @@ extern "C" #if defined(STANDALONE) #define MESSAGE(...) fprintf(stderr, __VA_ARGS__) -#elif defined(JACKMP) -#define MESSAGE(...) fprintf(stderr, __VA_ARGS__) ; fprintf(stderr, "\n") -#else +#elif !defined(JACKMP) #include #endif -#define info_log(...) MESSAGE(__VA_ARGS__) -#define error_log(...) MESSAGE(__VA_ARGS__) +#define info_log(...) jack_info(__VA_ARGS__) +#define error_log(...) jack_error(__VA_ARGS__) -#ifdef DEBUG -#define debug_log(...) MESSAGE(__VA_ARGS__) +#ifdef ALSA_MIDI_DEBUG +#define debug_log(...) jack_info(__VA_ARGS__) #else #define debug_log(...) #endif diff --git a/linux/alsa/alsa_rawmidi.c b/linux/alsa/alsa_rawmidi.c index b6448a65..9c329187 100644 --- a/linux/alsa/alsa_rawmidi.c +++ b/linux/alsa/alsa_rawmidi.c @@ -35,6 +35,7 @@ #include "alsa_midi_impl.h" #include "midi_pack.h" #include "midi_unpack.h" +#include "JackError.h" enum { NANOSLEEP_RESOLUTION = 7000 @@ -628,6 +629,7 @@ void scan_device(scan_t *scan) alsa_error("scan: snd_ctl_rawmidi_info on subdevice", err); continue; } + scan_port_update(scan); } } @@ -665,7 +667,7 @@ midi_port_t** scan_port_add(scan_t *scan, const alsa_id_t *id, midi_port_t **lis port->next = *list; *list = port; - error_log("scan: added port %s %s", port->dev, port->name); + info_log("scan: added port %s %s", port->dev, port->name); return &port->next; } @@ -689,7 +691,7 @@ midi_port_t** scan_port_open(alsa_rawmidi_t *midi, midi_port_t **list) port->state = PORT_ADDED_TO_JACK; jack_ringbuffer_write(str->jack.new_ports, (char*) &port, sizeof(port)); - error_log("scan: opened port %s %s", port->dev, port->name); + info_log("scan: opened port %s %s", port->dev, port->name); return &port->next; fail_2: @@ -709,7 +711,7 @@ midi_port_t** scan_port_del(alsa_rawmidi_t *midi, midi_port_t **list) { midi_port_t *port = *list; if (port->state == PORT_REMOVED_FROM_JACK) { - error_log("scan: deleted port %s %s", port->dev, port->name); + info_log("scan: deleted port %s %s", port->dev, port->name); *list = port->next; if (port->id.id[2] ) (midi->out.port_close)(midi, port); diff --git a/linux/alsa/alsa_seqmidi.c b/linux/alsa/alsa_seqmidi.c index c798e37e..0eafe644 100644 --- a/linux/alsa/alsa_seqmidi.c +++ b/linux/alsa/alsa_seqmidi.c @@ -49,6 +49,7 @@ #include #include "alsa_midi_impl.h" +#include "JackError.h" #define NSEC_PER_SEC ((int64_t)1000*1000*1000) diff --git a/macosx/JackCoreAudioDriver.cpp b/macosx/JackCoreAudioDriver.cpp index 4546f39e..7753a588 100644 --- a/macosx/JackCoreAudioDriver.cpp +++ b/macosx/JackCoreAudioDriver.cpp @@ -213,6 +213,8 @@ OSStatus JackCoreAudioDriver::MeasureCallback(AudioDeviceID inDevice, AudioDeviceRemoveIOProc(driver->fDeviceID, MeasureCallback); jack_log("JackCoreAudioDriver::MeasureCallback called"); JackMachThread::GetParams(&driver->fEngineControl->fPeriod, &driver->fEngineControl->fComputation, &driver->fEngineControl->fConstraint); + // Setup threadded based log function + set_threaded_log_function(); return noErr; } @@ -245,7 +247,7 @@ OSStatus JackCoreAudioDriver::DeviceNotificationCallback(AudioDeviceID inDevice, void* inClientData) { JackCoreAudioDriver* driver = (JackCoreAudioDriver*)inClientData; - + switch (inPropertyID) { case kAudioDeviceProcessorOverload: diff --git a/macosx/Jackdmp.xcodeproj/project.pbxproj b/macosx/Jackdmp.xcodeproj/project.pbxproj index b153b1c7..d74c05ee 100644 --- a/macosx/Jackdmp.xcodeproj/project.pbxproj +++ b/macosx/Jackdmp.xcodeproj/project.pbxproj @@ -86,6 +86,10 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 4B02069E0DC0BAB400319AF1 /* JackProcessSync.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B02069D0DC0BAB400319AF1 /* JackProcessSync.cpp */; }; + 4B02069F0DC0BAB400319AF1 /* JackProcessSync.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B02069D0DC0BAB400319AF1 /* JackProcessSync.cpp */; }; + 4B0206A00DC0BAB400319AF1 /* JackProcessSync.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B02069D0DC0BAB400319AF1 /* JackProcessSync.cpp */; }; + 4B0206A10DC0BAB400319AF1 /* JackProcessSync.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B02069D0DC0BAB400319AF1 /* JackProcessSync.cpp */; }; 4B0A28ED0D520852002EFF74 /* tw.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B0A28EC0D520852002EFF74 /* tw.c */; }; 4B0A29260D52108E002EFF74 /* tw.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B0A28EC0D520852002EFF74 /* tw.c */; }; 4B0A29830D523269002EFF74 /* mp_tw.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B0A29820D523269002EFF74 /* mp_tw.cpp */; }; @@ -151,7 +155,6 @@ 4B35C46D0D4731D1000DE7AE /* JackTime.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF773AA08B3414500149912 /* JackTime.c */; }; 4B35C46E0D4731D1000DE7AE /* JackGlobalsClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B123D3308B3954300540632 /* JackGlobalsClient.cpp */; }; 4B35C4700D4731D1000DE7AE /* JackGlobals.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B2C28F908DAD01E00249230 /* JackGlobals.cpp */; }; - 4B35C4710D4731D1000DE7AE /* JackError.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B003A6008E2A87A0060EFDC /* JackError.c */; }; 4B35C4720D4731D1000DE7AE /* ringbuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B003AB008E2B2BA0060EFDC /* ringbuffer.c */; }; 4B35C4730D4731D1000DE7AE /* JackDebugClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B98AE000931D30C0091932A /* JackDebugClient.cpp */; }; 4B35C4740D4731D1000DE7AE /* JackTransportEngine.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BD4B4D509BACD9600750C0F /* JackTransportEngine.cpp */; }; @@ -190,7 +193,6 @@ 4B35C4A40D4731D1000DE7AE /* JackDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF8D1B50834EEE400C94B91 /* JackDriver.h */; }; 4B35C4A50D4731D1000DE7AE /* driver_interface.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B869B3D08C8D21C001CF041 /* driver_interface.h */; }; 4B35C4A70D4731D1000DE7AE /* JackDriverLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B869B4208C8D22F001CF041 /* JackDriverLoader.h */; }; - 4B35C4A80D4731D1000DE7AE /* jslist.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B869B6408C8D76B001CF041 /* jslist.h */; }; 4B35C4A90D4731D1000DE7AE /* JackEngine.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF8D2130834F02800C94B91 /* JackEngine.h */; }; 4B35C4AA0D4731D1000DE7AE /* JackExternalClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF8D1F70834EFBD00C94B91 /* JackExternalClient.h */; }; 4B35C4AB0D4731D1000DE7AE /* JackServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF8D2220834F05C00C94B91 /* JackServer.h */; }; @@ -229,7 +231,6 @@ 4B35C4D10D4731D1000DE7AE /* JackMachThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFB741E08AD2B9900DB99B8 /* JackMachThread.cpp */; }; 4B35C4D30D4731D1000DE7AE /* JackTime.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF773AA08B3414500149912 /* JackTime.c */; }; 4B35C4D50D4731D1000DE7AE /* JackGlobals.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B2C28F908DAD01E00249230 /* JackGlobals.cpp */; }; - 4B35C4D60D4731D1000DE7AE /* JackError.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B003A6008E2A87A0060EFDC /* JackError.c */; }; 4B35C4D70D4731D1000DE7AE /* ringbuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B003AB008E2B2BA0060EFDC /* ringbuffer.c */; }; 4B35C4D80D4731D1000DE7AE /* JackAudioDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D22A0834F07D00C94B91 /* JackAudioDriver.cpp */; }; 4B35C4D90D4731D1000DE7AE /* JackFreewheelDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1BA0834EEF100C94B91 /* JackFreewheelDriver.cpp */; }; @@ -267,20 +268,8 @@ 4B35C5570D4731D2000DE7AE /* freewheel.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1710834EE0F00C94B91 /* freewheel.c */; }; 4B35C5630D4731D2000DE7AE /* jdelay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFA99A90AAAF40C009E916C /* jdelay.cpp */; }; 4B35C56F0D4731D2000DE7AE /* external_metro.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1750834EE3600C94B91 /* external_metro.cpp */; }; - 4B35C57A0D4731D2000DE7AE /* JackPosixThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF8D1970834EE9700C94B91 /* JackPosixThread.h */; }; - 4B35C57B0D4731D2000DE7AE /* JackError.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF8D1770834EE4800C94B91 /* JackError.h */; }; 4B35C57D0D4731D2000DE7AE /* testAtomic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D23E0834F1C300C94B91 /* testAtomic.cpp */; }; - 4B35C57E0D4731D2000DE7AE /* JackPosixThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1980834EE9700C94B91 /* JackPosixThread.cpp */; }; - 4B35C57F0D4731D2000DE7AE /* JackError.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B003A6008E2A87A0060EFDC /* JackError.c */; }; - 4B35C58A0D4731D2000DE7AE /* JackError.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF8D1770834EE4800C94B91 /* JackError.h */; }; - 4B35C58B0D4731D2000DE7AE /* JackPosixThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF8D1970834EE9700C94B91 /* JackPosixThread.h */; }; 4B35C58D0D4731D2000DE7AE /* testSem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D2470834F20600C94B91 /* testSem.cpp */; }; - 4B35C58E0D4731D2000DE7AE /* JackPosixThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1980834EE9700C94B91 /* JackPosixThread.cpp */; }; - 4B35C58F0D4731D2000DE7AE /* JackFifo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B56880F08B5C8620022B32D /* JackFifo.cpp */; }; - 4B35C5900D4731D2000DE7AE /* JackPosixSemaphore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BEE0B2C08ACBB9F00D22B43 /* JackPosixSemaphore.cpp */; }; - 4B35C5910D4731D2000DE7AE /* JackMachSemaphore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF6C1D508ACE64C001E2013 /* JackMachSemaphore.cpp */; }; - 4B35C5920D4731D2000DE7AE /* JackMachThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFB741E08AD2B9900DB99B8 /* JackMachThread.cpp */; }; - 4B35C5930D4731D2000DE7AE /* JackError.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B003A6008E2A87A0060EFDC /* JackError.c */; }; 4B35C59F0D4731D2000DE7AE /* zombie.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1670834EDD900C94B91 /* zombie.c */; }; 4B35C5AB0D4731D2000DE7AE /* jack_test.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BE6C6AC0A3E0A65005A203A /* jack_test.cpp */; }; 4B35C5B70D4731D2000DE7AE /* jack_cpu.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B3F49070AD8503300491C6E /* jack_cpu.c */; }; @@ -294,25 +283,8 @@ 4B35C5E00D4731D2000DE7AE /* JackMachThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFB741E08AD2B9900DB99B8 /* JackMachThread.cpp */; }; 4B35C5E10D4731D2000DE7AE /* JackPosixThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1980834EE9700C94B91 /* JackPosixThread.cpp */; }; 4B35C5E20D4731D2000DE7AE /* testSynchroServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BA577FB08BF8E4600F82DE1 /* testSynchroServer.cpp */; }; - 4B35C5E30D4731D2000DE7AE /* JackError.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B003A6008E2A87A0060EFDC /* JackError.c */; }; - 4B35C5EE0D4731D2000DE7AE /* JackError.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF8D1770834EE4800C94B91 /* JackError.h */; }; - 4B35C5EF0D4731D2000DE7AE /* JackConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B66A8580934964500A89560 /* JackConstants.h */; }; - 4B35C5F10D4731D2000DE7AE /* JackMachSemaphore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF6C1D508ACE64C001E2013 /* JackMachSemaphore.cpp */; }; - 4B35C5F20D4731D2000DE7AE /* JackFifo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B56880F08B5C8620022B32D /* JackFifo.cpp */; }; - 4B35C5F30D4731D2000DE7AE /* JackPosixSemaphore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BEE0B2C08ACBB9F00D22B43 /* JackPosixSemaphore.cpp */; }; - 4B35C5F40D4731D2000DE7AE /* JackMachThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFB741E08AD2B9900DB99B8 /* JackMachThread.cpp */; }; - 4B35C5F50D4731D2000DE7AE /* JackPosixThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1980834EE9700C94B91 /* JackPosixThread.cpp */; }; 4B35C5F60D4731D2000DE7AE /* testSynchroClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BA577BC08BF8BE200F82DE1 /* testSynchroClient.cpp */; }; - 4B35C5F70D4731D2000DE7AE /* JackError.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B003A6008E2A87A0060EFDC /* JackError.c */; }; - 4B35C6020D4731D2000DE7AE /* JackError.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF8D1770834EE4800C94B91 /* JackError.h */; }; - 4B35C6030D4731D2000DE7AE /* JackConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B66A8580934964500A89560 /* JackConstants.h */; }; - 4B35C6050D4731D2000DE7AE /* JackMachSemaphore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF6C1D508ACE64C001E2013 /* JackMachSemaphore.cpp */; }; - 4B35C6060D4731D2000DE7AE /* JackFifo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B56880F08B5C8620022B32D /* JackFifo.cpp */; }; - 4B35C6070D4731D2000DE7AE /* JackPosixSemaphore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BEE0B2C08ACBB9F00D22B43 /* JackPosixSemaphore.cpp */; }; - 4B35C6080D4731D2000DE7AE /* JackMachThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFB741E08AD2B9900DB99B8 /* JackMachThread.cpp */; }; - 4B35C6090D4731D2000DE7AE /* JackPosixThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1980834EE9700C94B91 /* JackPosixThread.cpp */; }; 4B35C60A0D4731D2000DE7AE /* testSynchroServerClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BBD13CC08C71EB40079F7FF /* testSynchroServerClient.cpp */; }; - 4B35C60B0D4731D2000DE7AE /* JackError.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B003A6008E2A87A0060EFDC /* JackError.c */; }; 4B35C6160D4731D2000DE7AE /* JackCoreAudioDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B395C9706AEF53800923527 /* JackCoreAudioDriver.h */; }; 4B35C6180D4731D2000DE7AE /* JackCoreAudioDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B395C9606AEF53800923527 /* JackCoreAudioDriver.cpp */; }; 4B35C6210D4731D2000DE7AE /* JackPortAudioDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B978DEB0A31D099009E2DD1 /* JackPortAudioDriver.h */; }; @@ -322,6 +294,16 @@ 4B35C6380D4731D3000DE7AE /* inprocess.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BD6240C0CBCF16600DE782F /* inprocess.c */; }; 4B3F49080AD8503300491C6E /* jack_cpu.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B3F49070AD8503300491C6E /* jack_cpu.c */; }; 4B44FAE70C7598370033A72C /* JackServerLaunch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B44FAE50C7598370033A72C /* JackServerLaunch.cpp */; }; + 4B4F9C8C0DC20C0400706CB0 /* JackMessageBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B4F9C8A0DC20C0400706CB0 /* JackMessageBuffer.cpp */; }; + 4B4F9C8D0DC20C0400706CB0 /* JackMessageBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B4F9C8B0DC20C0400706CB0 /* JackMessageBuffer.h */; }; + 4B4F9C8E0DC20C0400706CB0 /* JackMessageBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B4F9C8A0DC20C0400706CB0 /* JackMessageBuffer.cpp */; }; + 4B4F9C8F0DC20C0400706CB0 /* JackMessageBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B4F9C8B0DC20C0400706CB0 /* JackMessageBuffer.h */; }; + 4B4F9C900DC20C0400706CB0 /* JackMessageBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B4F9C8A0DC20C0400706CB0 /* JackMessageBuffer.cpp */; }; + 4B4F9C910DC20C0400706CB0 /* JackMessageBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B4F9C8B0DC20C0400706CB0 /* JackMessageBuffer.h */; }; + 4B4F9C920DC20C0400706CB0 /* JackMessageBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B4F9C8A0DC20C0400706CB0 /* JackMessageBuffer.cpp */; }; + 4B4F9C930DC20C0400706CB0 /* JackMessageBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B4F9C8B0DC20C0400706CB0 /* JackMessageBuffer.h */; }; + 4B4F9D820DC2178E00706CB0 /* JackMessageBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B4F9C8A0DC20C0400706CB0 /* JackMessageBuffer.cpp */; }; + 4B4F9D830DC2178F00706CB0 /* JackMessageBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B4F9C8B0DC20C0400706CB0 /* JackMessageBuffer.h */; }; 4B5175280D8FE69300961F37 /* tw1.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B57F5BA0D72C2B000B4E719 /* tw1.c */; }; 4B57F5BC0D72C2B000B4E719 /* tw1.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B57F5BA0D72C2B000B4E719 /* tw1.c */; }; 4B5A1BBE0CD1CC110005BF74 /* midiseq.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B5A1BBD0CD1CC110005BF74 /* midiseq.c */; }; @@ -378,7 +360,6 @@ 4B699C3A097D421600A18468 /* JackTime.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF773AA08B3414500149912 /* JackTime.c */; }; 4B699C3B097D421600A18468 /* JackGlobalsClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B123D3308B3954300540632 /* JackGlobalsClient.cpp */; }; 4B699C3D097D421600A18468 /* JackGlobals.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B2C28F908DAD01E00249230 /* JackGlobals.cpp */; }; - 4B699C3E097D421600A18468 /* JackError.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B003A6008E2A87A0060EFDC /* JackError.c */; }; 4B699C3F097D421600A18468 /* ringbuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B003AB008E2B2BA0060EFDC /* ringbuffer.c */; }; 4B699C40097D421600A18468 /* JackDebugClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B98AE000931D30C0091932A /* JackDebugClient.cpp */; }; 4B699C4E097D421600A18468 /* JackMachPort.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B799AD707899652003F3F15 /* JackMachPort.h */; }; @@ -408,7 +389,6 @@ 4B699C6C097D421600A18468 /* JackDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF8D1B50834EEE400C94B91 /* JackDriver.h */; }; 4B699C6D097D421600A18468 /* driver_interface.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B869B3D08C8D21C001CF041 /* driver_interface.h */; }; 4B699C6F097D421600A18468 /* JackDriverLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B869B4208C8D22F001CF041 /* JackDriverLoader.h */; }; - 4B699C70097D421600A18468 /* jslist.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B869B6408C8D76B001CF041 /* jslist.h */; }; 4B699C71097D421600A18468 /* JackEngine.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF8D2130834F02800C94B91 /* JackEngine.h */; }; 4B699C73097D421600A18468 /* JackExternalClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF8D1F70834EFBD00C94B91 /* JackExternalClient.h */; }; 4B699C74097D421600A18468 /* JackServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF8D2220834F05C00C94B91 /* JackServer.h */; }; @@ -432,7 +412,6 @@ 4B699C8B097D421600A18468 /* JackMachThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFB741E08AD2B9900DB99B8 /* JackMachThread.cpp */; }; 4B699C8D097D421600A18468 /* JackTime.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF773AA08B3414500149912 /* JackTime.c */; }; 4B699C8F097D421600A18468 /* JackGlobals.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B2C28F908DAD01E00249230 /* JackGlobals.cpp */; }; - 4B699C90097D421600A18468 /* JackError.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B003A6008E2A87A0060EFDC /* JackError.c */; }; 4B699C91097D421600A18468 /* ringbuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B003AB008E2B2BA0060EFDC /* ringbuffer.c */; }; 4B699C92097D421600A18468 /* JackAudioDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D22A0834F07D00C94B91 /* JackAudioDriver.cpp */; }; 4B699C93097D421600A18468 /* JackFreewheelDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1BA0834EEF100C94B91 /* JackFreewheelDriver.cpp */; }; @@ -454,48 +433,12 @@ 4B699CC4097D421600A18468 /* lsp.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1690834EDE600C94B91 /* lsp.c */; }; 4B699CF6097D421600A18468 /* freewheel.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1710834EE0F00C94B91 /* freewheel.c */; }; 4B699D06097D421600A18468 /* external_metro.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1750834EE3600C94B91 /* external_metro.cpp */; }; - 4B699D15097D421600A18468 /* JackPosixThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF8D1970834EE9700C94B91 /* JackPosixThread.h */; }; - 4B699D16097D421600A18468 /* JackError.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF8D1770834EE4800C94B91 /* JackError.h */; }; 4B699D18097D421600A18468 /* testAtomic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D23E0834F1C300C94B91 /* testAtomic.cpp */; }; - 4B699D19097D421600A18468 /* JackPosixThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1980834EE9700C94B91 /* JackPosixThread.cpp */; }; - 4B699D1A097D421600A18468 /* JackError.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B003A6008E2A87A0060EFDC /* JackError.c */; }; - 4B699D29097D421600A18468 /* JackError.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF8D1770834EE4800C94B91 /* JackError.h */; }; - 4B699D2A097D421600A18468 /* JackPosixThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF8D1970834EE9700C94B91 /* JackPosixThread.h */; }; 4B699D2C097D421600A18468 /* testSem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D2470834F20600C94B91 /* testSem.cpp */; }; - 4B699D2D097D421600A18468 /* JackPosixThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1980834EE9700C94B91 /* JackPosixThread.cpp */; }; - 4B699D2E097D421600A18468 /* JackFifo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B56880F08B5C8620022B32D /* JackFifo.cpp */; }; - 4B699D2F097D421600A18468 /* JackPosixSemaphore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BEE0B2C08ACBB9F00D22B43 /* JackPosixSemaphore.cpp */; }; - 4B699D30097D421600A18468 /* JackMachSemaphore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF6C1D508ACE64C001E2013 /* JackMachSemaphore.cpp */; }; - 4B699D31097D421600A18468 /* JackMachThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFB741E08AD2B9900DB99B8 /* JackMachThread.cpp */; }; - 4B699D32097D421600A18468 /* JackError.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B003A6008E2A87A0060EFDC /* JackError.c */; }; 4B699D42097D421600A18468 /* zombie.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1670834EDD900C94B91 /* zombie.c */; }; - 4B699D51097D421600A18468 /* JackError.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF8D1770834EE4800C94B91 /* JackError.h */; }; - 4B699D52097D421600A18468 /* JackConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B66A8580934964500A89560 /* JackConstants.h */; }; - 4B699D54097D421600A18468 /* JackMachSemaphore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF6C1D508ACE64C001E2013 /* JackMachSemaphore.cpp */; }; - 4B699D55097D421600A18468 /* JackFifo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B56880F08B5C8620022B32D /* JackFifo.cpp */; }; - 4B699D56097D421600A18468 /* JackPosixSemaphore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BEE0B2C08ACBB9F00D22B43 /* JackPosixSemaphore.cpp */; }; - 4B699D57097D421600A18468 /* JackMachThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFB741E08AD2B9900DB99B8 /* JackMachThread.cpp */; }; - 4B699D58097D421600A18468 /* JackPosixThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1980834EE9700C94B91 /* JackPosixThread.cpp */; }; 4B699D59097D421600A18468 /* testSynchroServer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BA577FB08BF8E4600F82DE1 /* testSynchroServer.cpp */; }; - 4B699D5A097D421600A18468 /* JackError.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B003A6008E2A87A0060EFDC /* JackError.c */; }; - 4B699D69097D421600A18468 /* JackError.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF8D1770834EE4800C94B91 /* JackError.h */; }; - 4B699D6A097D421600A18468 /* JackConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B66A8580934964500A89560 /* JackConstants.h */; }; - 4B699D6C097D421600A18468 /* JackMachSemaphore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF6C1D508ACE64C001E2013 /* JackMachSemaphore.cpp */; }; - 4B699D6D097D421600A18468 /* JackFifo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B56880F08B5C8620022B32D /* JackFifo.cpp */; }; - 4B699D6E097D421600A18468 /* JackPosixSemaphore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BEE0B2C08ACBB9F00D22B43 /* JackPosixSemaphore.cpp */; }; - 4B699D6F097D421600A18468 /* JackMachThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFB741E08AD2B9900DB99B8 /* JackMachThread.cpp */; }; - 4B699D70097D421600A18468 /* JackPosixThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1980834EE9700C94B91 /* JackPosixThread.cpp */; }; 4B699D71097D421600A18468 /* testSynchroClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BA577BC08BF8BE200F82DE1 /* testSynchroClient.cpp */; }; - 4B699D72097D421600A18468 /* JackError.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B003A6008E2A87A0060EFDC /* JackError.c */; }; - 4B699D81097D421700A18468 /* JackError.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BF8D1770834EE4800C94B91 /* JackError.h */; }; - 4B699D82097D421700A18468 /* JackConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B66A8580934964500A89560 /* JackConstants.h */; }; - 4B699D84097D421700A18468 /* JackMachSemaphore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF6C1D508ACE64C001E2013 /* JackMachSemaphore.cpp */; }; - 4B699D85097D421700A18468 /* JackFifo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B56880F08B5C8620022B32D /* JackFifo.cpp */; }; - 4B699D86097D421700A18468 /* JackPosixSemaphore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BEE0B2C08ACBB9F00D22B43 /* JackPosixSemaphore.cpp */; }; - 4B699D87097D421700A18468 /* JackMachThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BFB741E08AD2B9900DB99B8 /* JackMachThread.cpp */; }; - 4B699D88097D421700A18468 /* JackPosixThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BF8D1980834EE9700C94B91 /* JackPosixThread.cpp */; }; 4B699D89097D421700A18468 /* testSynchroServerClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BBD13CC08C71EB40079F7FF /* testSynchroServerClient.cpp */; }; - 4B699D8A097D421700A18468 /* JackError.c in Sources */ = {isa = PBXBuildFile; fileRef = 4B003A6008E2A87A0060EFDC /* JackError.c */; }; 4B699D99097D421700A18468 /* JackCoreAudioDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B395C9706AEF53800923527 /* JackCoreAudioDriver.h */; }; 4B699D9B097D421700A18468 /* JackCoreAudioDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B395C9606AEF53800923527 /* JackCoreAudioDriver.cpp */; }; 4B699DA8097D421700A18468 /* JackDummyDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BC3988A08B3CF6C00B6F371 /* JackDummyDriver.h */; }; @@ -522,10 +465,40 @@ 4B80D7EB0BA0D17400F035BB /* JackMidiPort.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B80D7E50BA0D17400F035BB /* JackMidiPort.h */; }; 4B80D7EC0BA0D17400F035BB /* JackMidiPort.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B80D7E60BA0D17400F035BB /* JackMidiPort.cpp */; }; 4B80D7ED0BA0D17400F035BB /* JackMidiAPI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B80D7E70BA0D17400F035BB /* JackMidiAPI.cpp */; }; + 4B95BCAC0D913064000F7695 /* JackControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B95BCAB0D913064000F7695 /* JackControl.cpp */; }; + 4B95BCAE0D913073000F7695 /* control.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B95BCAD0D913073000F7695 /* control.h */; settings = {ATTRIBUTES = (Public, ); }; }; 4B978DED0A31D099009E2DD1 /* JackPortAudioDriver.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B978DEB0A31D099009E2DD1 /* JackPortAudioDriver.h */; }; 4B978DEE0A31D099009E2DD1 /* JackPortAudioDriver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B978DEC0A31D099009E2DD1 /* JackPortAudioDriver.cpp */; }; + 4B9A25B40DBF8330006E9FBC /* JackError.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B9A25B30DBF8330006E9FBC /* JackError.cpp */; }; + 4B9A25B50DBF8330006E9FBC /* JackError.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B9A25B30DBF8330006E9FBC /* JackError.cpp */; }; + 4B9A25B60DBF8330006E9FBC /* JackError.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B9A25B30DBF8330006E9FBC /* JackError.cpp */; }; + 4B9A26010DBF8584006E9FBC /* jslist.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B9A26000DBF8584006E9FBC /* jslist.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4B9A26020DBF8584006E9FBC /* jslist.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B9A26000DBF8584006E9FBC /* jslist.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4B9A26040DBF8584006E9FBC /* jslist.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B9A26000DBF8584006E9FBC /* jslist.h */; settings = {ATTRIBUTES = (); }; }; + 4B9A26050DBF8584006E9FBC /* jslist.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B9A26000DBF8584006E9FBC /* jslist.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4B9A26060DBF8584006E9FBC /* jslist.h in Headers */ = {isa = PBXBuildFile; fileRef = 4B9A26000DBF8584006E9FBC /* jslist.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 4B9A26610DBF8ADD006E9FBC /* JackError.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B9A25B30DBF8330006E9FBC /* JackError.cpp */; }; + 4B9A26640DBF8B14006E9FBC /* JackError.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B9A25B30DBF8330006E9FBC /* JackError.cpp */; }; + 4B9A26680DBF8B23006E9FBC /* JackControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B95BCAB0D913064000F7695 /* JackControl.cpp */; }; + 4B9A26790DBF8B88006E9FBC /* JackError.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B9A25B30DBF8330006E9FBC /* JackError.cpp */; }; 4BA692B30CBE4C2D00EAD520 /* ipload.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BA692B20CBE4C2D00EAD520 /* ipload.c */; }; 4BA692D70CBE4CC600EAD520 /* ipunload.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BA692D60CBE4CC600EAD520 /* ipunload.c */; }; + 4BA7BDCC0DC22F4500AA3457 /* Jackservermp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BA7BDCB0DC22F4500AA3457 /* Jackservermp.framework */; }; + 4BA7BDCD0DC22F4500AA3457 /* Jackservermp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BA7BDCB0DC22F4500AA3457 /* Jackservermp.framework */; }; + 4BA7BDCE0DC22F4500AA3457 /* Jackservermp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BA7BDCB0DC22F4500AA3457 /* Jackservermp.framework */; }; + 4BA7BDCF0DC22F4500AA3457 /* Jackservermp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BA7BDCB0DC22F4500AA3457 /* Jackservermp.framework */; }; + 4BA7BDD00DC22F4500AA3457 /* Jackservermp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BA7BDCB0DC22F4500AA3457 /* Jackservermp.framework */; }; + 4BA7BDD10DC22F4500AA3457 /* Jackservermp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BA7BDCB0DC22F4500AA3457 /* Jackservermp.framework */; }; + 4BA7BDD20DC22F4500AA3457 /* Jackservermp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4BA7BDCB0DC22F4500AA3457 /* Jackservermp.framework */; }; + 4BA7BDDA0DC2300800AA3457 /* JackFifo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B56880F08B5C8620022B32D /* JackFifo.cpp */; }; + 4BA7BDDB0DC2300A00AA3457 /* JackPosixSemaphore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BEE0B2C08ACBB9F00D22B43 /* JackPosixSemaphore.cpp */; }; + 4BA7BE0F0DC232A400AA3457 /* Jackservermp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B35C4FC0D4731D1000DE7AE /* Jackservermp.framework */; }; + 4BA7BE1A0DC2347500AA3457 /* Jackservermp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B35C4FC0D4731D1000DE7AE /* Jackservermp.framework */; }; + 4BA7BE1C0DC2348600AA3457 /* JackFifo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4B56880F08B5C8620022B32D /* JackFifo.cpp */; }; + 4BA7BE1D0DC2348800AA3457 /* JackPosixSemaphore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BEE0B2C08ACBB9F00D22B43 /* JackPosixSemaphore.cpp */; }; + 4BA7BE200DC234FB00AA3457 /* Jackservermp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B35C4FC0D4731D1000DE7AE /* Jackservermp.framework */; }; + 4BA7BE240DC2350D00AA3457 /* Jackservermp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B35C4FC0D4731D1000DE7AE /* Jackservermp.framework */; }; + 4BA7BE270DC2352A00AA3457 /* Jackservermp.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B35C4FC0D4731D1000DE7AE /* Jackservermp.framework */; }; 4BA7FECA0D8E76650017FF73 /* control.c in Sources */ = {isa = PBXBuildFile; fileRef = 4BA7FEC80D8E76650017FF73 /* control.c */; }; 4BAB95B80B9E20B800A0C723 /* JackPortType.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4BAB95B60B9E20B800A0C723 /* JackPortType.cpp */; }; 4BAB95B90B9E20B800A0C723 /* JackPortType.h in Headers */ = {isa = PBXBuildFile; fileRef = 4BAB95B70B9E20B800A0C723 /* JackPortType.h */; }; @@ -969,8 +942,8 @@ /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ - 4B003A6008E2A87A0060EFDC /* JackError.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = JackError.c; path = ../common/JackError.c; sourceTree = SOURCE_ROOT; }; 4B003AB008E2B2BA0060EFDC /* ringbuffer.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = ringbuffer.c; path = ../common/ringbuffer.c; sourceTree = SOURCE_ROOT; }; + 4B02069D0DC0BAB400319AF1 /* JackProcessSync.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JackProcessSync.cpp; path = ../common/JackProcessSync.cpp; sourceTree = SOURCE_ROOT; }; 4B0A28E60D52073D002EFF74 /* jack_thread_wait */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_thread_wait; sourceTree = BUILT_PRODUCTS_DIR; }; 4B0A28EC0D520852002EFF74 /* tw.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = tw.c; path = "../example-clients/tw.c"; sourceTree = SOURCE_ROOT; }; 4B0A292D0D52108E002EFF74 /* jack_thread_wait */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_thread_wait; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -1015,6 +988,8 @@ 4B4259E5076B635E00C1ECE1 /* JackMacEngineRPC.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = JackMacEngineRPC.cpp; sourceTree = SOURCE_ROOT; }; 4B44FAE50C7598370033A72C /* JackServerLaunch.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackServerLaunch.cpp; path = ../common/JackServerLaunch.cpp; sourceTree = SOURCE_ROOT; }; 4B464301076CAC7700E5077C /* Jack-Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.xml; path = "Jack-Info.plist"; sourceTree = SOURCE_ROOT; }; + 4B4F9C8A0DC20C0400706CB0 /* JackMessageBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JackMessageBuffer.cpp; path = ../common/JackMessageBuffer.cpp; sourceTree = SOURCE_ROOT; }; + 4B4F9C8B0DC20C0400706CB0 /* JackMessageBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JackMessageBuffer.h; path = ../common/JackMessageBuffer.h; sourceTree = SOURCE_ROOT; }; 4B51752F0D8FE69300961F37 /* jack_thread_wait1 */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_thread_wait1; sourceTree = BUILT_PRODUCTS_DIR; }; 4B56880F08B5C8620022B32D /* JackFifo.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackFifo.cpp; path = ../common/JackFifo.cpp; sourceTree = SOURCE_ROOT; }; 4B56881008B5C8620022B32D /* JackFifo.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackFifo.h; path = ../common/JackFifo.h; sourceTree = SOURCE_ROOT; }; @@ -1059,11 +1034,12 @@ 4B80D7E70BA0D17400F035BB /* JackMidiAPI.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackMidiAPI.cpp; path = ../common/JackMidiAPI.cpp; sourceTree = SOURCE_ROOT; }; 4B869B3D08C8D21C001CF041 /* driver_interface.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = driver_interface.h; path = ../common/driver_interface.h; sourceTree = SOURCE_ROOT; }; 4B869B4208C8D22F001CF041 /* JackDriverLoader.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackDriverLoader.h; path = ../common/JackDriverLoader.h; sourceTree = SOURCE_ROOT; }; - 4B869B6408C8D76B001CF041 /* jslist.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = jslist.h; path = ../common/jslist.h; sourceTree = SOURCE_ROOT; }; 4B869D7F08C9CB00001CF041 /* JackDriverLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackDriverLoader.cpp; path = ../common/JackDriverLoader.cpp; sourceTree = SOURCE_ROOT; }; 4B89B759076B731100D170DE /* JackRPCClientUser.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = JackRPCClientUser.c; path = RPC/JackRPCClientUser.c; sourceTree = SOURCE_ROOT; }; 4B89B769076B74D200D170DE /* JackRPCEngineUser.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = JackRPCEngineUser.c; path = RPC/JackRPCEngineUser.c; sourceTree = SOURCE_ROOT; }; 4B940B9B06DDDE5B00D77F60 /* AudioHardware.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = AudioHardware.h; path = /System/Library/Frameworks/CoreAudio.framework/Versions/A/Headers/AudioHardware.h; sourceTree = ""; }; + 4B95BCAB0D913064000F7695 /* JackControl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JackControl.cpp; path = ../common/JackControl.cpp; sourceTree = SOURCE_ROOT; }; + 4B95BCAD0D913073000F7695 /* control.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = control.h; path = ../common/jack/control.h; sourceTree = SOURCE_ROOT; }; 4B97440C08AF54590094983C /* JackSocket.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackSocket.cpp; path = ../common/JackSocket.cpp; sourceTree = SOURCE_ROOT; }; 4B97440D08AF54590094983C /* JackSocket.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackSocket.h; path = ../common/JackSocket.h; sourceTree = SOURCE_ROOT; }; 4B97441408AF546F0094983C /* JackSocketClientChannel.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackSocketClientChannel.h; path = ../common/JackSocketClientChannel.h; sourceTree = SOURCE_ROOT; }; @@ -1079,6 +1055,8 @@ 4B978DEC0A31D099009E2DD1 /* JackPortAudioDriver.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackPortAudioDriver.cpp; path = ../windows/JackPortAudioDriver.cpp; sourceTree = SOURCE_ROOT; }; 4B98AE000931D30C0091932A /* JackDebugClient.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackDebugClient.cpp; path = ../common/JackDebugClient.cpp; sourceTree = SOURCE_ROOT; }; 4B98AE010931D30C0091932A /* JackDebugClient.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackDebugClient.h; path = ../common/JackDebugClient.h; sourceTree = SOURCE_ROOT; }; + 4B9A25B30DBF8330006E9FBC /* JackError.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = JackError.cpp; path = ../common/JackError.cpp; sourceTree = SOURCE_ROOT; }; + 4B9A26000DBF8584006E9FBC /* jslist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = jslist.h; path = ../common/jack/jslist.h; sourceTree = SOURCE_ROOT; }; 4B9B815C08AFA45000D05A28 /* JackRequest.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = JackRequest.h; path = ../common/JackRequest.h; sourceTree = SOURCE_ROOT; }; 4BA577BC08BF8BE200F82DE1 /* testSynchroClient.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = testSynchroClient.cpp; path = ../tests/testSynchroClient.cpp; sourceTree = SOURCE_ROOT; }; 4BA577FB08BF8E4600F82DE1 /* testSynchroServer.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = testSynchroServer.cpp; path = ../tests/testSynchroServer.cpp; sourceTree = SOURCE_ROOT; }; @@ -1086,6 +1064,7 @@ 4BA692B20CBE4C2D00EAD520 /* ipload.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = ipload.c; path = "../example-clients/ipload.c"; sourceTree = SOURCE_ROOT; }; 4BA692D40CBE4C9000EAD520 /* jack_unload */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_unload; sourceTree = BUILT_PRODUCTS_DIR; }; 4BA692D60CBE4CC600EAD520 /* ipunload.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = ipunload.c; path = "../example-clients/ipunload.c"; sourceTree = SOURCE_ROOT; }; + 4BA7BDCB0DC22F4500AA3457 /* Jackservermp.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Jackservermp.framework; path = build/Development/Jackservermp.framework; sourceTree = SOURCE_ROOT; }; 4BA7FEC30D8E76270017FF73 /* jack_server_control */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = jack_server_control; sourceTree = BUILT_PRODUCTS_DIR; }; 4BA7FEC80D8E76650017FF73 /* control.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = control.c; path = "../example-clients/control.c"; sourceTree = SOURCE_ROOT; }; 4BAB95B60B9E20B800A0C723 /* JackPortType.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = JackPortType.cpp; path = ../common/JackPortType.cpp; sourceTree = SOURCE_ROOT; }; @@ -1234,6 +1213,7 @@ buildActionMask = 2147483647; files = ( 4BCC87980D57168300A7FEB1 /* Accelerate.framework in Frameworks */, + 4BA7BDCC0DC22F4500AA3457 /* Jackservermp.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1242,6 +1222,7 @@ buildActionMask = 2147483647; files = ( 4BCC87990D57168300A7FEB1 /* Accelerate.framework in Frameworks */, + 4BA7BDCD0DC22F4500AA3457 /* Jackservermp.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1312,6 +1293,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 4BA7BE0F0DC232A400AA3457 /* Jackservermp.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1319,6 +1301,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 4BA7BE1A0DC2347500AA3457 /* Jackservermp.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1361,6 +1344,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 4BA7BE200DC234FB00AA3457 /* Jackservermp.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1368,6 +1352,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 4BA7BE240DC2350D00AA3457 /* Jackservermp.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1375,6 +1360,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 4BA7BE270DC2352A00AA3457 /* Jackservermp.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1503,6 +1489,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 4BA7BDCE0DC22F4500AA3457 /* Jackservermp.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1510,6 +1497,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 4BA7BDCF0DC22F4500AA3457 /* Jackservermp.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1524,6 +1512,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 4BA7BDD00DC22F4500AA3457 /* Jackservermp.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1531,6 +1520,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 4BA7BDD10DC22F4500AA3457 /* Jackservermp.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1538,6 +1528,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 4BA7BDD20DC22F4500AA3457 /* Jackservermp.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1617,6 +1608,7 @@ 0249A662FF388D9811CA2CEA /* External Frameworks and Libraries */ = { isa = PBXGroup; children = ( + 4BA7BDCB0DC22F4500AA3457 /* Jackservermp.framework */, 4BCC87950D57168300A7FEB1 /* Accelerate.framework */, ); name = "External Frameworks and Libraries"; @@ -1790,6 +1782,8 @@ 4B6C73780CC60A6D001AFFD4 /* jack */ = { isa = PBXGroup; children = ( + 4B9A26000DBF8584006E9FBC /* jslist.h */, + 4B95BCAD0D913073000F7695 /* control.h */, 4B6B9EF50CD0958B0051EE5A /* midiport.h */, 4B6C73790CC60A6D001AFFD4 /* intclient.h */, 4B6C737A0CC60A6D001AFFD4 /* jack.h */, @@ -1806,8 +1800,10 @@ 4B765CC805ECE17900571F78 /* Tools */ = { isa = PBXGroup; children = ( + 4B4F9C8A0DC20C0400706CB0 /* JackMessageBuffer.cpp */, + 4B4F9C8B0DC20C0400706CB0 /* JackMessageBuffer.h */, + 4B9A25B30DBF8330006E9FBC /* JackError.cpp */, 4B003AB008E2B2BA0060EFDC /* ringbuffer.c */, - 4B003A6008E2A87A0060EFDC /* JackError.c */, 4BF8D1770834EE4800C94B91 /* JackError.h */, 4BF8D1830834EE5800C94B91 /* JackTime.h */, 4BF773AA08B3414500149912 /* JackTime.c */, @@ -1820,6 +1816,7 @@ children = ( 4B6C73780CC60A6D001AFFD4 /* jack */, 4BE4CBFF0CDA153400CCF5BB /* JackTools.cpp */, + 4B95BCAB0D913064000F7695 /* JackControl.cpp */, 4BE4CC000CDA153400CCF5BB /* JackTools.h */, 4B66A8580934964500A89560 /* JackConstants.h */, 4BFB73F608AD291A00DB99B8 /* JackGlobals.h */, @@ -1867,6 +1864,7 @@ 4BA3874007947A46008D8992 /* Synchro */ = { isa = PBXGroup; children = ( + 4B02069D0DC0BAB400319AF1 /* JackProcessSync.cpp */, 4BF8D1A70834EEB400C94B91 /* JackActivationCount.h */, 4BF8D1A80834EEB400C94B91 /* JackActivationCount.cpp */, 4BD561C708EEB910006BBC2A /* JackSynchro.h */, @@ -1883,7 +1881,6 @@ 4BA550F605E241B800569492 /* Driver */ = { isa = PBXGroup; children = ( - 4B869B6408C8D76B001CF041 /* jslist.h */, 4B869B3D08C8D21C001CF041 /* driver_interface.h */, 4B869B4208C8D22F001CF041 /* JackDriverLoader.h */, 4B869D7F08C9CB00001CF041 /* JackDriverLoader.cpp */, @@ -2103,6 +2100,7 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( + 4B9A26040DBF8584006E9FBC /* jslist.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2149,6 +2147,8 @@ 4B35C4530D4731D1000DE7AE /* JackMidiPort.h in Headers */, 4B35C4540D4731D1000DE7AE /* midiport.h in Headers */, 4B35C4550D4731D1000DE7AE /* JackTools.h in Headers */, + 4B9A26050DBF8584006E9FBC /* jslist.h in Headers */, + 4B4F9C910DC20C0400706CB0 /* JackMessageBuffer.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2183,7 +2183,6 @@ 4B35C4A40D4731D1000DE7AE /* JackDriver.h in Headers */, 4B35C4A50D4731D1000DE7AE /* driver_interface.h in Headers */, 4B35C4A70D4731D1000DE7AE /* JackDriverLoader.h in Headers */, - 4B35C4A80D4731D1000DE7AE /* jslist.h in Headers */, 4B35C4A90D4731D1000DE7AE /* JackEngine.h in Headers */, 4B35C4AA0D4731D1000DE7AE /* JackExternalClient.h in Headers */, 4B35C4AB0D4731D1000DE7AE /* JackServer.h in Headers */, @@ -2207,6 +2206,8 @@ 4B35C4BF0D4731D1000DE7AE /* midiport.h in Headers */, 4B35C4C00D4731D1000DE7AE /* JackDebugClient.h in Headers */, 4B35C4C10D4731D1000DE7AE /* JackTools.h in Headers */, + 4B9A26060DBF8584006E9FBC /* jslist.h in Headers */, + 4B4F9C930DC20C0400706CB0 /* JackMessageBuffer.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2277,8 +2278,6 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 4B35C57A0D4731D2000DE7AE /* JackPosixThread.h in Headers */, - 4B35C57B0D4731D2000DE7AE /* JackError.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2286,8 +2285,6 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 4B35C58A0D4731D2000DE7AE /* JackError.h in Headers */, - 4B35C58B0D4731D2000DE7AE /* JackPosixThread.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2332,6 +2329,7 @@ files = ( 4B35C5DA0D4731D2000DE7AE /* JackError.h in Headers */, 4B35C5DB0D4731D2000DE7AE /* JackConstants.h in Headers */, + 4B4F9D830DC2178F00706CB0 /* JackMessageBuffer.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2339,8 +2337,6 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 4B35C5EE0D4731D2000DE7AE /* JackError.h in Headers */, - 4B35C5EF0D4731D2000DE7AE /* JackConstants.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2348,8 +2344,6 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 4B35C6020D4731D2000DE7AE /* JackError.h in Headers */, - 4B35C6030D4731D2000DE7AE /* JackConstants.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2462,6 +2456,8 @@ 4B80D7E80BA0D17400F035BB /* JackMidiPort.h in Headers */, 4B6B9EF60CD095930051EE5A /* midiport.h in Headers */, 4BE4CC020CDA153500CCF5BB /* JackTools.h in Headers */, + 4B9A26010DBF8584006E9FBC /* jslist.h in Headers */, + 4B4F9C8F0DC20C0400706CB0 /* JackMessageBuffer.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2496,7 +2492,6 @@ 4B699C6C097D421600A18468 /* JackDriver.h in Headers */, 4B699C6D097D421600A18468 /* driver_interface.h in Headers */, 4B699C6F097D421600A18468 /* JackDriverLoader.h in Headers */, - 4B699C70097D421600A18468 /* jslist.h in Headers */, 4B699C71097D421600A18468 /* JackEngine.h in Headers */, 4B699C73097D421600A18468 /* JackExternalClient.h in Headers */, 4B699C74097D421600A18468 /* JackServer.h in Headers */, @@ -2520,6 +2515,9 @@ 4B6B9EF70CD095970051EE5A /* midiport.h in Headers */, 4B5DB9840CD2429B00EBA5EE /* JackDebugClient.h in Headers */, 4BE4CC040CDA153500CCF5BB /* JackTools.h in Headers */, + 4B95BCAE0D913073000F7695 /* control.h in Headers */, + 4B9A26020DBF8584006E9FBC /* jslist.h in Headers */, + 4B4F9C8D0DC20C0400706CB0 /* JackMessageBuffer.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2569,8 +2567,6 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 4B699D15097D421600A18468 /* JackPosixThread.h in Headers */, - 4B699D16097D421600A18468 /* JackError.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2578,8 +2574,6 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 4B699D29097D421600A18468 /* JackError.h in Headers */, - 4B699D2A097D421600A18468 /* JackPosixThread.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2594,8 +2588,6 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 4B699D51097D421600A18468 /* JackError.h in Headers */, - 4B699D52097D421600A18468 /* JackConstants.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2603,8 +2595,6 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 4B699D69097D421600A18468 /* JackError.h in Headers */, - 4B699D6A097D421600A18468 /* JackConstants.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2612,8 +2602,6 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 4B699D81097D421700A18468 /* JackError.h in Headers */, - 4B699D82097D421700A18468 /* JackConstants.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4334,7 +4322,6 @@ 4B35C46D0D4731D1000DE7AE /* JackTime.c in Sources */, 4B35C46E0D4731D1000DE7AE /* JackGlobalsClient.cpp in Sources */, 4B35C4700D4731D1000DE7AE /* JackGlobals.cpp in Sources */, - 4B35C4710D4731D1000DE7AE /* JackError.c in Sources */, 4B35C4720D4731D1000DE7AE /* ringbuffer.c in Sources */, 4B35C4730D4731D1000DE7AE /* JackDebugClient.cpp in Sources */, 4B35C4740D4731D1000DE7AE /* JackTransportEngine.cpp in Sources */, @@ -4346,6 +4333,9 @@ 4B35C47A0D4731D1000DE7AE /* JackMidiAPI.cpp in Sources */, 4B35C47B0D4731D1000DE7AE /* JackEngineControl.cpp in Sources */, 4B35C47C0D4731D1000DE7AE /* JackTools.cpp in Sources */, + 4B9A26610DBF8ADD006E9FBC /* JackError.cpp in Sources */, + 4B0206A00DC0BAB400319AF1 /* JackProcessSync.cpp in Sources */, + 4B4F9C900DC20C0400706CB0 /* JackMessageBuffer.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4368,7 +4358,6 @@ 4B35C4D10D4731D1000DE7AE /* JackMachThread.cpp in Sources */, 4B35C4D30D4731D1000DE7AE /* JackTime.c in Sources */, 4B35C4D50D4731D1000DE7AE /* JackGlobals.cpp in Sources */, - 4B35C4D60D4731D1000DE7AE /* JackError.c in Sources */, 4B35C4D70D4731D1000DE7AE /* ringbuffer.c in Sources */, 4B35C4D80D4731D1000DE7AE /* JackAudioDriver.cpp in Sources */, 4B35C4D90D4731D1000DE7AE /* JackFreewheelDriver.cpp in Sources */, @@ -4397,6 +4386,10 @@ 4B35C4F30D4731D1000DE7AE /* JackEngineControl.cpp in Sources */, 4B35C4F40D4731D1000DE7AE /* JackDebugClient.cpp in Sources */, 4B35C4F50D4731D1000DE7AE /* JackTools.cpp in Sources */, + 4B9A26640DBF8B14006E9FBC /* JackError.cpp in Sources */, + 4B9A26680DBF8B23006E9FBC /* JackControl.cpp in Sources */, + 4B0206A10DC0BAB400319AF1 /* JackProcessSync.cpp in Sources */, + 4B4F9C920DC20C0400706CB0 /* JackMessageBuffer.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4477,8 +4470,6 @@ buildActionMask = 2147483647; files = ( 4B35C57D0D4731D2000DE7AE /* testAtomic.cpp in Sources */, - 4B35C57E0D4731D2000DE7AE /* JackPosixThread.cpp in Sources */, - 4B35C57F0D4731D2000DE7AE /* JackError.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4487,12 +4478,8 @@ buildActionMask = 2147483647; files = ( 4B35C58D0D4731D2000DE7AE /* testSem.cpp in Sources */, - 4B35C58E0D4731D2000DE7AE /* JackPosixThread.cpp in Sources */, - 4B35C58F0D4731D2000DE7AE /* JackFifo.cpp in Sources */, - 4B35C5900D4731D2000DE7AE /* JackPosixSemaphore.cpp in Sources */, - 4B35C5910D4731D2000DE7AE /* JackMachSemaphore.cpp in Sources */, - 4B35C5920D4731D2000DE7AE /* JackMachThread.cpp in Sources */, - 4B35C5930D4731D2000DE7AE /* JackError.c in Sources */, + 4BA7BE1C0DC2348600AA3457 /* JackFifo.cpp in Sources */, + 4BA7BE1D0DC2348800AA3457 /* JackPosixSemaphore.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4546,7 +4533,8 @@ 4B35C5E00D4731D2000DE7AE /* JackMachThread.cpp in Sources */, 4B35C5E10D4731D2000DE7AE /* JackPosixThread.cpp in Sources */, 4B35C5E20D4731D2000DE7AE /* testSynchroServer.cpp in Sources */, - 4B35C5E30D4731D2000DE7AE /* JackError.c in Sources */, + 4B9A26790DBF8B88006E9FBC /* JackError.cpp in Sources */, + 4B4F9D820DC2178E00706CB0 /* JackMessageBuffer.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4554,13 +4542,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 4B35C5F10D4731D2000DE7AE /* JackMachSemaphore.cpp in Sources */, - 4B35C5F20D4731D2000DE7AE /* JackFifo.cpp in Sources */, - 4B35C5F30D4731D2000DE7AE /* JackPosixSemaphore.cpp in Sources */, - 4B35C5F40D4731D2000DE7AE /* JackMachThread.cpp in Sources */, - 4B35C5F50D4731D2000DE7AE /* JackPosixThread.cpp in Sources */, 4B35C5F60D4731D2000DE7AE /* testSynchroClient.cpp in Sources */, - 4B35C5F70D4731D2000DE7AE /* JackError.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4568,13 +4550,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 4B35C6050D4731D2000DE7AE /* JackMachSemaphore.cpp in Sources */, - 4B35C6060D4731D2000DE7AE /* JackFifo.cpp in Sources */, - 4B35C6070D4731D2000DE7AE /* JackPosixSemaphore.cpp in Sources */, - 4B35C6080D4731D2000DE7AE /* JackMachThread.cpp in Sources */, - 4B35C6090D4731D2000DE7AE /* JackPosixThread.cpp in Sources */, 4B35C60A0D4731D2000DE7AE /* testSynchroServerClient.cpp in Sources */, - 4B35C60B0D4731D2000DE7AE /* JackError.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4647,6 +4623,7 @@ buildActionMask = 2147483647; files = ( 4B699BAA097D421600A18468 /* Jackdmp.cpp in Sources */, + 4B9A25B40DBF8330006E9FBC /* JackError.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4675,7 +4652,6 @@ 4B699C3A097D421600A18468 /* JackTime.c in Sources */, 4B699C3B097D421600A18468 /* JackGlobalsClient.cpp in Sources */, 4B699C3D097D421600A18468 /* JackGlobals.cpp in Sources */, - 4B699C3E097D421600A18468 /* JackError.c in Sources */, 4B699C3F097D421600A18468 /* ringbuffer.c in Sources */, 4B699C40097D421600A18468 /* JackDebugClient.cpp in Sources */, 4BD4B4E409BACEF300750C0F /* JackTransportEngine.cpp in Sources */, @@ -4687,6 +4663,9 @@ 4B80D7EA0BA0D17400F035BB /* JackMidiAPI.cpp in Sources */, 4B6F7AED0CD0CDBD00F48A9D /* JackEngineControl.cpp in Sources */, 4BE4CC010CDA153400CCF5BB /* JackTools.cpp in Sources */, + 4B9A25B50DBF8330006E9FBC /* JackError.cpp in Sources */, + 4B02069F0DC0BAB400319AF1 /* JackProcessSync.cpp in Sources */, + 4B4F9C8E0DC20C0400706CB0 /* JackMessageBuffer.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4709,7 +4688,6 @@ 4B699C8B097D421600A18468 /* JackMachThread.cpp in Sources */, 4B699C8D097D421600A18468 /* JackTime.c in Sources */, 4B699C8F097D421600A18468 /* JackGlobals.cpp in Sources */, - 4B699C90097D421600A18468 /* JackError.c in Sources */, 4B699C91097D421600A18468 /* ringbuffer.c in Sources */, 4B699C92097D421600A18468 /* JackAudioDriver.cpp in Sources */, 4B699C93097D421600A18468 /* JackFreewheelDriver.cpp in Sources */, @@ -4738,6 +4716,10 @@ 4B6F7AEE0CD0CDBD00F48A9D /* JackEngineControl.cpp in Sources */, 4B5DB9830CD2429A00EBA5EE /* JackDebugClient.cpp in Sources */, 4BE4CC030CDA153500CCF5BB /* JackTools.cpp in Sources */, + 4B95BCAC0D913064000F7695 /* JackControl.cpp in Sources */, + 4B9A25B60DBF8330006E9FBC /* JackError.cpp in Sources */, + 4B02069E0DC0BAB400319AF1 /* JackProcessSync.cpp in Sources */, + 4B4F9C8C0DC20C0400706CB0 /* JackMessageBuffer.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4794,8 +4776,6 @@ buildActionMask = 2147483647; files = ( 4B699D18097D421600A18468 /* testAtomic.cpp in Sources */, - 4B699D19097D421600A18468 /* JackPosixThread.cpp in Sources */, - 4B699D1A097D421600A18468 /* JackError.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4804,12 +4784,8 @@ buildActionMask = 2147483647; files = ( 4B699D2C097D421600A18468 /* testSem.cpp in Sources */, - 4B699D2D097D421600A18468 /* JackPosixThread.cpp in Sources */, - 4B699D2E097D421600A18468 /* JackFifo.cpp in Sources */, - 4B699D2F097D421600A18468 /* JackPosixSemaphore.cpp in Sources */, - 4B699D30097D421600A18468 /* JackMachSemaphore.cpp in Sources */, - 4B699D31097D421600A18468 /* JackMachThread.cpp in Sources */, - 4B699D32097D421600A18468 /* JackError.c in Sources */, + 4BA7BDDA0DC2300800AA3457 /* JackFifo.cpp in Sources */, + 4BA7BDDB0DC2300A00AA3457 /* JackPosixSemaphore.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4825,13 +4801,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 4B699D54097D421600A18468 /* JackMachSemaphore.cpp in Sources */, - 4B699D55097D421600A18468 /* JackFifo.cpp in Sources */, - 4B699D56097D421600A18468 /* JackPosixSemaphore.cpp in Sources */, - 4B699D57097D421600A18468 /* JackMachThread.cpp in Sources */, - 4B699D58097D421600A18468 /* JackPosixThread.cpp in Sources */, 4B699D59097D421600A18468 /* testSynchroServer.cpp in Sources */, - 4B699D5A097D421600A18468 /* JackError.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4839,13 +4809,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 4B699D6C097D421600A18468 /* JackMachSemaphore.cpp in Sources */, - 4B699D6D097D421600A18468 /* JackFifo.cpp in Sources */, - 4B699D6E097D421600A18468 /* JackPosixSemaphore.cpp in Sources */, - 4B699D6F097D421600A18468 /* JackMachThread.cpp in Sources */, - 4B699D70097D421600A18468 /* JackPosixThread.cpp in Sources */, 4B699D71097D421600A18468 /* testSynchroClient.cpp in Sources */, - 4B699D72097D421600A18468 /* JackError.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4853,13 +4817,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 4B699D84097D421700A18468 /* JackMachSemaphore.cpp in Sources */, - 4B699D85097D421700A18468 /* JackFifo.cpp in Sources */, - 4B699D86097D421700A18468 /* JackPosixSemaphore.cpp in Sources */, - 4B699D87097D421700A18468 /* JackMachThread.cpp in Sources */, - 4B699D88097D421700A18468 /* JackPosixThread.cpp in Sources */, 4B699D89097D421700A18468 /* testSynchroServerClient.cpp in Sources */, - 4B699D8A097D421700A18468 /* JackError.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -5790,6 +5748,11 @@ DEBUG_INFORMATION_FORMAT = dwarf; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Development\""; FRAMEWORK_VERSION = A; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; @@ -5850,6 +5813,11 @@ DEBUG_INFORMATION_FORMAT = dwarf; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Development\""; FRAMEWORK_VERSION = A; GCC_AUTO_VECTORIZATION = YES; GCC_ENABLE_FIX_AND_CONTINUE = NO; @@ -5909,6 +5877,11 @@ DEBUG_INFORMATION_FORMAT = dwarf; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Development\""; FRAMEWORK_VERSION = A; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h"; @@ -5965,6 +5938,11 @@ DEBUG_INFORMATION_FORMAT = dwarf; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Development\""; FRAMEWORK_VERSION = A; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; @@ -6023,6 +6001,11 @@ DEBUG_INFORMATION_FORMAT = dwarf; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Development\""; FRAMEWORK_VERSION = A; GCC_AUTO_VECTORIZATION = YES; GCC_ENABLE_FIX_AND_CONTINUE = NO; @@ -6083,6 +6066,11 @@ DEBUG_INFORMATION_FORMAT = dwarf; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Development\""; FRAMEWORK_VERSION = A; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h"; @@ -10160,6 +10148,11 @@ ppc, ); COPY_PHASE_STRIP = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Development\""; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; @@ -10196,6 +10189,11 @@ ppc, ); COPY_PHASE_STRIP = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Development\""; GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_OPTIMIZATION_LEVEL = 0; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -10230,6 +10228,11 @@ i386, ppc, ); + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Development\""; GCC_OPTIMIZATION_LEVEL = 0; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "$(SYSTEM_LIBRARY_DIR)/Frameworks/Carbon.framework/Headers/Carbon.h"; @@ -10262,6 +10265,11 @@ ppc, ); COPY_PHASE_STRIP = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Development\""; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; @@ -10293,6 +10301,11 @@ ppc, ); COPY_PHASE_STRIP = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Development\""; GCC_ENABLE_FIX_AND_CONTINUE = NO; GCC_OPTIMIZATION_LEVEL = 3; MACOSX_DEPLOYMENT_TARGET = 10.4; @@ -10322,6 +10335,11 @@ i386, ppc, ); + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Development\""; GCC_OPTIMIZATION_LEVEL = 3; OTHER_CFLAGS = ""; OTHER_LDFLAGS = ( @@ -10442,6 +10460,11 @@ ppc, ); COPY_PHASE_STRIP = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Development\""; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; @@ -10477,6 +10500,11 @@ ppc, ); COPY_PHASE_STRIP = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Development\""; GCC_ENABLE_FIX_AND_CONTINUE = NO; MACOSX_DEPLOYMENT_TARGET = 10.4; OTHER_CFLAGS = ""; @@ -10509,6 +10537,11 @@ i386, ppc, ); + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Development\""; OTHER_CFLAGS = ""; OTHER_LDFLAGS = ( "-framework", @@ -10541,6 +10574,11 @@ ppc, ); COPY_PHASE_STRIP = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Development\""; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; @@ -10576,6 +10614,11 @@ ppc, ); COPY_PHASE_STRIP = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Development\""; GCC_ENABLE_FIX_AND_CONTINUE = NO; MACOSX_DEPLOYMENT_TARGET = 10.4; OTHER_CFLAGS = ""; @@ -10608,6 +10651,11 @@ i386, ppc, ); + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Development\""; OTHER_CFLAGS = ""; OTHER_LDFLAGS = ( "-framework", @@ -10640,6 +10688,11 @@ ppc, ); COPY_PHASE_STRIP = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Development\""; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_FIX_AND_CONTINUE = YES; GCC_GENERATE_DEBUGGING_SYMBOLS = YES; @@ -10675,6 +10728,11 @@ ppc, ); COPY_PHASE_STRIP = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Development\""; GCC_ENABLE_FIX_AND_CONTINUE = NO; MACOSX_DEPLOYMENT_TARGET = 10.4; OTHER_CFLAGS = ""; @@ -10707,6 +10765,11 @@ i386, ppc, ); + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/build/Development\""; OTHER_CFLAGS = ""; OTHER_LDFLAGS = ( "-framework", diff --git a/tests/SConscript b/tests/SConscript index 67321ace..a80f5895 100644 --- a/tests/SConscript +++ b/tests/SConscript @@ -33,38 +33,27 @@ env.AppendUnique(CPPPATH=['#/', '#/common']) test_programs = { 'synchroClient': [ - 'testSynchroClient.cpp', - '#/common/JackPosixSemaphore.cpp', - '#/common/JackPosixThread.cpp', - '#/common/JackError.c', - '#/common/JackFifo.cpp' + 'testSynchroClient.cpp' ], 'synchroServer': [ - 'testSynchroServer.cpp', - '#/common/JackPosixSemaphore.cpp', - '#/common/JackPosixThread.cpp', - '#/common/JackError.c', - '#/common/JackFifo.cpp' + 'testSynchroServer.cpp' ], 'synchroServerClient': [ - 'testSynchroServerClient.cpp', - '#/common/JackPosixSemaphore.cpp', - '#/common/JackPosixThread.cpp', - '#/common/JackError.c', - '#/common/JackFifo.cpp' - ], + 'testSynchroServerClient.cpp' + ], 'testSem': [ - 'testSem.cpp', - '#/common/JackPosixSemaphore.cpp', - '#/common/JackPosixThread.cpp', - '#/common/JackError.c', - '#/common/JackFifo.cpp' + 'testSem.cpp' ], 'jack_test': [ 'jack_test.cpp' ], } +# Libraries to link +extra_libs = {} +for test_program in test_programs: + extra_libs[test_program] = ['jackserver'] + # # Build section # diff --git a/tests/testSem.cpp b/tests/testSem.cpp index bfed3928..3ef24fc7 100644 --- a/tests/testSem.cpp +++ b/tests/testSem.cpp @@ -20,6 +20,7 @@ #include #include #include +#include #ifdef __APPLE__ #include "JackMachSemaphore.h" diff --git a/windows/JackPortAudioDriver.cpp b/windows/JackPortAudioDriver.cpp index f6866c3b..40f82f9a 100644 --- a/windows/JackPortAudioDriver.cpp +++ b/windows/JackPortAudioDriver.cpp @@ -221,6 +221,8 @@ int JackPortAudioDriver::Render(const void* inputBuffer, void* outputBuffer, driver->fLastWaitUst = GetMicroSeconds(); // Take callback date here driver->fInputBuffer = (float**)inputBuffer; driver->fOutputBuffer = (float**)outputBuffer; + // Setup threadded based log function + set_threaded_log_function(); return (driver->Process() == 0) ? paContinue : paAbort; } diff --git a/windows/JackWinProcessSync.h b/windows/JackWinProcessSync.h index 1d1b8481..4570cf1f 100644 --- a/windows/JackWinProcessSync.h +++ b/windows/JackWinProcessSync.h @@ -62,17 +62,10 @@ class JackWinProcessSync : public JackSyncInterface void Destroy() {} - bool TimedWait(long usec) - { - DWORD res = WaitForSingleObject(fEvent, usec / 1000); - return (res == WAIT_OBJECT_0); - } - - void Wait() - { - WaitForSingleObject(fEvent, INFINITE); - } - + bool TimedWait(long usec); + + void Wait(); + void SignalAll() { SetEvent(fEvent); diff --git a/windows/JackdmpWIN32.cpp b/windows/JackdmpWIN32.cpp deleted file mode 100644 index c2829f8f..00000000 --- a/windows/JackdmpWIN32.cpp +++ /dev/null @@ -1,485 +0,0 @@ -/* -Copyright (C) 2001 Paul Davis -Copyright (C) 2004-2006 Grame - -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 -(at your option) 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. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -*/ - -#include -#include -#include -#include -#include - -#include "JackServer.h" -#include "JackConstants.h" -#include "driver_interface.h" -#include "JackDriverLoader.h" -#include "shm.h" - -using namespace Jack; - -static JackServer* fServer; -static char *server_name = "default"; -static int realtime_priority = 10; -static int do_mlock = 1; -static int realtime = 0; -static int loopback = 0; -static int temporary = 0; -static int client_timeout = 0; /* msecs; if zero, use period size. */ -static int do_unlock = 0; -static JSList* drivers = NULL; -static int sync = 0; -static int xverbose = 0; - -#define DEFAULT_TMP_DIR "/tmp" -char *jack_tmpdir = DEFAULT_TMP_DIR; - -HANDLE waitEvent; - -void jack_print_driver_options (jack_driver_desc_t * desc, FILE *file); -void jack_print_driver_param_usage (jack_driver_desc_t * desc, unsigned long param, FILE *file); -int jack_parse_driver_params (jack_driver_desc_t * desc, int argc, char* argv[], JSList ** param_ptr); -static void silent_jack_error_callback (const char *desc) -{} - -static void copyright(FILE* file) -{ - fprintf (file, "jackdmp " VERSION "\n" - "Copyright 2001-2005 Paul Davis and others.\n" - "Copyright 2004-2008 Grame.\n" - "jackdmp comes with ABSOLUTELY NO WARRANTY\n" - "This is free software, and you are welcome to redistribute it\n" - "under certain conditions; see the file COPYING for details\n"); -} - -static void usage (FILE *file) -{ - copyright (file); - fprintf (file, "\n" - "usage: jackdmp [ --realtime OR -R [ --realtime-priority OR -P priority ] ]\n" - " [ --name OR -n server-name ]\n" - " [ --timeout OR -t client-timeout-in-msecs ]\n" - " [ --loopback OR -L loopback-port-number ]\n" - " [ --verbose OR -v ]\n" - " [ --replace-registry OR -r ]\n" - " [ --silent OR -s ]\n" - " [ --sync OR -S ]\n" - " [ --version OR -V ]\n" - " -d driver [ ... driver args ... ]\n" - " where driver can be `alsa', `coreaudio', 'portaudio' or `dummy'\n" - " jackdmp -d driver --help\n" - " to display options for each driver\n\n"); -} - -static int JackStart(jack_driver_desc_t* driver_desc, JSList* driver_params, int sync, int time_out_ms, int rt, int priority, int loopback, int verbose, const char* server_name) -{ - printf("Jackdmp: sync = %ld timeout = %ld rt = %ld priority = %ld verbose = %ld \n", sync, time_out_ms, rt, priority, verbose); - fServer = new JackServer(sync, temporary, time_out_ms, rt, priority, loopback, verbose, server_name); - int res = fServer->Open(driver_desc, driver_params); - return (res < 0) ? res : fServer->Start(); -} - -static int JackStop() -{ - fServer->Stop(); - fServer->Close(); - printf("Jackdmp: server close\n"); - delete fServer; - printf("Jackdmp: delete server\n"); - return 0; -} - -static int JackDelete() -{ - delete fServer; - printf("Jackdmp: delete server\n"); - return 0; -} - -static void intrpt(int signum) -{ - printf("jack main caught signal %d\n", signum); - (void) signal(SIGINT, SIG_DFL); - SetEvent(waitEvent); -} - -/* -static char* jack_default_server_name(void) -{ - char *server_name; - if ((server_name = getenv("JACK_DEFAULT_SERVER")) == NULL) - server_name = "default"; - return server_name; -} - -// returns the name of the per-user subdirectory of jack_tmpdir -static char* jack_user_dir(void) -{ - static char user_dir[PATH_MAX] = ""; - - // format the path name on the first call - if (user_dir[0] == '\0') { - snprintf (user_dir, sizeof (user_dir), "%s/jack-%d", - jack_tmpdir, _getuid ()); - } - - return user_dir; -} - -// returns the name of the per-server subdirectory of jack_user_dir() - -static char* get_jack_server_dir(const char * toto) -{ - static char server_dir[PATH_MAX] = ""; - - // format the path name on the first call - if (server_dir[0] == '\0') { - snprintf (server_dir, sizeof (server_dir), "%s/%s", - jack_user_dir (), server_name); - } - - return server_dir; -} - -static void jack_cleanup_files (const char *server_name) -{ - DIR *dir; - struct dirent *dirent; - char *dir_name = get_jack_server_dir (server_name); - - // nothing to do if the server directory does not exist - if ((dir = opendir (dir_name)) == NULL) { - return; - } - - // unlink all the files in this directory, they are mine - while ((dirent = readdir (dir)) != NULL) { - - char fullpath[PATH_MAX]; - - if ((strcmp (dirent->d_name, ".") == 0) - || (strcmp (dirent->d_name, "..") == 0)) { - continue; - } - - snprintf (fullpath, sizeof (fullpath), "%s/%s", - dir_name, dirent->d_name); - - if (unlink (fullpath)) { - jack_error ("cannot unlink `%s' (%s)", fullpath, - strerror (errno)); - } - } - - closedir (dir); - - // now, delete the per-server subdirectory, itself - if (rmdir (dir_name)) { - jack_error ("cannot remove `%s' (%s)", dir_name, - strerror (errno)); - } - - // finally, delete the per-user subdirectory, if empty - if (rmdir (jack_user_dir ())) { - if (errno != ENOTEMPTY) { - jack_error ("cannot remove `%s' (%s)", - jack_user_dir (), strerror (errno)); - } - } -} -*/ - -/* -BOOL CtrlHandler( DWORD fdwCtrlType ) -{ - switch( fdwCtrlType ) - { - // Handle the CTRL-C signal. - case CTRL_C_EVENT: - printf( "Ctrl-C event\n\n" ); - Beep( 750, 300 ); - SetEvent(waitEvent); - return( TRUE ); - - // CTRL-CLOSE: confirm that the user wants to exit. - case CTRL_CLOSE_EVENT: - Beep( 600, 200 ); - printf( "Ctrl-Close event\n\n" ); - SetEvent(waitEvent); - return( TRUE ); - - // Pass other signals to the next handler. - case CTRL_BREAK_EVENT: - Beep( 900, 200 ); - printf( "Ctrl-Break event\n\n" ); - return FALSE; - - case CTRL_LOGOFF_EVENT: - Beep( 1000, 200 ); - printf( "Ctrl-Logoff event\n\n" ); - return FALSE; - - case CTRL_SHUTDOWN_EVENT: - Beep( 750, 500 ); - printf( "Ctrl-Shutdown event\n\n" ); - return FALSE; - - default: - return FALSE; - } -} - -*/ - -int main(int argc, char* argv[]) -{ - jack_driver_desc_t * driver_desc; - const char *options = "-ad:P:uvshVRL:STFl:t:mn:"; - struct option long_options[] = { - { "driver", 1, 0, 'd'}, - { "verbose", 0, 0, 'v' }, - { "help", 0, 0, 'h' }, - { "port-max", 1, 0, 'p' }, - { "no-mlock", 0, 0, 'm' }, - { "name", 0, 0, 'n' }, - { "unlock", 0, 0, 'u' }, - { "realtime", 0, 0, 'R' }, - { "replace-registry", 0, 0, 'r' }, - { "loopback", 0, 0, 'L' }, - { "realtime-priority", 1, 0, 'P' }, - { "timeout", 1, 0, 't' }, - { "temporary", 0, 0, 'T' }, - { "version", 0, 0, 'V' }, - { "silent", 0, 0, 's' }, - { "sync", 0, 0, 'S' }, - { 0, 0, 0, 0 } - }; - int opt = 0; - int option_index = 0; - int seen_driver = 0; - char *driver_name = NULL; - char **driver_args = NULL; - JSList * driver_params; - int driver_nargs = 1; - int show_version = 0; - int replace_registry = 0; - int sync = 0; - int i; - int rc; - char c; - - // Creates wait event - if ((waitEvent = CreateEvent(NULL, FALSE, FALSE, NULL)) == NULL) { - printf("CreateEvent fails err = %ld\n", GetLastError()); - return 0; - } - - opterr = 0; - while (!seen_driver && - (opt = getopt_long(argc, argv, options, - long_options, &option_index)) != EOF) { - switch (opt) { - - case 'd': - seen_driver = 1; - driver_name = optarg; - break; - - case 'v': - xverbose = 1; - break; - - case 's': - // steph - //jack_set_error_function(silent_jack_error_callback); - break; - - case 'S': - sync = 1; - break; - - case 'n': - server_name = optarg; - break; - - case 'm': - do_mlock = 0; - break; - - case 'P': - realtime_priority = atoi(optarg); - break; - - case 'r': - replace_registry = 1; - break; - - case 'R': - realtime = 1; - break; - - case 'L': - loopback = atoi(optarg); - break; - - case 'T': - temporary = 1; - break; - - case 't': - client_timeout = atoi(optarg); - break; - - case 'u': - do_unlock = 1; - break; - - case 'V': - show_version = 1; - break; - - default: - fprintf(stderr, "unknown option character %c\n", - optopt); - /*fallthru*/ - case 'h': - usage(stdout); - return -1; - } - } - - if (!seen_driver) { - usage (stderr); - //exit (1); - return 0; - } - - drivers = jack_drivers_load (drivers); - if (!drivers) { - fprintf (stderr, "jackdmp: no drivers found; exiting\n"); - //exit (1); - return 0; - } - - driver_desc = jack_find_driver_descriptor (drivers, driver_name); - if (!driver_desc) { - fprintf (stderr, "jackdmp: unknown driver '%s'\n", driver_name); - //exit (1); - return 0; - } - - if (optind < argc) { - driver_nargs = 1 + argc - optind; - } else { - driver_nargs = 1; - } - - if (driver_nargs == 0) { - fprintf (stderr, "No driver specified ... hmm. JACK won't do" - " anything when run like this.\n"); - return -1; - } - - driver_args = (char **) malloc (sizeof (char *) * driver_nargs); - driver_args[0] = driver_name; - - for (i = 1; i < driver_nargs; i++) { - driver_args[i] = argv[optind++]; - } - - if (jack_parse_driver_params (driver_desc, driver_nargs, - driver_args, &driver_params)) { - // exit (0); - return 0; - } - - //if (server_name == NULL) - // server_name = jack_default_server_name (); - - copyright (stdout); - - rc = jack_register_server (server_name, replace_registry); - switch (rc) { - case EEXIST: - fprintf (stderr, "`%s' server already active\n", server_name); - //exit (1); - return 0; - case ENOSPC: - fprintf (stderr, "too many servers already active\n"); - //exit (2); - return 0; - case ENOMEM: - fprintf (stderr, "no access to shm registry\n"); - //exit (3); - return 0; - default: - if (xverbose) - fprintf (stderr, "server `%s' registered\n", - server_name); - } - - - /* clean up shared memory and files from any previous - * instance of this server name */ - jack_cleanup_shm(); - // jack_cleanup_files(server_name); - - if (!realtime && client_timeout == 0) - client_timeout = 500; /* 0.5 sec; usable when non realtime. */ - - int res = JackStart(driver_desc, driver_params, sync, client_timeout, realtime, realtime_priority, loopback, xverbose, server_name); - if (res < 0) { - printf("Cannot start server... exit\n"); - JackDelete(); - return 0; - } - - /* - if( SetConsoleCtrlHandler( (PHANDLER_ROUTINE) CtrlHandler, TRUE ) ) - { - printf( "\nThe Control Handler is installed.\n" ); - } else { - printf( "\nERROR: Could not set control handler"); - } - */ - - - (void) signal(SIGINT, intrpt); - (void) signal(SIGABRT, intrpt); - (void) signal(SIGTERM, intrpt); - - if ((res = WaitForSingleObject(waitEvent, INFINITE)) != WAIT_OBJECT_0) { - printf("WaitForSingleObject fails err = %ld\n", GetLastError()); - } - - /* - printf("Type 'q' to quit\n"); - while ((c = getchar()) != 'q') {} - */ - - - JackStop(); - - jack_cleanup_shm(); - // jack_cleanup_files(server_name); - jack_unregister_server(server_name); - - CloseHandle(waitEvent); - return 1; -} - - diff --git a/windows/jack_connect.dsp b/windows/jack_connect.dsp index 4ffec968..8a72071f 100644 --- a/windows/jack_connect.dsp +++ b/windows/jack_connect.dsp @@ -65,7 +65,7 @@ LINK32=link.exe # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "." /I "../common/" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c +# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "." /I "../common/" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /GZ /c # ADD BASE RSC /l 0x40c /d "_DEBUG" # ADD RSC /l 0x40c /d "_DEBUG" BSC32=bscmake.exe diff --git a/windows/jack_freeverb.dsp b/windows/jack_freeverb.dsp index 5ed215d0..77022eb0 100644 --- a/windows/jack_freeverb.dsp +++ b/windows/jack_freeverb.dsp @@ -41,7 +41,7 @@ RSC=rc.exe # PROP Intermediate_Dir "Release" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../common/" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /MD /W3 /GX /O2 /I "." /I "../common/" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /FR /YX /FD /c # ADD BASE RSC /l 0x40c /d "NDEBUG" # ADD RSC /l 0x40c /d "NDEBUG" BSC32=bscmake.exe diff --git a/windows/jackdmp.dsp b/windows/jackdmp.dsp index c8b0b81b..444ea1d3 100644 --- a/windows/jackdmp.dsp +++ b/windows/jackdmp.dsp @@ -95,7 +95,7 @@ SOURCE=.\getopt1.c # End Source File # Begin Source File -SOURCE=.\JackdmpWIN32.cpp +SOURCE=..\common\Jackdmp.cpp # End Source File # End Group # Begin Group "Header Files" diff --git a/windows/libjackmp.dsp b/windows/libjackmp.dsp index 3b12d51a..59fb2baa 100644 --- a/windows/libjackmp.dsp +++ b/windows/libjackmp.dsp @@ -115,7 +115,7 @@ SOURCE=..\common\JackEngineControl.cpp # End Source File # Begin Source File -SOURCE=..\common\JackError.c +SOURCE=..\common\JackError.cpp # End Source File # Begin Source File @@ -143,6 +143,10 @@ SOURCE=..\common\JackLibClient.cpp # End Source File # Begin Source File +SOURCE=..\common\JackMessageBuffer.cpp +# End Source File +# Begin Source File + SOURCE=..\common\JackMidiAPI.cpp # End Source File # Begin Source File @@ -183,6 +187,10 @@ SOURCE=.\JackWinNamedPipeClientChannel.cpp # End Source File # Begin Source File +SOURCE=.\JackWinProcessSync.cpp +# End Source File +# Begin Source File + SOURCE=.\JackWinSemaphore.cpp # End Source File # Begin Source File diff --git a/windows/libjackservermp.dsp b/windows/libjackservermp.dsp index 0106b7b6..90866ba8 100644 --- a/windows/libjackservermp.dsp +++ b/windows/libjackservermp.dsp @@ -124,6 +124,10 @@ SOURCE=..\common\JackConnectionManager.cpp # End Source File # Begin Source File +SOURCE=..\common\JackControl.cpp +# End Source File +# Begin Source File + SOURCE=..\common\JackDriver.cpp # End Source File # Begin Source File @@ -140,7 +144,7 @@ SOURCE=..\common\JackEngineControl.cpp # End Source File # Begin Source File -SOURCE=..\common\JackError.c +SOURCE=..\common\JackError.cpp # End Source File # Begin Source File @@ -176,6 +180,10 @@ SOURCE=..\common\JackLoopbackDriver.cpp # End Source File # Begin Source File +SOURCE=..\common\JackMessageBuffer.cpp +# End Source File +# Begin Source File + SOURCE=..\common\JackMidiAPI.cpp # End Source File # Begin Source File @@ -244,6 +252,10 @@ SOURCE=.\JackWinNamedPipeServerNotifyChannel.cpp # End Source File # Begin Source File +SOURCE=.\JackWinProcessSync.cpp +# End Source File +# Begin Source File + SOURCE=.\JackWinSemaphore.cpp # End Source File # Begin Source File