aboutsummaryrefslogtreecommitdiff
path: root/pd/portmidi/pm_mac
diff options
context:
space:
mode:
Diffstat (limited to 'pd/portmidi/pm_mac')
-rw-r--r--pd/portmidi/pm_mac/pm_mac.pbproj/project.pbxproj1324
-rw-r--r--pd/portmidi/pm_mac/pm_mac.pbproj/rbd.pbxuser1508
-rw-r--r--pd/portmidi/pm_mac/pm_test.pbproj/project.pbxproj337
-rw-r--r--pd/portmidi/pm_mac/pmmac.c42
-rw-r--r--pd/portmidi/pm_mac/pmmac.h4
-rw-r--r--pd/portmidi/pm_mac/pmmacosxcm.c701
-rw-r--r--pd/portmidi/pm_mac/pmmacosxcm.h4
7 files changed, 3920 insertions, 0 deletions
diff --git a/pd/portmidi/pm_mac/pm_mac.pbproj/project.pbxproj b/pd/portmidi/pm_mac/pm_mac.pbproj/project.pbxproj
new file mode 100644
index 00000000..f35008ed
--- /dev/null
+++ b/pd/portmidi/pm_mac/pm_mac.pbproj/project.pbxproj
@@ -0,0 +1,1324 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 38;
+ objects = {
+ 3D9CFCAA067657D50002CE69 = {
+ buildActionMask = 2147483647;
+ files = (
+ );
+ isa = PBXHeadersBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 3D9CFCAB067657D50002CE69 = {
+ buildActionMask = 2147483647;
+ files = (
+ );
+ isa = PBXResourcesBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 3D9CFCAC067657D50002CE69 = {
+ buildActionMask = 2147483647;
+ files = (
+ 3D9CFCB8067657FA0002CE69,
+ );
+ isa = PBXSourcesBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 3D9CFCAD067657D50002CE69 = {
+ buildActionMask = 2147483647;
+ files = (
+ 3D9CFCBA067658A90002CE69,
+ 3D9CFCBB067658AA0002CE69,
+ 3D9CFCBC067658AA0002CE69,
+ 3D9CFCBD067659FE0002CE69,
+ );
+ isa = PBXFrameworksBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 3D9CFCAE067657D50002CE69 = {
+ buildActionMask = 2147483647;
+ files = (
+ );
+ isa = PBXRezBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 3D9CFCAF067657D50002CE69 = {
+ buildPhases = (
+ 3D9CFCAA067657D50002CE69,
+ 3D9CFCAB067657D50002CE69,
+ 3D9CFCAC067657D50002CE69,
+ 3D9CFCAD067657D50002CE69,
+ 3D9CFCAE067657D50002CE69,
+ );
+ buildSettings = {
+ OPTIMIZATION_CFLAGS = "";
+ OTHER_CFLAGS = "";
+ OTHER_LDFLAGS = "";
+ OTHER_REZFLAGS = "";
+ PRODUCT_NAME = latency;
+ SECTORDER_FLAGS = "";
+ WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas";
+ WRAPPER_EXTENSION = app;
+ };
+ comments = "a test program to measure OS latency";
+ dependencies = (
+ );
+ isa = PBXApplicationTarget;
+ name = latency;
+ productInstallPath = "$(USER_APPS_DIR)";
+ productName = latency;
+ productReference = 3D9CFCB0067657D50002CE69;
+ productSettingsXML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
+<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">
+<plist version=\"1.0\">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>English</string>
+ <key>CFBundleExecutable</key>
+ <string></string>
+ <key>CFBundleGetInfoString</key>
+ <string></string>
+ <key>CFBundleIconFile</key>
+ <string></string>
+ <key>CFBundleIdentifier</key>
+ <string></string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string></string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleShortVersionString</key>
+ <string></string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>0.0.1d1</string>
+</dict>
+</plist>
+";
+ };
+ 3D9CFCB0067657D50002CE69 = {
+ isa = PBXApplicationReference;
+ path = latency.app;
+ refType = 3;
+ };
+ 3D9CFCB8067657FA0002CE69 = {
+ fileRef = 3DA774110663E9DA0002CE69;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 3D9CFCBA067658A90002CE69 = {
+ fileRef = 3DA774480663EAE60002CE69;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 3D9CFCBB067658AA0002CE69 = {
+ fileRef = 3DA7744E0663EBB20002CE69;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 3D9CFCBC067658AA0002CE69 = {
+ fileRef = 3DA774500663EBBF0002CE69;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 3D9CFCBD067659FE0002CE69 = {
+ fileRef = 5851D5380479562300EE98CD;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 3DA712AE0664C7C50002CE69 = {
+ buildActionMask = 2147483647;
+ files = (
+ );
+ isa = PBXHeadersBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 3DA712AF0664C7C50002CE69 = {
+ buildActionMask = 2147483647;
+ files = (
+ );
+ isa = PBXResourcesBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 3DA712B00664C7C50002CE69 = {
+ buildActionMask = 2147483647;
+ files = (
+ 3DA712B90664C8490002CE69,
+ );
+ isa = PBXSourcesBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 3DA712B10664C7C50002CE69 = {
+ buildActionMask = 2147483647;
+ files = (
+ 3DA712B60664C8400002CE69,
+ 3DA712B70664C8400002CE69,
+ 3DA712B80664C8410002CE69,
+ 3DA712BA0664C8A40002CE69,
+ );
+ isa = PBXFrameworksBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 3DA712B20664C7C50002CE69 = {
+ buildActionMask = 2147483647;
+ files = (
+ );
+ isa = PBXRezBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 3DA712B30664C7C50002CE69 = {
+ buildPhases = (
+ 3DA712AE0664C7C50002CE69,
+ 3DA712AF0664C7C50002CE69,
+ 3DA712B00664C7C50002CE69,
+ 3DA712B10664C7C50002CE69,
+ 3DA712B20664C7C50002CE69,
+ );
+ buildSettings = {
+ OTHER_CFLAGS = "";
+ OTHER_LDFLAGS = "";
+ OTHER_REZFLAGS = "";
+ PRODUCT_NAME = midithread;
+ SECTORDER_FLAGS = "";
+ WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas";
+ WRAPPER_EXTENSION = app;
+ };
+ comments = "Demonstrates the use of a low-latency thread for midi processing";
+ dependencies = (
+ );
+ isa = PBXApplicationTarget;
+ name = midithread;
+ productInstallPath = "$(USER_APPS_DIR)";
+ productName = midithread;
+ productReference = 3DA712B40664C7C50002CE69;
+ productSettingsXML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
+<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">
+<plist version=\"1.0\">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>English</string>
+ <key>CFBundleExecutable</key>
+ <string></string>
+ <key>CFBundleGetInfoString</key>
+ <string></string>
+ <key>CFBundleIconFile</key>
+ <string></string>
+ <key>CFBundleIdentifier</key>
+ <string></string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string></string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleShortVersionString</key>
+ <string></string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>0.0.1d1</string>
+</dict>
+</plist>
+";
+ };
+ 3DA712B40664C7C50002CE69 = {
+ isa = PBXApplicationReference;
+ path = midithread.app;
+ refType = 3;
+ };
+ 3DA712B60664C8400002CE69 = {
+ fileRef = 3DA774480663EAE60002CE69;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 3DA712B70664C8400002CE69 = {
+ fileRef = 3DA7744E0663EBB20002CE69;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 3DA712B80664C8410002CE69 = {
+ fileRef = 3DA774500663EBBF0002CE69;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 3DA712B90664C8490002CE69 = {
+ fileRef = 3DA774160663E9DA0002CE69;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 3DA712BA0664C8A40002CE69 = {
+ fileRef = 5851D5380479562300EE98CD;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 3DA712BB0664C9B40002CE69 = {
+ buildActionMask = 2147483647;
+ files = (
+ );
+ isa = PBXHeadersBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 3DA712BC0664C9B40002CE69 = {
+ buildActionMask = 2147483647;
+ files = (
+ );
+ isa = PBXResourcesBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 3DA712BD0664C9B40002CE69 = {
+ buildActionMask = 2147483647;
+ files = (
+ 3DA712C40664C9C40002CE69,
+ );
+ isa = PBXSourcesBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 3DA712BE0664C9B40002CE69 = {
+ buildActionMask = 2147483647;
+ files = (
+ 3DA712C30664C9C20002CE69,
+ 3DA712C50664C9C70002CE69,
+ 3DA712C60664C9C70002CE69,
+ 3DA712C70664C9C80002CE69,
+ );
+ isa = PBXFrameworksBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 3DA712BF0664C9B40002CE69 = {
+ buildActionMask = 2147483647;
+ files = (
+ );
+ isa = PBXRezBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 3DA712C00664C9B40002CE69 = {
+ buildPhases = (
+ 3DA712BB0664C9B40002CE69,
+ 3DA712BC0664C9B40002CE69,
+ 3DA712BD0664C9B40002CE69,
+ 3DA712BE0664C9B40002CE69,
+ 3DA712BF0664C9B40002CE69,
+ );
+ buildSettings = {
+ OTHER_CFLAGS = "";
+ OTHER_LDFLAGS = "";
+ OTHER_REZFLAGS = "";
+ PRODUCT_NAME = midithru;
+ SECTORDER_FLAGS = "";
+ WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas";
+ WRAPPER_EXTENSION = app;
+ };
+ comments = "Demonstrates midi thru processing in a low-priority thread";
+ dependencies = (
+ );
+ isa = PBXApplicationTarget;
+ name = midithru;
+ productInstallPath = "$(USER_APPS_DIR)";
+ productName = midithru;
+ productReference = 3DA712C10664C9B40002CE69;
+ productSettingsXML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
+<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">
+<plist version=\"1.0\">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>English</string>
+ <key>CFBundleExecutable</key>
+ <string></string>
+ <key>CFBundleGetInfoString</key>
+ <string></string>
+ <key>CFBundleIconFile</key>
+ <string></string>
+ <key>CFBundleIdentifier</key>
+ <string></string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string></string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleShortVersionString</key>
+ <string></string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>0.0.1d1</string>
+</dict>
+</plist>
+";
+ };
+ 3DA712C10664C9B40002CE69 = {
+ isa = PBXApplicationReference;
+ path = midithru.app;
+ refType = 3;
+ };
+ 3DA712C30664C9C20002CE69 = {
+ fileRef = 5851D5380479562300EE98CD;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 3DA712C40664C9C40002CE69 = {
+ fileRef = 3DA7741B0663E9DA0002CE69;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 3DA712C50664C9C70002CE69 = {
+ fileRef = 3DA774480663EAE60002CE69;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 3DA712C60664C9C70002CE69 = {
+ fileRef = 3DA7744E0663EBB20002CE69;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 3DA712C70664C9C80002CE69 = {
+ fileRef = 3DA774500663EBBF0002CE69;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 3DA712C80664CB1B0002CE69 = {
+ buildActionMask = 2147483647;
+ files = (
+ );
+ isa = PBXHeadersBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 3DA712C90664CB1B0002CE69 = {
+ buildActionMask = 2147483647;
+ files = (
+ );
+ isa = PBXResourcesBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 3DA712CA0664CB1B0002CE69 = {
+ buildActionMask = 2147483647;
+ files = (
+ 3DA712D10664CB430002CE69,
+ );
+ isa = PBXSourcesBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 3DA712CB0664CB1B0002CE69 = {
+ buildActionMask = 2147483647;
+ files = (
+ 3DA712D00664CB3F0002CE69,
+ 3DA712D20664CB470002CE69,
+ 3DA712D30664CB480002CE69,
+ 3DA712D40664CB480002CE69,
+ );
+ isa = PBXFrameworksBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 3DA712CC0664CB1B0002CE69 = {
+ buildActionMask = 2147483647;
+ files = (
+ );
+ isa = PBXRezBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 3DA712CD0664CB1B0002CE69 = {
+ buildPhases = (
+ 3DA712C80664CB1B0002CE69,
+ 3DA712C90664CB1B0002CE69,
+ 3DA712CA0664CB1B0002CE69,
+ 3DA712CB0664CB1B0002CE69,
+ 3DA712CC0664CB1B0002CE69,
+ );
+ buildSettings = {
+ OTHER_CFLAGS = "";
+ OTHER_LDFLAGS = "";
+ OTHER_REZFLAGS = "";
+ PRODUCT_NAME = sysex;
+ SECTORDER_FLAGS = "";
+ WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas";
+ WRAPPER_EXTENSION = app;
+ };
+ comments = "System exclusive input and output test";
+ dependencies = (
+ );
+ isa = PBXApplicationTarget;
+ name = sysex;
+ productInstallPath = "$(USER_APPS_DIR)";
+ productName = sysex;
+ productReference = 3DA712CE0664CB1B0002CE69;
+ productSettingsXML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
+<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">
+<plist version=\"1.0\">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>English</string>
+ <key>CFBundleExecutable</key>
+ <string></string>
+ <key>CFBundleGetInfoString</key>
+ <string></string>
+ <key>CFBundleIconFile</key>
+ <string></string>
+ <key>CFBundleIdentifier</key>
+ <string></string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string></string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleShortVersionString</key>
+ <string></string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>0.0.1d1</string>
+</dict>
+</plist>
+";
+ };
+ 3DA712CE0664CB1B0002CE69 = {
+ isa = PBXApplicationReference;
+ path = sysex.app;
+ refType = 3;
+ };
+ 3DA712D00664CB3F0002CE69 = {
+ fileRef = 5851D5380479562300EE98CD;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 3DA712D10664CB430002CE69 = {
+ fileRef = 3DA774210663E9DA0002CE69;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 3DA712D20664CB470002CE69 = {
+ fileRef = 3DA774480663EAE60002CE69;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 3DA712D30664CB480002CE69 = {
+ fileRef = 3DA7744E0663EBB20002CE69;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 3DA712D40664CB480002CE69 = {
+ fileRef = 3DA774500663EBBF0002CE69;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 3DA774070663E8EB0002CE69 = {
+ buildActionMask = 2147483647;
+ files = (
+ );
+ isa = PBXHeadersBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 3DA774080663E8EB0002CE69 = {
+ buildActionMask = 2147483647;
+ files = (
+ );
+ isa = PBXResourcesBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 3DA774090663E8EB0002CE69 = {
+ buildActionMask = 2147483647;
+ files = (
+ 3DA774390663E9DA0002CE69,
+ );
+ isa = PBXSourcesBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 3DA7740A0663E8EB0002CE69 = {
+ buildActionMask = 2147483647;
+ files = (
+ 3DA774470663EA6A0002CE69,
+ 3DA774490663EAE60002CE69,
+ 3DA7744F0663EBB20002CE69,
+ 3DA774510663EBBF0002CE69,
+ );
+ isa = PBXFrameworksBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 3DA7740B0663E8EB0002CE69 = {
+ buildActionMask = 2147483647;
+ files = (
+ );
+ isa = PBXRezBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 3DA7740C0663E8EB0002CE69 = {
+ buildPhases = (
+ 3DA774070663E8EB0002CE69,
+ 3DA774080663E8EB0002CE69,
+ 3DA774090663E8EB0002CE69,
+ 3DA7740A0663E8EB0002CE69,
+ 3DA7740B0663E8EB0002CE69,
+ );
+ buildSettings = {
+ OTHER_CFLAGS = "";
+ OTHER_LDFLAGS = "";
+ OTHER_REZFLAGS = "";
+ PRODUCT_NAME = test;
+ SECTORDER_FLAGS = "";
+ WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas";
+ WRAPPER_EXTENSION = app;
+ };
+ comments = "A PortMidi test program";
+ dependencies = (
+ );
+ isa = PBXApplicationTarget;
+ name = test;
+ productInstallPath = "$(USER_APPS_DIR)";
+ productName = test;
+ productReference = 3DA7740D0663E8EB0002CE69;
+ productSettingsXML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
+<!DOCTYPE plist PUBLIC \"-//Apple Computer//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">
+<plist version=\"1.0\">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>English</string>
+ <key>CFBundleExecutable</key>
+ <string></string>
+ <key>CFBundleGetInfoString</key>
+ <string></string>
+ <key>CFBundleIconFile</key>
+ <string></string>
+ <key>CFBundleIdentifier</key>
+ <string></string>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundleName</key>
+ <string></string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleShortVersionString</key>
+ <string></string>
+ <key>CFBundleSignature</key>
+ <string>????</string>
+ <key>CFBundleVersion</key>
+ <string>0.0.1d1</string>
+</dict>
+</plist>
+";
+ };
+ 3DA7740D0663E8EB0002CE69 = {
+ isa = PBXApplicationReference;
+ path = test.app;
+ refType = 3;
+ };
+ 3DA774100663E9DA0002CE69 = {
+ children = (
+ 3DA774110663E9DA0002CE69,
+ 3DA774120663E9DA0002CE69,
+ 3DA774130663E9DA0002CE69,
+ 3DA774140663E9DA0002CE69,
+ 3DA774150663E9DA0002CE69,
+ 3DA774160663E9DA0002CE69,
+ 3DA774170663E9DA0002CE69,
+ 3DA774180663E9DA0002CE69,
+ 3DA774190663E9DA0002CE69,
+ 3DA7741A0663E9DA0002CE69,
+ 3DA7741B0663E9DA0002CE69,
+ 3DA7741C0663E9DA0002CE69,
+ 3DA7741D0663E9DA0002CE69,
+ 3DA7741E0663E9DA0002CE69,
+ 3DA7741F0663E9DA0002CE69,
+ 3DA774200663E9DA0002CE69,
+ 3DA774210663E9DA0002CE69,
+ 3DA774220663E9DA0002CE69,
+ 3DA774230663E9DA0002CE69,
+ 3DA774240663E9DA0002CE69,
+ 3DA774250663E9DA0002CE69,
+ 3DA774260663E9DA0002CE69,
+ 3DA774270663E9DA0002CE69,
+ 3DA774280663E9DA0002CE69,
+ 3DA774290663E9DA0002CE69,
+ 3DA7742A0663E9DA0002CE69,
+ 3DA7742B0663E9DA0002CE69,
+ );
+ isa = PBXGroup;
+ name = pm_test;
+ path = /Users/rbd/portmidi/pm_test;
+ refType = 0;
+ };
+ 3DA774110663E9DA0002CE69 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ path = latency.c;
+ refType = 4;
+ };
+ 3DA774120663E9DA0002CE69 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ path = latency.dsp;
+ refType = 4;
+ };
+ 3DA774130663E9DA0002CE69 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ path = latency.plg;
+ refType = 4;
+ };
+ 3DA774140663E9DA0002CE69 = {
+ children = (
+ );
+ isa = PBXGroup;
+ path = latencyDebug;
+ refType = 4;
+ };
+ 3DA774150663E9DA0002CE69 = {
+ children = (
+ );
+ isa = PBXGroup;
+ path = latencyRelease;
+ refType = 4;
+ };
+ 3DA774160663E9DA0002CE69 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ path = midithread.c;
+ refType = 4;
+ };
+ 3DA774170663E9DA0002CE69 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ path = midithread.dsp;
+ refType = 4;
+ };
+ 3DA774180663E9DA0002CE69 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ path = midithread.plg;
+ refType = 4;
+ };
+ 3DA774190663E9DA0002CE69 = {
+ children = (
+ );
+ isa = PBXGroup;
+ path = midithreadDebug;
+ refType = 4;
+ };
+ 3DA7741A0663E9DA0002CE69 = {
+ children = (
+ );
+ isa = PBXGroup;
+ path = midithreadRelease;
+ refType = 4;
+ };
+ 3DA7741B0663E9DA0002CE69 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ path = midithru.c;
+ refType = 4;
+ };
+ 3DA7741C0663E9DA0002CE69 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ path = midithru.dsp;
+ refType = 4;
+ };
+ 3DA7741D0663E9DA0002CE69 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ path = midithru.dsw;
+ refType = 4;
+ };
+ 3DA7741E0663E9DA0002CE69 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ path = midithru.plg;
+ refType = 4;
+ };
+ 3DA7741F0663E9DA0002CE69 = {
+ children = (
+ );
+ isa = PBXGroup;
+ path = midithruDebug;
+ refType = 4;
+ };
+ 3DA774200663E9DA0002CE69 = {
+ children = (
+ );
+ isa = PBXGroup;
+ path = midithruRelease;
+ refType = 4;
+ };
+ 3DA774210663E9DA0002CE69 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ path = sysex.c;
+ refType = 4;
+ };
+ 3DA774220663E9DA0002CE69 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ path = sysex.dsp;
+ refType = 4;
+ };
+ 3DA774230663E9DA0002CE69 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ path = sysex.plg;
+ refType = 4;
+ };
+ 3DA774240663E9DA0002CE69 = {
+ children = (
+ );
+ isa = PBXGroup;
+ path = sysexDebug;
+ refType = 4;
+ };
+ 3DA774250663E9DA0002CE69 = {
+ children = (
+ );
+ isa = PBXGroup;
+ path = sysexRelease;
+ refType = 4;
+ };
+ 3DA774260663E9DA0002CE69 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ path = test.c;
+ refType = 4;
+ };
+ 3DA774270663E9DA0002CE69 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ path = test.dsp;
+ refType = 4;
+ };
+ 3DA774280663E9DA0002CE69 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ path = test.plg;
+ refType = 4;
+ };
+ 3DA774290663E9DA0002CE69 = {
+ children = (
+ );
+ isa = PBXGroup;
+ path = testDebug;
+ refType = 4;
+ };
+ 3DA7742A0663E9DA0002CE69 = {
+ children = (
+ );
+ isa = PBXGroup;
+ path = testRelease;
+ refType = 4;
+ };
+ 3DA7742B0663E9DA0002CE69 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ path = txdata.syx;
+ refType = 4;
+ };
+ 3DA774390663E9DA0002CE69 = {
+ fileRef = 3DA774260663E9DA0002CE69;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 3DA774470663EA6A0002CE69 = {
+ fileRef = 5851D5380479562300EE98CD;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 3DA774480663EAE60002CE69 = {
+ isa = PBXFrameworkReference;
+ name = CoreMIDI.framework;
+ path = /System/Library/Frameworks/CoreMIDI.framework;
+ refType = 0;
+ };
+ 3DA774490663EAE60002CE69 = {
+ fileRef = 3DA774480663EAE60002CE69;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 3DA7744E0663EBB20002CE69 = {
+ isa = PBXFrameworkReference;
+ name = CoreFoundation.framework;
+ path = /System/Library/Frameworks/CoreFoundation.framework;
+ refType = 0;
+ };
+ 3DA7744F0663EBB20002CE69 = {
+ fileRef = 3DA7744E0663EBB20002CE69;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 3DA774500663EBBF0002CE69 = {
+ isa = PBXFrameworkReference;
+ name = CoreAudio.framework;
+ path = /System/Library/Frameworks/CoreAudio.framework;
+ refType = 0;
+ };
+ 3DA774510663EBBF0002CE69 = {
+ fileRef = 3DA774500663EBBF0002CE69;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+//3D0
+//3D1
+//3D2
+//3D3
+//3D4
+//580
+//581
+//582
+//583
+//584
+ 5851D5140479552300EE98CD = {
+ children = (
+ 5851D51D047955A100EE98CD,
+ 5851D51C0479553600EE98CD,
+ 5851D51B0479553500EE98CD,
+ 5851D51A0479553300EE98CD,
+ 5851D5190479552E00EE98CD,
+ 5851D5390479562300EE98CD,
+ 3DA774100663E9DA0002CE69,
+ 3DA774480663EAE60002CE69,
+ 3DA7744E0663EBB20002CE69,
+ 3DA774500663EBBF0002CE69,
+ );
+ isa = PBXGroup;
+ refType = 4;
+ };
+ 5851D5160479552300EE98CD = {
+ buildRules = (
+ );
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ };
+ isa = PBXBuildStyle;
+ name = Development;
+ };
+ 5851D5170479552300EE98CD = {
+ buildRules = (
+ );
+ buildSettings = {
+ COPY_PHASE_STRIP = YES;
+ };
+ isa = PBXBuildStyle;
+ name = Deployment;
+ };
+ 5851D5180479552300EE98CD = {
+ buildStyles = (
+ 5851D5160479552300EE98CD,
+ 5851D5170479552300EE98CD,
+ );
+ hasScannedForEncodings = 1;
+ isa = PBXProject;
+ mainGroup = 5851D5140479552300EE98CD;
+ productRefGroup = 5851D5390479562300EE98CD;
+ projectDirPath = "";
+ targets = (
+ 5851D5370479562300EE98CD,
+ 3DA7740C0663E8EB0002CE69,
+ 3DA712B30664C7C50002CE69,
+ 3DA712C00664C9B40002CE69,
+ 3DA712CD0664CB1B0002CE69,
+ 3D9CFCAF067657D50002CE69,
+ );
+ };
+ 5851D5190479552E00EE98CD = {
+ children = (
+ 5851D5310479560B00EE98CD,
+ 5851D5320479560B00EE98CD,
+ 5851D5730479613900EE98CD,
+ 5851D5740479613900EE98CD,
+ );
+ isa = PBXGroup;
+ name = pm_mac;
+ refType = 4;
+ };
+ 5851D51A0479553300EE98CD = {
+ children = (
+ 5851D52C047955FD00EE98CD,
+ 5851D52D047955FD00EE98CD,
+ 5851D52E047955FD00EE98CD,
+ 5851D52F047955FD00EE98CD,
+ 5851D530047955FD00EE98CD,
+ );
+ isa = PBXGroup;
+ name = pm_win;
+ refType = 4;
+ };
+ 5851D51B0479553500EE98CD = {
+ children = (
+ 5851D528047955D700EE98CD,
+ 5851D529047955D700EE98CD,
+ 5851D52A047955D700EE98CD,
+ 5851D52B047955D700EE98CD,
+ );
+ isa = PBXGroup;
+ name = pm_linux;
+ refType = 4;
+ };
+ 5851D51C0479553600EE98CD = {
+ children = (
+ 5851D523047955C800EE98CD,
+ 5851D524047955C800EE98CD,
+ 5851D525047955C800EE98CD,
+ 5851D526047955C800EE98CD,
+ 5851D527047955C800EE98CD,
+ );
+ isa = PBXGroup;
+ name = pm_common;
+ path = "";
+ refType = 2;
+ };
+ 5851D51D047955A100EE98CD = {
+ children = (
+ 5851D51E047955B800EE98CD,
+ 5851D51F047955B800EE98CD,
+ 5851D520047955B800EE98CD,
+ 5851D521047955B800EE98CD,
+ 58ED5B81047D41DB00B92E62,
+ 5851D522047955B800EE98CD,
+ );
+ isa = PBXGroup;
+ name = porttime;
+ refType = 4;
+ };
+ 5851D51E047955B800EE98CD = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ name = porttime.c;
+ path = ../porttime/porttime.c;
+ refType = 2;
+ };
+ 5851D51F047955B800EE98CD = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ name = porttime.h;
+ path = ../porttime/porttime.h;
+ refType = 2;
+ };
+ 5851D520047955B800EE98CD = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ name = ptlinux.c;
+ path = ../porttime/ptlinux.c;
+ refType = 2;
+ };
+ 5851D521047955B800EE98CD = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ name = ptmacosx_cf.c;
+ path = ../porttime/ptmacosx_cf.c;
+ refType = 2;
+ };
+ 5851D522047955B800EE98CD = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ name = ptwinmm.c;
+ path = ../porttime/ptwinmm.c;
+ refType = 2;
+ };
+ 5851D523047955C800EE98CD = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ name = pminternal.h;
+ path = ../pm_common/pminternal.h;
+ refType = 2;
+ };
+ 5851D524047955C800EE98CD = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ name = pmutil.c;
+ path = ../pm_common/pmutil.c;
+ refType = 2;
+ };
+ 5851D525047955C800EE98CD = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ name = pmutil.h;
+ path = ../pm_common/pmutil.h;
+ refType = 2;
+ };
+ 5851D526047955C800EE98CD = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ name = portmidi.c;
+ path = ../pm_common/portmidi.c;
+ refType = 2;
+ };
+ 5851D527047955C800EE98CD = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ name = portmidi.h;
+ path = ../pm_common/portmidi.h;
+ refType = 2;
+ };
+ 5851D528047955D700EE98CD = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ name = pmlinux.c;
+ path = ../pm_linux/pmlinux.c;
+ refType = 2;
+ };
+ 5851D529047955D700EE98CD = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ name = pmlinux.h;
+ path = ../pm_linux/pmlinux.h;
+ refType = 2;
+ };
+ 5851D52A047955D700EE98CD = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ name = pmlinuxalsa.c;
+ path = ../pm_linux/pmlinuxalsa.c;
+ refType = 2;
+ };
+ 5851D52B047955D700EE98CD = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ name = pmlinuxalsa.h;
+ path = ../pm_linux/pmlinuxalsa.h;
+ refType = 2;
+ };
+ 5851D52C047955FD00EE98CD = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ name = pmdll.c;
+ path = ../pm_win/pmdll.c;
+ refType = 2;
+ };
+ 5851D52D047955FD00EE98CD = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ name = pmdll.h;
+ path = ../pm_win/pmdll.h;
+ refType = 2;
+ };
+ 5851D52E047955FD00EE98CD = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ name = pmwin.c;
+ path = ../pm_win/pmwin.c;
+ refType = 2;
+ };
+ 5851D52F047955FD00EE98CD = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ name = pmwinmm.c;
+ path = ../pm_win/pmwinmm.c;
+ refType = 2;
+ };
+ 5851D530047955FD00EE98CD = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ name = pmwinmm.h;
+ path = ../pm_win/pmwinmm.h;
+ refType = 2;
+ };
+ 5851D5310479560B00EE98CD = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ path = pmmacosxcm.c;
+ refType = 2;
+ };
+ 5851D5320479560B00EE98CD = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ path = pmmacosxcm.h;
+ refType = 2;
+ };
+ 5851D5330479562300EE98CD = {
+ buildActionMask = 2147483647;
+ files = (
+ 5851D53B0479564000EE98CD,
+ 5851D53D0479564100EE98CD,
+ 5851D53F0479564100EE98CD,
+ 5851D5420479564600EE98CD,
+ 5851D5430479564F00EE98CD,
+ 5851D5750479613900EE98CD,
+ );
+ isa = PBXHeadersBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 5851D5340479562300EE98CD = {
+ buildActionMask = 2147483647;
+ files = (
+ 5851D53C0479564000EE98CD,
+ 5851D53E0479564100EE98CD,
+ 5851D5400479564400EE98CD,
+ 5851D5760479613900EE98CD,
+ 58ED5C7A047D694900B92E62,
+ );
+ isa = PBXSourcesBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 5851D5350479562300EE98CD = {
+ buildActionMask = 2147483647;
+ files = (
+ );
+ isa = PBXFrameworksBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 5851D5360479562300EE98CD = {
+ buildActionMask = 2147483647;
+ files = (
+ );
+ isa = PBXRezBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 5851D5370479562300EE98CD = {
+ buildPhases = (
+ 5851D5330479562300EE98CD,
+ 5851D5340479562300EE98CD,
+ 5851D5350479562300EE98CD,
+ 5851D5360479562300EE98CD,
+ );
+ buildSettings = {
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ LIBRARY_STYLE = STATIC;
+ OTHER_CFLAGS = "-DPM_CHECK_ERRORS -DDEBUG";
+ OTHER_LDFLAGS = "";
+ OTHER_LIBTOOL_FLAGS = "";
+ OTHER_REZFLAGS = "";
+ PRODUCT_NAME = libportmidi.a;
+ REZ_EXECUTABLE = YES;
+ SECTORDER_FLAGS = "";
+ WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas";
+ };
+ dependencies = (
+ );
+ isa = PBXLibraryTarget;
+ name = libportmidi.a;
+ productInstallPath = /usr/local/lib;
+ productName = libportmidi.a;
+ productReference = 5851D5380479562300EE98CD;
+ };
+ 5851D5380479562300EE98CD = {
+ isa = PBXLibraryReference;
+ path = libportmidi.a;
+ refType = 3;
+ };
+ 5851D5390479562300EE98CD = {
+ children = (
+ 5851D5380479562300EE98CD,
+ 3DA7740D0663E8EB0002CE69,
+ 3DA712B40664C7C50002CE69,
+ 3DA712C10664C9B40002CE69,
+ 3DA712CE0664CB1B0002CE69,
+ 3D9CFCB0067657D50002CE69,
+ );
+ isa = PBXGroup;
+ name = Products;
+ refType = 4;
+ };
+ 5851D53B0479564000EE98CD = {
+ fileRef = 5851D523047955C800EE98CD;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 5851D53C0479564000EE98CD = {
+ fileRef = 5851D524047955C800EE98CD;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 5851D53D0479564100EE98CD = {
+ fileRef = 5851D525047955C800EE98CD;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 5851D53E0479564100EE98CD = {
+ fileRef = 5851D526047955C800EE98CD;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 5851D53F0479564100EE98CD = {
+ fileRef = 5851D527047955C800EE98CD;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 5851D5400479564400EE98CD = {
+ fileRef = 5851D5310479560B00EE98CD;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 5851D5420479564600EE98CD = {
+ fileRef = 5851D5320479560B00EE98CD;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 5851D5430479564F00EE98CD = {
+ fileRef = 5851D51F047955B800EE98CD;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 5851D5730479613900EE98CD = {
+ fileEncoding = 4;
+ isa = PBXFileReference;
+ path = pmmac.h;
+ refType = 2;
+ };
+ 5851D5740479613900EE98CD = {
+ fileEncoding = 4;
+ isa = PBXFileReference;
+ path = pmmac.c;
+ refType = 2;
+ };
+ 5851D5750479613900EE98CD = {
+ fileRef = 5851D5730479613900EE98CD;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 5851D5760479613900EE98CD = {
+ fileRef = 5851D5740479613900EE98CD;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 58ED5B81047D41DB00B92E62 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ name = ptmacosx_mach.c;
+ path = ../porttime/ptmacosx_mach.c;
+ refType = 2;
+ };
+ 58ED5C7A047D694900B92E62 = {
+ fileRef = 58ED5B81047D41DB00B92E62;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ };
+ rootObject = 5851D5180479552300EE98CD;
+}
diff --git a/pd/portmidi/pm_mac/pm_mac.pbproj/rbd.pbxuser b/pd/portmidi/pm_mac/pm_mac.pbproj/rbd.pbxuser
new file mode 100644
index 00000000..6f36b563
--- /dev/null
+++ b/pd/portmidi/pm_mac/pm_mac.pbproj/rbd.pbxuser
@@ -0,0 +1,1508 @@
+// !$*UTF8*$!
+{
+ 3D7903E9066690E00002CE69 = {
+ fRef = 3DA774260663E9DA0002CE69;
+ isa = PBXTextBookmark;
+ name = "test.c: TIME_START";
+ rLen = 17;
+ rLoc = 309;
+ rType = 0;
+ vrLen = 955;
+ vrLoc = 0;
+ };
+ 3D7903EC066690E00002CE69 = {
+ fRef = 5851D526047955C800EE98CD;
+ isa = PBXTextBookmark;
+ name = "portmidi.c: pm_read_short";
+ rLen = 0;
+ rLoc = 24290;
+ rType = 0;
+ vrLen = 1795;
+ vrLoc = 23823;
+ };
+ 3D7903ED066690E00002CE69 = {
+ fRef = 5851D5310479560B00EE98CD;
+ isa = PBXTextBookmark;
+ name = "pmmacosxcm.c: midi_in_open";
+ rLen = 6;
+ rLoc = 10561;
+ rType = 0;
+ vrLen = 1218;
+ vrLoc = 9520;
+ };
+ 3D7903EE066690E00002CE69 = {
+ fRef = 3DA774210663E9DA0002CE69;
+ isa = PBXTextBookmark;
+ name = "sysex.c: loopback_test";
+ rLen = 0;
+ rLoc = 3992;
+ rType = 0;
+ vrLen = 1768;
+ vrLoc = 2466;
+ };
+ 3D7903EF066690E00002CE69 = {
+ fRef = 5851D5310479560B00EE98CD;
+ isa = PBXTextBookmark;
+ name = "pmmacosxcm.c: err";
+ rLen = 0;
+ rLoc = 17896;
+ rType = 0;
+ vrLen = 1449;
+ vrLoc = 16660;
+ };
+ 3D7903F0066690E00002CE69 = {
+ fRef = 3DA774210663E9DA0002CE69;
+ isa = PBXTextBookmark;
+ name = "sysex.c: loopback_test";
+ rLen = 0;
+ rLoc = 3992;
+ rType = 0;
+ vrLen = 903;
+ vrLoc = 0;
+ };
+ 3D7903F1066690E00002CE69 = {
+ fRef = 3DA774260663E9DA0002CE69;
+ isa = PBXTextBookmark;
+ name = "test.c: TIME_START";
+ rLen = 17;
+ rLoc = 309;
+ rType = 0;
+ vrLen = 955;
+ vrLoc = 0;
+ };
+ 3D7903F2066690E00002CE69 = {
+ fRef = 3DA774210663E9DA0002CE69;
+ isa = PBXTextBookmark;
+ name = "sysex.c: loopback_test";
+ rLen = 0;
+ rLoc = 4871;
+ rType = 0;
+ vrLen = 804;
+ vrLoc = 254;
+ };
+ 3D7903F3066690E00002CE69 = {
+ fRef = 5851D5310479560B00EE98CD;
+ isa = PBXTextBookmark;
+ name = "pmmacosxcm.c: SYSEX_BUFFER_SIZE";
+ rLen = 0;
+ rLoc = 1197;
+ rType = 0;
+ vrLen = 1450;
+ vrLoc = 884;
+ };
+ 3D7903F4066690E00002CE69 = {
+ fRef = 3DA774210663E9DA0002CE69;
+ isa = PBXTextBookmark;
+ name = "sysex.c: loopback_test";
+ rLen = 0;
+ rLoc = 3483;
+ rType = 0;
+ vrLen = 1752;
+ vrLoc = 3284;
+ };
+ 3D9CFCA7067651E80002CE69 = {
+ fileReference = 5851D526047955C800EE98CD;
+ isa = PBXFileBreakpoint;
+ lineNumber = 396;
+ state = 1;
+ };
+ 3D9CFCA90676535F0002CE69 = {
+ fileReference = 5851D526047955C800EE98CD;
+ isa = PBXFileBreakpoint;
+ lineNumber = 390;
+ state = 1;
+ };
+ 3D9CFCAF067657D50002CE69 = {
+ activeExec = 0;
+ executables = (
+ 3D9CFCB1067657D50002CE69,
+ );
+ };
+ 3D9CFCB1067657D50002CE69 = {
+ activeArgIndex = 2147483647;
+ activeArgIndices = (
+ );
+ argumentStrings = (
+ );
+ configStateDict = {
+ };
+ debuggerPlugin = GDBDebugging;
+ enableDebugStr = 1;
+ environmentEntries = (
+ );
+ isa = PBXExecutable;
+ name = latency;
+ shlibInfoDictList = (
+ );
+ sourceDirectories = (
+ );
+ };
+ 3D9CFCBE06765A7F0002CE69 = {
+ fRef = 3D9CFCDB06765A7F0002CE69;
+ isa = PBXTextBookmark;
+ name = "pmmacosxcm.c: 1";
+ rLen = 0;
+ rLoc = 0;
+ rType = 0;
+ vrLen = 1521;
+ vrLoc = 0;
+ };
+ 3D9CFCBF06765A7F0002CE69 = {
+ fRef = 5851D526047955C800EE98CD;
+ isa = PBXTextBookmark;
+ name = "portmidi.c: 759";
+ rLen = 0;
+ rLoc = 24290;
+ rType = 0;
+ vrLen = 1709;
+ vrLoc = 25249;
+ };
+ 3D9CFCC006765A7F0002CE69 = {
+ fRef = 5851D5310479560B00EE98CD;
+ isa = PBXTextBookmark;
+ name = "pmmacosxcm.c: midi_begin_sysex";
+ rLen = 0;
+ rLoc = 14525;
+ rType = 0;
+ vrLen = 1466;
+ vrLoc = 13829;
+ };
+ 3D9CFCC106765A7F0002CE69 = {
+ fRef = 3DA774210663E9DA0002CE69;
+ isa = PBXTextBookmark;
+ name = "sysex.c: loopback_test";
+ rLen = 0;
+ rLoc = 3483;
+ rType = 0;
+ vrLen = 903;
+ vrLoc = 0;
+ };
+ 3D9CFCC206765A7F0002CE69 = {
+ exec = 3DA712CF0664CB1B0002CE69;
+ isa = PBXExecutableBookmark;
+ uiCtxt = {
+ buildSettingsExpandedSubviews = (
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ );
+ buildSettingsVisRect = "{{0, 0}, {746, 603}}";
+ };
+ };
+ 3D9CFCC306765A7F0002CE69 = {
+ isa = PBXTargetBookmark;
+ trg = 3DA712C00664C9B40002CE69;
+ uiCtxt = {
+ TOCViewDetailVisibleRect = "{{0, 0}, {517, 119}}";
+ TOCViewExpandedItems = (
+ "com.apple.target-editor-pane.settings",
+ "com.apple.target-editor-pane.settings.simple",
+ "com.apple.target-editor-pane.info-plist",
+ "com.apple.target-editor-pane.info-plist.simple",
+ "com.apple.target-editor-pane.buildphases",
+ );
+ TOCViewMasterVisibleRect = "{{0, 0}, {205, 603}}";
+ TOCViewSelectedItems = (
+ 3DA712BE0664C9B40002CE69,
+ );
+ };
+ };
+ 3D9CFCC406765A7F0002CE69 = {
+ isa = PBXTargetBookmark;
+ trg = 3DA712CD0664CB1B0002CE69;
+ uiCtxt = {
+ TOCViewDetailVisibleRect = "{{0, 0}, {518, 119}}";
+ TOCViewExpandedItems = (
+ "com.apple.target-editor-pane.settings",
+ "com.apple.target-editor-pane.settings.simple",
+ "com.apple.target-editor-pane.info-plist",
+ "com.apple.target-editor-pane.info-plist.simple",
+ "com.apple.target-editor-pane.buildphases",
+ );
+ TOCViewMasterVisibleRect = "{{0, 0}, {204, 603}}";
+ TOCViewSelectedItems = (
+ 3DA712CB0664CB1B0002CE69,
+ );
+ };
+ };
+ 3D9CFCC506765A7F0002CE69 = {
+ isa = PBXTargetBookmark;
+ trg = 3D9CFCAF067657D50002CE69;
+ uiCtxt = {
+ TOCViewDetailVisibleRect = "{{0, 0}, {518, 102}}";
+ TOCViewExpandedItems = (
+ "com.apple.target-editor-pane.settings",
+ "com.apple.target-editor-pane.settings.simple",
+ "com.apple.target-editor-pane.info-plist",
+ "com.apple.target-editor-pane.info-plist.simple",
+ "com.apple.target-editor-pane.buildphases",
+ );
+ TOCViewMasterVisibleRect = "{{0, 0}, {204, 603}}";
+ TOCViewSelectedItems = (
+ 3D9CFCAD067657D50002CE69,
+ );
+ };
+ };
+ 3D9CFCC606765A7F0002CE69 = {
+ fRef = 5851D5310479560B00EE98CD;
+ isa = PBXTextBookmark;
+ name = "pmmacosxcm.c: midi_write_short";
+ rLen = 0;
+ rLoc = 13963;
+ rType = 0;
+ vrLen = 1621;
+ vrLoc = 13417;
+ };
+ 3D9CFCC706765A7F0002CE69 = {
+ fRef = 3D9CFCD906765A7F0002CE69;
+ isa = PBXTextBookmark;
+ name = "pmmacosxcm.c: 1";
+ rLen = 0;
+ rLoc = 0;
+ rType = 0;
+ vrLen = 1521;
+ vrLoc = 0;
+ };
+ 3D9CFCC806765A7F0002CE69 = {
+ fRef = 5851D5310479560B00EE98CD;
+ isa = PBXTextBookmark;
+ name = "pmmacosxcm.c: readProc";
+ rLen = 0;
+ rLoc = 5664;
+ rType = 0;
+ vrLen = 1840;
+ vrLoc = 4759;
+ };
+ 3D9CFCC906765A7F0002CE69 = {
+ fRef = 3D9CFCDA06765A7F0002CE69;
+ isa = PBXTextBookmark;
+ name = "pmmacosxcm.c: 1";
+ rLen = 0;
+ rLoc = 0;
+ rType = 0;
+ vrLen = 1521;
+ vrLoc = 0;
+ };
+ 3D9CFCCA06765A7F0002CE69 = {
+ fRef = 3DA774210663E9DA0002CE69;
+ isa = PBXTextBookmark;
+ name = "sysex.c: loopback_test";
+ rLen = 0;
+ rLoc = 3483;
+ rType = 0;
+ vrLen = 1712;
+ vrLoc = 3270;
+ };
+ 3D9CFCCB06765A7F0002CE69 = {
+ fRef = 5851D526047955C800EE98CD;
+ isa = PBXTextBookmark;
+ name = "portmidi.c: 759";
+ rLen = 0;
+ rLoc = 24290;
+ rType = 0;
+ vrLen = 1709;
+ vrLoc = 25249;
+ };
+ 3D9CFCCC06765A7F0002CE69 = {
+ fRef = 5851D5310479560B00EE98CD;
+ isa = PBXTextBookmark;
+ name = "pmmacosxcm.c: midi_begin_sysex";
+ rLen = 0;
+ rLoc = 14525;
+ rType = 0;
+ vrLen = 1466;
+ vrLoc = 13829;
+ };
+ 3D9CFCCD06765A7F0002CE69 = {
+ isa = PBXTargetBookmark;
+ trg = 3D9CFCAF067657D50002CE69;
+ uiCtxt = {
+ TOCViewDetailVisibleRect = "{{0, 0}, {491, 287}}";
+ TOCViewExpandedItems = (
+ "com.apple.target-editor-pane.settings",
+ "com.apple.target-editor-pane.settings.simple",
+ "com.apple.target-editor-pane.info-plist",
+ "com.apple.target-editor-pane.info-plist.simple",
+ "com.apple.target-editor-pane.buildphases",
+ );
+ TOCViewMasterVisibleRect = "{{0, 0}, {210, 603}}";
+ TOCViewSelectedItems = (
+ PBXTargetLdLinkerSettingsModule,
+ );
+ };
+ };
+ 3D9CFCCE06765A7F0002CE69 = {
+ fRef = 3DA774210663E9DA0002CE69;
+ isa = PBXTextBookmark;
+ name = "sysex.c: loopback_test";
+ rLen = 0;
+ rLoc = 3483;
+ rType = 0;
+ vrLen = 903;
+ vrLoc = 0;
+ };
+ 3D9CFCCF06765A7F0002CE69 = {
+ exec = 3DA712CF0664CB1B0002CE69;
+ isa = PBXExecutableBookmark;
+ uiCtxt = {
+ buildSettingsExpandedSubviews = (
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ );
+ buildSettingsVisRect = "{{0, 0}, {746, 603}}";
+ };
+ };
+ 3D9CFCD006765A7F0002CE69 = {
+ isa = PBXTargetBookmark;
+ trg = 3DA712C00664C9B40002CE69;
+ uiCtxt = {
+ TOCViewDetailVisibleRect = "{{0, 0}, {517, 119}}";
+ TOCViewExpandedItems = (
+ "com.apple.target-editor-pane.settings",
+ "com.apple.target-editor-pane.settings.simple",
+ "com.apple.target-editor-pane.info-plist",
+ "com.apple.target-editor-pane.info-plist.simple",
+ "com.apple.target-editor-pane.buildphases",
+ );
+ TOCViewMasterVisibleRect = "{{0, 0}, {205, 603}}";
+ TOCViewSelectedItems = (
+ 3DA712BE0664C9B40002CE69,
+ );
+ };
+ };
+ 3D9CFCD106765A7F0002CE69 = {
+ isa = PBXTargetBookmark;
+ trg = 3DA712CD0664CB1B0002CE69;
+ uiCtxt = {
+ TOCViewDetailVisibleRect = "{{0, 0}, {517, 233}}";
+ TOCViewExpandedItems = (
+ "com.apple.target-editor-pane.settings",
+ "com.apple.target-editor-pane.settings.simple",
+ "com.apple.target-editor-pane.info-plist",
+ "com.apple.target-editor-pane.info-plist.simple",
+ "com.apple.target-editor-pane.buildphases",
+ );
+ TOCViewMasterVisibleRect = "{{0, 0}, {205, 603}}";
+ TOCViewSelectedItems = (
+ PBXTargetSummarySettingsModule,
+ );
+ };
+ };
+ 3D9CFCD206765A7F0002CE69 = {
+ isa = PBXTargetBookmark;
+ trg = 3D9CFCAF067657D50002CE69;
+ uiCtxt = {
+ TOCViewDetailVisibleRect = "{{0, 0}, {517, 102}}";
+ TOCViewExpandedItems = (
+ "com.apple.target-editor-pane.settings",
+ "com.apple.target-editor-pane.settings.simple",
+ "com.apple.target-editor-pane.info-plist",
+ "com.apple.target-editor-pane.info-plist.simple",
+ "com.apple.target-editor-pane.buildphases",
+ );
+ TOCViewMasterVisibleRect = "{{0, 0}, {205, 603}}";
+ TOCViewSelectedItems = (
+ 3D9CFCAD067657D50002CE69,
+ );
+ };
+ };
+ 3D9CFCD306765A7F0002CE69 = {
+ isa = PBXTargetBookmark;
+ trg = 3DA712CD0664CB1B0002CE69;
+ uiCtxt = {
+ TOCViewDetailVisibleRect = "{{0, 0}, {517, 119}}";
+ TOCViewExpandedItems = (
+ "com.apple.target-editor-pane.settings",
+ "com.apple.target-editor-pane.settings.simple",
+ "com.apple.target-editor-pane.info-plist",
+ "com.apple.target-editor-pane.info-plist.simple",
+ "com.apple.target-editor-pane.buildphases",
+ );
+ TOCViewMasterVisibleRect = "{{0, 0}, {205, 603}}";
+ TOCViewSelectedItems = (
+ 3DA712CB0664CB1B0002CE69,
+ );
+ };
+ };
+ 3D9CFCD406765A7F0002CE69 = {
+ isa = PBXTargetBookmark;
+ trg = 3D9CFCAF067657D50002CE69;
+ uiCtxt = {
+ TOCViewDetailVisibleRect = "{{0, 0}, {518, 102}}";
+ TOCViewExpandedItems = (
+ "com.apple.target-editor-pane.settings",
+ "com.apple.target-editor-pane.settings.simple",
+ "com.apple.target-editor-pane.info-plist",
+ "com.apple.target-editor-pane.info-plist.simple",
+ "com.apple.target-editor-pane.buildphases",
+ );
+ TOCViewMasterVisibleRect = "{{0, 0}, {204, 603}}";
+ TOCViewSelectedItems = (
+ 3D9CFCAD067657D50002CE69,
+ );
+ };
+ };
+ 3D9CFCD506765A7F0002CE69 = {
+ isa = PBXTargetBookmark;
+ trg = 3DA712CD0664CB1B0002CE69;
+ uiCtxt = {
+ TOCViewDetailVisibleRect = "{{0, 0}, {518, 119}}";
+ TOCViewExpandedItems = (
+ "com.apple.target-editor-pane.settings",
+ "com.apple.target-editor-pane.settings.simple",
+ "com.apple.target-editor-pane.info-plist",
+ "com.apple.target-editor-pane.info-plist.simple",
+ "com.apple.target-editor-pane.buildphases",
+ );
+ TOCViewMasterVisibleRect = "{{0, 0}, {204, 603}}";
+ TOCViewSelectedItems = (
+ 3DA712CB0664CB1B0002CE69,
+ );
+ };
+ };
+ 3D9CFCD606765A7F0002CE69 = {
+ isa = PBXTargetBookmark;
+ trg = 3D9CFCAF067657D50002CE69;
+ uiCtxt = {
+ TOCViewDetailVisibleRect = "{{0, 0}, {517, 119}}";
+ TOCViewExpandedItems = (
+ "com.apple.target-editor-pane.settings",
+ "com.apple.target-editor-pane.settings.simple",
+ "com.apple.target-editor-pane.info-plist",
+ "com.apple.target-editor-pane.info-plist.simple",
+ "com.apple.target-editor-pane.buildphases",
+ );
+ TOCViewMasterVisibleRect = "{{0, 0}, {205, 603}}";
+ TOCViewSelectedItems = (
+ 3D9CFCAD067657D50002CE69,
+ );
+ };
+ };
+ 3D9CFCD706765A7F0002CE69 = {
+ fRef = 5851D526047955C800EE98CD;
+ isa = PBXTextBookmark;
+ rLen = 0;
+ rLoc = 396;
+ rType = 1;
+ };
+ 3D9CFCD806765A7F0002CE69 = {
+ fRef = 5851D526047955C800EE98CD;
+ isa = PBXTextBookmark;
+ name = "portmidi.c: Pm_Write";
+ rLen = 0;
+ rLoc = 11148;
+ rType = 0;
+ vrLen = 876;
+ vrLoc = 11059;
+ };
+ 3D9CFCD906765A7F0002CE69 = {
+ isa = PBXFileReference;
+ name = pmmacosxcm.c;
+ path = "/Users/rbd/portmidi-27may04/pm_mac/pmmacosxcm.c";
+ refType = 0;
+ };
+ 3D9CFCDA06765A7F0002CE69 = {
+ isa = PBXFileReference;
+ name = pmmacosxcm.c;
+ path = "/Users/rbd/portmidi-27may04/pm_mac/pmmacosxcm.c";
+ refType = 0;
+ };
+ 3D9CFCDB06765A7F0002CE69 = {
+ isa = PBXFileReference;
+ name = pmmacosxcm.c;
+ path = "/Users/rbd/portmidi-27may04/pm_mac/pmmacosxcm.c";
+ refType = 0;
+ };
+ 3DA712B30664C7C50002CE69 = {
+ activeExec = 0;
+ executables = (
+ 3DA712B50664C7C50002CE69,
+ );
+ };
+ 3DA712B50664C7C50002CE69 = {
+ activeArgIndex = 2147483647;
+ activeArgIndices = (
+ );
+ argumentStrings = (
+ );
+ configStateDict = {
+ };
+ debuggerPlugin = GDBDebugging;
+ enableDebugStr = 1;
+ environmentEntries = (
+ );
+ isa = PBXExecutable;
+ name = midithread;
+ shlibInfoDictList = (
+ );
+ sourceDirectories = (
+ );
+ };
+ 3DA712C00664C9B40002CE69 = {
+ activeExec = 0;
+ executables = (
+ 3DA712C20664C9B40002CE69,
+ );
+ };
+ 3DA712C20664C9B40002CE69 = {
+ activeArgIndex = 2147483647;
+ activeArgIndices = (
+ );
+ argumentStrings = (
+ );
+ configStateDict = {
+ };
+ debuggerPlugin = GDBDebugging;
+ dylibVariantSuffix = "";
+ enableDebugStr = 1;
+ environmentEntries = (
+ );
+ isa = PBXExecutable;
+ name = midithru;
+ shlibInfoDictList = (
+ );
+ sourceDirectories = (
+ );
+ };
+ 3DA712CD0664CB1B0002CE69 = {
+ activeExec = 0;
+ executables = (
+ 3DA712CF0664CB1B0002CE69,
+ );
+ };
+ 3DA712CF0664CB1B0002CE69 = {
+ activeArgIndex = 2147483647;
+ activeArgIndices = (
+ );
+ argumentStrings = (
+ );
+ configStateDict = {
+ };
+ debuggerPlugin = GDBDebugging;
+ dylibVariantSuffix = "";
+ enableDebugStr = 1;
+ environmentEntries = (
+ );
+ isa = PBXExecutable;
+ name = sysex;
+ shlibInfoDictList = (
+ );
+ sourceDirectories = (
+ );
+ };
+ 3DA715FB066511460002CE69 = {
+ isa = PBXSymbolicBreakpoint;
+ state = 2;
+ symbolName = "";
+ };
+ 3DA7160D066548C80002CE69 = {
+ fileReference = 3DA774210663E9DA0002CE69;
+ isa = PBXFileBreakpoint;
+ lineNumber = 128;
+ state = 2;
+ };
+ 3DA7161606664C500002CE69 = {
+ fRef = 5851D527047955C800EE98CD;
+ isa = PBXTextBookmark;
+ name = "portmidi.h: 174";
+ rLen = 7;
+ rLoc = 8744;
+ rType = 0;
+ vrLen = 466;
+ vrLoc = 8611;
+ };
+ 3DA7161A06664C500002CE69 = {
+ fRef = 5851D5310479560B00EE98CD;
+ isa = PBXTextBookmark;
+ name = "pmmacosxcm.c: midi_write";
+ rLen = 0;
+ rLoc = 18396;
+ rType = 0;
+ vrLen = 605;
+ vrLoc = 11721;
+ };
+ 3DA7161B06664C500002CE69 = {
+ fRef = 5851D523047955C800EE98CD;
+ isa = PBXTextBookmark;
+ name = "pminternal.h: 124";
+ rLen = 0;
+ rLoc = 6172;
+ rType = 0;
+ vrLen = 1926;
+ vrLoc = 4173;
+ };
+ 3DA7161C06664C500002CE69 = {
+ fRef = 5851D5310479560B00EE98CD;
+ isa = PBXTextBookmark;
+ name = "pmmacosxcm.c: midi_write";
+ rLen = 0;
+ rLoc = 18396;
+ rType = 0;
+ vrLen = 1782;
+ vrLoc = 11284;
+ };
+ 3DA7161D06664C500002CE69 = {
+ fRef = 5851D523047955C800EE98CD;
+ isa = PBXTextBookmark;
+ name = "pminternal.h: 124";
+ rLen = 0;
+ rLoc = 6093;
+ rType = 0;
+ vrLen = 1762;
+ vrLoc = 4480;
+ };
+ 3DA7161E06664C500002CE69 = {
+ fRef = 5851D5310479560B00EE98CD;
+ isa = PBXTextBookmark;
+ name = "pmmacosxcm.c: midi_write";
+ rLen = 0;
+ rLoc = 18396;
+ rType = 0;
+ vrLen = 583;
+ vrLoc = 12640;
+ };
+ 3DA7161F06664C500002CE69 = {
+ fRef = 5851D523047955C800EE98CD;
+ isa = PBXTextBookmark;
+ name = "pminternal.h: 124";
+ rLen = 0;
+ rLoc = 6093;
+ rType = 0;
+ vrLen = 606;
+ vrLoc = 6296;
+ };
+ 3DA7162006664C500002CE69 = {
+ fRef = 5851D527047955C800EE98CD;
+ isa = PBXTextBookmark;
+ name = "portmidi.h: 174";
+ rLen = 7;
+ rLoc = 8744;
+ rType = 0;
+ vrLen = 466;
+ vrLoc = 8611;
+ };
+ 3DA7162106664C500002CE69 = {
+ fRef = 5851D5310479560B00EE98CD;
+ isa = PBXTextBookmark;
+ name = "pmmacosxcm.c: midi_write";
+ rLen = 0;
+ rLoc = 14327;
+ rType = 0;
+ vrLen = 1769;
+ vrLoc = 10723;
+ };
+ 3DA7162206664C500002CE69 = {
+ fRef = 5851D523047955C800EE98CD;
+ isa = PBXTextBookmark;
+ name = "pminternal.h: 133";
+ rLen = 17;
+ rLoc = 6353;
+ rType = 0;
+ vrLen = 2777;
+ vrLoc = 1303;
+ };
+ 3DA7162306664C500002CE69 = {
+ fRef = 5851D5310479560B00EE98CD;
+ isa = PBXTextBookmark;
+ name = "pmmacosxcm.c: midi_end_sysex";
+ rLen = 0;
+ rLoc = 17151;
+ rType = 0;
+ vrLen = 1470;
+ vrLoc = 14541;
+ };
+ 3DA7162406664C500002CE69 = {
+ fRef = 5851D523047955C800EE98CD;
+ isa = PBXTextBookmark;
+ name = "pminternal.h: 133";
+ rLen = 17;
+ rLoc = 6353;
+ rType = 0;
+ vrLen = 2610;
+ vrLoc = 1569;
+ };
+ 3DA716320666705B0002CE69 = {
+ fileReference = 5851D526047955C800EE98CD;
+ isa = PBXFileBreakpoint;
+ lineNumber = 839;
+ state = 1;
+ };
+ 3DA7740C0663E8EB0002CE69 = {
+ activeExec = 0;
+ executables = (
+ 3DA7740E0663E8EB0002CE69,
+ );
+ };
+ 3DA7740E0663E8EB0002CE69 = {
+ activeArgIndex = 2147483647;
+ activeArgIndices = (
+ );
+ argumentStrings = (
+ );
+ configStateDict = {
+ };
+ debuggerPlugin = GDBDebugging;
+ dylibVariantSuffix = "";
+ enableDebugStr = 1;
+ environmentEntries = (
+ );
+ isa = PBXExecutable;
+ name = test;
+ shlibInfoDictList = (
+ );
+ sourceDirectories = (
+ );
+ };
+ 3DDE89D906667BAD0002CE69 = {
+ fRef = 5851D523047955C800EE98CD;
+ isa = PBXTextBookmark;
+ name = "pminternal.h: none_synchronize";
+ rLen = 0;
+ rLoc = 6900;
+ rType = 0;
+ vrLen = 2193;
+ vrLoc = 0;
+ };
+ 5851D5180479552300EE98CD = {
+ activeBuildStyle = 5851D5160479552300EE98CD;
+ activeExecutable = 3D9CFCB1067657D50002CE69;
+ activeTarget = 3D9CFCAF067657D50002CE69;
+ addToTargets = (
+ 3DA7740C0663E8EB0002CE69,
+ );
+ breakpoints = (
+ 3DA715FB066511460002CE69,
+ 3DA7160D066548C80002CE69,
+ 3DA716320666705B0002CE69,
+ 3D9CFCA7067651E80002CE69,
+ 3D9CFCA90676535F0002CE69,
+ );
+ executables = (
+ 3DA7740E0663E8EB0002CE69,
+ 3DA712B50664C7C50002CE69,
+ 3DA712C20664C9B40002CE69,
+ 3DA712CF0664CB1B0002CE69,
+ 3D9CFCB1067657D50002CE69,
+ );
+ perUserDictionary = {
+ PBXPerProjectTemplateStateSaveDate = 108416809;
+ "PBXTemplateGeometry-F5314676015831810DCA290F" = {
+ ContentSize = "{685, 434}";
+ LeftSlideOut = {
+ Collapsed = NO;
+ Frame = "{{0, 23}, {685, 411}}";
+ Split0 = {
+ ActiveTab = 2;
+ ActiveTabName = PBXBuildResultsModule;
+ Collapsed = NO;
+ Frame = "{{0, 0}, {685, 411}}";
+ Split0 = {
+ Frame = "{{0, 212}, {685, 199}}";
+ };
+ SplitCount = 1;
+ Tab0 = {
+ Frame = "{{0, 0}, {952, 321}}";
+ };
+ Tab1 = {
+ Debugger = {
+ Collapsed = NO;
+ Frame = "{{0, 0}, {781, 452}}";
+ Split0 = {
+ Frame = "{{0, 24}, {781, 428}}";
+ Split0 = {
+ Frame = "{{0, 0}, {383, 428}}";
+ };
+ Split1 = {
+ DebugVariablesTableConfiguration = (
+ Name,
+ 123,
+ Value,
+ 85,
+ Summary,
+ 155.123,
+ );
+ Frame = "{{392, 0}, {389, 428}}";
+ };
+ SplitCount = 2;
+ };
+ SplitCount = 1;
+ Tab0 = {
+ Frame = "{{0, 0}, {100, 50}}";
+ };
+ Tab1 = {
+ Frame = "{{0, 0}, {100, 50}}";
+ };
+ TabCount = 2;
+ TabsVisible = YES;
+ };
+ Frame = "{{0, 0}, {781, 452}}";
+ LauncherConfigVersion = 7;
+ };
+ Tab2 = {
+ Frame = "{{0, 0}, {685, 215}}";
+ LauncherConfigVersion = 3;
+ Runner = {
+ Frame = "{{0, 0}, {685, 215}}";
+ };
+ };
+ Tab3 = {
+ BuildMessageFrame = "{{0, 0}, {687, 117}}";
+ BuildTranscriptFrame = "{{0, 126}, {687, 58}}";
+ BuildTranscriptFrameExpanded = YES;
+ Frame = "{{0, 0}, {685, 206}}";
+ };
+ Tab4 = {
+ Frame = "{{0, 0}, {612, 295}}";
+ };
+ TabCount = 5;
+ TabsVisible = NO;
+ };
+ SplitCount = 1;
+ Tab0 = {
+ Frame = "{{0, 0}, {300, 533}}";
+ GroupTreeTableConfiguration = (
+ TargetStatusColumn,
+ 18,
+ MainColumn,
+ 267,
+ );
+ };
+ Tab1 = {
+ ClassesFrame = "{{0, 0}, {280, 398}}";
+ ClassesTreeTableConfiguration = (
+ PBXBookColumnIdentifier,
+ 20,
+ PBXClassColumnIdentifier,
+ 237,
+ );
+ Frame = "{{0, 0}, {278, 659}}";
+ MembersFrame = "{{0, 407}, {280, 252}}";
+ MembersTreeTableConfiguration = (
+ PBXBookColumnIdentifier,
+ 20,
+ PBXMethodColumnIdentifier,
+ 236,
+ );
+ };
+ Tab2 = {
+ Frame = "{{0, 0}, {200, 100}}";
+ };
+ Tab3 = {
+ Frame = "{{0, 0}, {200, 100}}";
+ TargetTableConfiguration = (
+ ActiveObject,
+ 16,
+ ObjectNames,
+ 202.296,
+ );
+ };
+ Tab4 = {
+ BreakpointsTreeTableConfiguration = (
+ breakpointColumn,
+ 197,
+ enabledColumn,
+ 31,
+ );
+ Frame = "{{0, 0}, {250, 100}}";
+ };
+ TabCount = 5;
+ TabsVisible = NO;
+ };
+ NavBarShownByDefault = YES;
+ StatusViewVisible = YES;
+ Template = F5314676015831810DCA290F;
+ ToolbarVisible = YES;
+ WindowLocation = "{325, 250}";
+ };
+ "PBXTemplateGeometry-F5CA7EC9015C08ED0DCA290F" = {
+ ContentSize = "{665, 594}";
+ LeftSlideOut = {
+ Collapsed = NO;
+ Frame = "{{0, 0}, {665, 594}}";
+ Split0 = {
+ ActiveTab = 3;
+ ActiveTabName = PBXProjectFindModule;
+ Collapsed = NO;
+ Frame = "{{0, 0}, {665, 594}}";
+ Split0 = {
+ Frame = "{{0, 301}, {665, 293}}";
+ };
+ SplitCount = 1;
+ Tab0 = {
+ Frame = "{{0, 0}, {484, 208}}";
+ };
+ Tab1 = {
+ Debugger = {
+ Collapsed = NO;
+ Frame = "{{0, 0}, {664, 208}}";
+ Split0 = {
+ Frame = "{{0, 24}, {664, 184}}";
+ Split0 = {
+ Frame = "{{0, 0}, {325, 184}}";
+ };
+ Split1 = {
+ DebugVariablesTableConfiguration = (
+ Name,
+ 123,
+ Value,
+ 85,
+ Summary,
+ 96.123,
+ );
+ Frame = "{{334, 0}, {330, 184}}";
+ };
+ SplitCount = 2;
+ };
+ SplitCount = 1;
+ Tab0 = {
+ Frame = "{{0, 0}, {100, 50}}";
+ };
+ Tab1 = {
+ Frame = "{{0, 0}, {100, 50}}";
+ };
+ TabCount = 2;
+ TabsVisible = YES;
+ };
+ Frame = "{{0, 0}, {664, 208}}";
+ LauncherConfigVersion = 7;
+ };
+ Tab2 = {
+ Frame = "{{0, 0}, {664, 50}}";
+ LauncherConfigVersion = 3;
+ Runner = {
+ Frame = "{{0, 0}, {664, 50}}";
+ };
+ };
+ Tab3 = {
+ BuildMessageFrame = "{{0, 0}, {667, 206}}";
+ BuildTranscriptFrame = "{{0, 215}, {667, 85}}";
+ BuildTranscriptFrameExpanded = YES;
+ Frame = "{{0, 0}, {665, 298}}";
+ };
+ Tab4 = {
+ Frame = "{{0, 0}, {665, 295}}";
+ };
+ TabCount = 5;
+ TabsVisible = NO;
+ };
+ SplitCount = 1;
+ Tab0 = {
+ Frame = "{{0, 0}, {313, 531}}";
+ GroupTreeTableConfiguration = (
+ TargetStatusColumn,
+ 18,
+ MainColumn,
+ 280,
+ );
+ };
+ Tab1 = {
+ ClassesFrame = "{{0, 0}, {280, 398}}";
+ ClassesTreeTableConfiguration = (
+ PBXBookColumnIdentifier,
+ 20,
+ PBXClassColumnIdentifier,
+ 237,
+ );
+ Frame = "{{0, 0}, {278, 659}}";
+ MembersFrame = "{{0, 407}, {280, 252}}";
+ MembersTreeTableConfiguration = (
+ PBXBookColumnIdentifier,
+ 20,
+ PBXMethodColumnIdentifier,
+ 236,
+ );
+ };
+ Tab2 = {
+ Frame = "{{0, 0}, {200, 100}}";
+ };
+ Tab3 = {
+ Frame = "{{0, 0}, {200, 557}}";
+ TargetTableConfiguration = (
+ ActiveObject,
+ 16,
+ ObjectNames,
+ 202.296,
+ );
+ };
+ Tab4 = {
+ BreakpointsTreeTableConfiguration = (
+ breakpointColumn,
+ 197,
+ enabledColumn,
+ 31,
+ );
+ Frame = "{{0, 0}, {250, 100}}";
+ };
+ TabCount = 5;
+ TabsVisible = NO;
+ };
+ NavBarShownByDefault = YES;
+ StatusViewVisible = NO;
+ Template = F5CA7EC9015C08ED0DCA290F;
+ ToolbarVisible = NO;
+ WindowLocation = "{335, 130}";
+ };
+ PBXWorkspaceContents = (
+ {
+ LeftSlideOut = {
+ Split0 = {
+ Split0 = {
+ NavContent0 = {
+ bookmark = 3D9CFCD606765A7F0002CE69;
+ history = (
+ 3DA7161606664C500002CE69,
+ 3DDE89D906667BAD0002CE69,
+ 3D7903E9066690E00002CE69,
+ 3D9CFCBE06765A7F0002CE69,
+ 3D9CFCBF06765A7F0002CE69,
+ 3D9CFCC006765A7F0002CE69,
+ 3D9CFCC106765A7F0002CE69,
+ 3D9CFCC206765A7F0002CE69,
+ 3D9CFCC306765A7F0002CE69,
+ 3D9CFCC406765A7F0002CE69,
+ 3D9CFCC506765A7F0002CE69,
+ );
+ prevStack = (
+ 3DA7161A06664C500002CE69,
+ 3DA7161B06664C500002CE69,
+ 3DA7161C06664C500002CE69,
+ 3DA7161D06664C500002CE69,
+ 3DA7161E06664C500002CE69,
+ 3DA7161F06664C500002CE69,
+ 3DA7162006664C500002CE69,
+ 3DA7162106664C500002CE69,
+ 3DA7162206664C500002CE69,
+ 3DA7162306664C500002CE69,
+ 3DA7162406664C500002CE69,
+ 3D7903EC066690E00002CE69,
+ 3D7903ED066690E00002CE69,
+ 3D7903EE066690E00002CE69,
+ 3D7903EF066690E00002CE69,
+ 3D7903F0066690E00002CE69,
+ 3D7903F1066690E00002CE69,
+ 3D7903F2066690E00002CE69,
+ 3D7903F3066690E00002CE69,
+ 3D7903F4066690E00002CE69,
+ 3D9CFCC606765A7F0002CE69,
+ 3D9CFCC706765A7F0002CE69,
+ 3D9CFCC806765A7F0002CE69,
+ 3D9CFCC906765A7F0002CE69,
+ 3D9CFCCA06765A7F0002CE69,
+ 3D9CFCCB06765A7F0002CE69,
+ 3D9CFCCC06765A7F0002CE69,
+ 3D9CFCCD06765A7F0002CE69,
+ 3D9CFCCE06765A7F0002CE69,
+ 3D9CFCCF06765A7F0002CE69,
+ 3D9CFCD006765A7F0002CE69,
+ 3D9CFCD106765A7F0002CE69,
+ 3D9CFCD206765A7F0002CE69,
+ 3D9CFCD306765A7F0002CE69,
+ 3D9CFCD406765A7F0002CE69,
+ 3D9CFCD506765A7F0002CE69,
+ );
+ };
+ NavCount = 1;
+ NavGeometry0 = {
+ Frame = "{{0, 0}, {761, 657}}";
+ NavBarVisible = YES;
+ };
+ NavSplitVertical = NO;
+ };
+ SplitCount = 1;
+ Tab1 = {
+ Debugger = {
+ Split0 = {
+ SplitCount = 2;
+ };
+ SplitCount = 1;
+ TabCount = 2;
+ };
+ LauncherConfigVersion = 7;
+ };
+ Tab2 = {
+ LauncherConfigVersion = 3;
+ Runner = {
+ };
+ };
+ TabCount = 5;
+ };
+ SplitCount = 1;
+ Tab1 = {
+ OptionsSetName = "Hierarchy, all classes";
+ };
+ TabCount = 5;
+ };
+ },
+ {
+ LeftSlideOut = {
+ Split0 = {
+ Split0 = {
+ NavContent0 = {
+ bookmark = 3D9CFCD806765A7F0002CE69;
+ history = (
+ 3D9CFCD706765A7F0002CE69,
+ );
+ };
+ NavCount = 1;
+ NavGeometry0 = {
+ Frame = "{{0, 0}, {620, 353}}";
+ NavBarVisible = YES;
+ };
+ NavSplitVertical = NO;
+ };
+ SplitCount = 1;
+ Tab1 = {
+ Debugger = {
+ Split0 = {
+ SplitCount = 2;
+ };
+ SplitCount = 1;
+ TabCount = 2;
+ };
+ LauncherConfigVersion = 7;
+ };
+ Tab2 = {
+ LauncherConfigVersion = 3;
+ Runner = {
+ };
+ };
+ TabCount = 5;
+ };
+ SplitCount = 1;
+ Tab1 = {
+ OptionsSetName = "Hierarchy, all classes";
+ };
+ TabCount = 5;
+ };
+ },
+ );
+ PBXWorkspaceGeometries = (
+ {
+ ContentSize = "{1024, 680}";
+ LeftSlideOut = {
+ ActiveTab = 3;
+ ActiveTabName = PBXTargetTreeModule;
+ Collapsed = NO;
+ Frame = "{{0, 23}, {1024, 657}}";
+ Split0 = {
+ Collapsed = NO;
+ Frame = "{{263, 0}, {761, 657}}";
+ Split0 = {
+ Frame = "{{0, 0}, {761, 657}}";
+ };
+ SplitCount = 1;
+ Tab0 = {
+ Frame = "{{0, 0}, {681, 289}}";
+ };
+ Tab1 = {
+ Debugger = {
+ Collapsed = NO;
+ Frame = "{{0, 0}, {681, 150}}";
+ Split0 = {
+ Frame = "{{0, 24}, {681, 126}}";
+ Split0 = {
+ Frame = "{{0, 0}, {333, 126}}";
+ };
+ Split1 = {
+ DebugVariablesTableConfiguration = (
+ Name,
+ 123,
+ Value,
+ 85,
+ Summary,
+ 105.123,
+ );
+ Frame = "{{342, 0}, {339, 126}}";
+ };
+ SplitCount = 2;
+ };
+ SplitCount = 1;
+ Tab0 = {
+ Frame = "{{0, 0}, {100, 50}}";
+ };
+ Tab1 = {
+ Frame = "{{0, 0}, {100, 50}}";
+ };
+ TabCount = 2;
+ TabsVisible = YES;
+ };
+ Frame = "{{0, 0}, {681, 120}}";
+ LauncherConfigVersion = 7;
+ };
+ Tab2 = {
+ Frame = "{{0, 0}, {681, 234}}";
+ LauncherConfigVersion = 3;
+ Runner = {
+ Frame = "{{0, 0}, {681, 234}}";
+ };
+ };
+ Tab3 = {
+ BuildMessageFrame = "{{0, 0}, {683, 163}}";
+ BuildTranscriptFrame = "{{0, 172}, {683, 68}}";
+ BuildTranscriptFrameExpanded = YES;
+ Frame = "{{0, 0}, {681, 238}}";
+ };
+ Tab4 = {
+ Frame = "{{0, 0}, {612, 295}}";
+ };
+ TabCount = 5;
+ TabsVisible = NO;
+ };
+ SplitCount = 1;
+ Tab0 = {
+ Frame = "{{0, 0}, {260, 657}}";
+ GroupTreeTableConfiguration = (
+ TargetStatusColumn,
+ 18,
+ MainColumn,
+ 227,
+ );
+ };
+ Tab1 = {
+ ClassesFrame = "{{0, 0}, {250, 395}}";
+ ClassesTreeTableConfiguration = (
+ PBXBookColumnIdentifier,
+ 20,
+ PBXClassColumnIdentifier,
+ 207,
+ );
+ Frame = "{{0, 0}, {248, 657}}";
+ MembersFrame = "{{0, 404}, {250, 253}}";
+ MembersTreeTableConfiguration = (
+ PBXBookColumnIdentifier,
+ 20,
+ PBXMethodColumnIdentifier,
+ 206,
+ );
+ };
+ Tab2 = {
+ Frame = "{{0, 0}, {217, 657}}";
+ };
+ Tab3 = {
+ Frame = "{{0, 0}, {239, 657}}";
+ TargetTableConfiguration = (
+ ActiveObject,
+ 16,
+ ObjectNames,
+ 206.296,
+ );
+ };
+ Tab4 = {
+ BreakpointsTreeTableConfiguration = (
+ breakpointColumn,
+ 197,
+ enabledColumn,
+ 31,
+ );
+ Frame = "{{0, 0}, {250, 657}}";
+ };
+ TabCount = 5;
+ TabsVisible = YES;
+ };
+ NavBarShownByDefault = YES;
+ StatusViewVisible = YES;
+ Template = 64ABBB4501FA494900185B06;
+ ToolbarVisible = YES;
+ WindowLocation = "{0, 4}";
+ },
+ {
+ ContentSize = "{644, 662}";
+ LeftSlideOut = {
+ Collapsed = NO;
+ Frame = "{{0, 23}, {644, 639}}";
+ Split0 = {
+ ActiveTab = 0;
+ ActiveTabName = PBXDebugSessionModule;
+ Collapsed = NO;
+ Frame = "{{24, 0}, {620, 639}}";
+ Split0 = {
+ Frame = "{{0, 286}, {620, 353}}";
+ };
+ SplitCount = 1;
+ Tab0 = {
+ Frame = "{{0, 0}, {749, 267}}";
+ };
+ Tab1 = {
+ Debugger = {
+ ActiveTab = 0;
+ ActiveTabName = PBXDebugCLIModule;
+ Collapsed = NO;
+ Frame = "{{0, 0}, {620, 280}}";
+ Split0 = {
+ Frame = "{{0, 115}, {620, 165}}";
+ Split0 = {
+ Frame = "{{0, 0}, {297, 165}}";
+ };
+ Split1 = {
+ DebugVariablesTableConfiguration = (
+ Name,
+ 123,
+ Value,
+ 85,
+ Summary,
+ 80.123,
+ );
+ Frame = "{{306, 0}, {314, 165}}";
+ };
+ SplitCount = 2;
+ };
+ SplitCount = 1;
+ Tab0 = {
+ Frame = "{{0, 0}, {620, 91}}";
+ };
+ Tab1 = {
+ Frame = "{{0, 0}, {100, 50}}";
+ };
+ TabCount = 2;
+ TabsVisible = YES;
+ };
+ Frame = "{{0, 0}, {620, 280}}";
+ LauncherConfigVersion = 7;
+ };
+ Tab2 = {
+ Frame = "{{0, 0}, {664, 50}}";
+ LauncherConfigVersion = 3;
+ Runner = {
+ Frame = "{{0, 0}, {664, 50}}";
+ };
+ };
+ Tab3 = {
+ BuildMessageFrame = "{{0, 0}, {614, 203}}";
+ BuildTranscriptFrame = "{{0, 212}, {614, 85}}";
+ BuildTranscriptFrameExpanded = YES;
+ Frame = "{{0, 0}, {612, 295}}";
+ };
+ Tab4 = {
+ Frame = "{{0, 0}, {612, 295}}";
+ };
+ TabCount = 5;
+ TabsVisible = NO;
+ };
+ SplitCount = 1;
+ Tab0 = {
+ Frame = "{{0, 0}, {313, 531}}";
+ GroupTreeTableConfiguration = (
+ TargetStatusColumn,
+ 18,
+ MainColumn,
+ 280,
+ );
+ };
+ Tab1 = {
+ ClassesFrame = "{{0, 0}, {280, 398}}";
+ ClassesTreeTableConfiguration = (
+ PBXBookColumnIdentifier,
+ 20,
+ PBXClassColumnIdentifier,
+ 237,
+ );
+ Frame = "{{0, 0}, {278, 659}}";
+ MembersFrame = "{{0, 407}, {280, 252}}";
+ MembersTreeTableConfiguration = (
+ PBXBookColumnIdentifier,
+ 20,
+ PBXMethodColumnIdentifier,
+ 236,
+ );
+ };
+ Tab2 = {
+ Frame = "{{0, 0}, {200, 100}}";
+ };
+ Tab3 = {
+ Frame = "{{0, 0}, {200, 557}}";
+ TargetTableConfiguration = (
+ ActiveObject,
+ 16,
+ ObjectNames,
+ 202.296,
+ );
+ };
+ Tab4 = {
+ BreakpointsTreeTableConfiguration = (
+ breakpointColumn,
+ 197,
+ enabledColumn,
+ 31,
+ );
+ Frame = "{{0, 0}, {250, 100}}";
+ };
+ TabCount = 5;
+ TabsVisible = YES;
+ };
+ NavBarShownByDefault = YES;
+ StatusViewVisible = YES;
+ Template = F5CA7ECC015C09990DCA290F;
+ ToolbarVisible = YES;
+ WindowLocation = "{48, 17}";
+ },
+ );
+ PBXWorkspaceStateSaveDate = 108416809;
+ };
+ perUserProjectItems = {
+ 3D7903E9066690E00002CE69 = 3D7903E9066690E00002CE69;
+ 3D7903EC066690E00002CE69 = 3D7903EC066690E00002CE69;
+ 3D7903ED066690E00002CE69 = 3D7903ED066690E00002CE69;
+ 3D7903EE066690E00002CE69 = 3D7903EE066690E00002CE69;
+ 3D7903EF066690E00002CE69 = 3D7903EF066690E00002CE69;
+ 3D7903F0066690E00002CE69 = 3D7903F0066690E00002CE69;
+ 3D7903F1066690E00002CE69 = 3D7903F1066690E00002CE69;
+ 3D7903F2066690E00002CE69 = 3D7903F2066690E00002CE69;
+ 3D7903F3066690E00002CE69 = 3D7903F3066690E00002CE69;
+ 3D7903F4066690E00002CE69 = 3D7903F4066690E00002CE69;
+ 3D9CFCBE06765A7F0002CE69 = 3D9CFCBE06765A7F0002CE69;
+ 3D9CFCBF06765A7F0002CE69 = 3D9CFCBF06765A7F0002CE69;
+ 3D9CFCC006765A7F0002CE69 = 3D9CFCC006765A7F0002CE69;
+ 3D9CFCC106765A7F0002CE69 = 3D9CFCC106765A7F0002CE69;
+ 3D9CFCC206765A7F0002CE69 = 3D9CFCC206765A7F0002CE69;
+ 3D9CFCC306765A7F0002CE69 = 3D9CFCC306765A7F0002CE69;
+ 3D9CFCC406765A7F0002CE69 = 3D9CFCC406765A7F0002CE69;
+ 3D9CFCC506765A7F0002CE69 = 3D9CFCC506765A7F0002CE69;
+ 3D9CFCC606765A7F0002CE69 = 3D9CFCC606765A7F0002CE69;
+ 3D9CFCC706765A7F0002CE69 = 3D9CFCC706765A7F0002CE69;
+ 3D9CFCC806765A7F0002CE69 = 3D9CFCC806765A7F0002CE69;
+ 3D9CFCC906765A7F0002CE69 = 3D9CFCC906765A7F0002CE69;
+ 3D9CFCCA06765A7F0002CE69 = 3D9CFCCA06765A7F0002CE69;
+ 3D9CFCCB06765A7F0002CE69 = 3D9CFCCB06765A7F0002CE69;
+ 3D9CFCCC06765A7F0002CE69 = 3D9CFCCC06765A7F0002CE69;
+ 3D9CFCCD06765A7F0002CE69 = 3D9CFCCD06765A7F0002CE69;
+ 3D9CFCCE06765A7F0002CE69 = 3D9CFCCE06765A7F0002CE69;
+ 3D9CFCCF06765A7F0002CE69 = 3D9CFCCF06765A7F0002CE69;
+ 3D9CFCD006765A7F0002CE69 = 3D9CFCD006765A7F0002CE69;
+ 3D9CFCD106765A7F0002CE69 = 3D9CFCD106765A7F0002CE69;
+ 3D9CFCD206765A7F0002CE69 = 3D9CFCD206765A7F0002CE69;
+ 3D9CFCD306765A7F0002CE69 = 3D9CFCD306765A7F0002CE69;
+ 3D9CFCD406765A7F0002CE69 = 3D9CFCD406765A7F0002CE69;
+ 3D9CFCD506765A7F0002CE69 = 3D9CFCD506765A7F0002CE69;
+ 3D9CFCD606765A7F0002CE69 = 3D9CFCD606765A7F0002CE69;
+ 3D9CFCD706765A7F0002CE69 = 3D9CFCD706765A7F0002CE69;
+ 3D9CFCD806765A7F0002CE69 = 3D9CFCD806765A7F0002CE69;
+ 3DA7161606664C500002CE69 = 3DA7161606664C500002CE69;
+ 3DA7161A06664C500002CE69 = 3DA7161A06664C500002CE69;
+ 3DA7161B06664C500002CE69 = 3DA7161B06664C500002CE69;
+ 3DA7161C06664C500002CE69 = 3DA7161C06664C500002CE69;
+ 3DA7161D06664C500002CE69 = 3DA7161D06664C500002CE69;
+ 3DA7161E06664C500002CE69 = 3DA7161E06664C500002CE69;
+ 3DA7161F06664C500002CE69 = 3DA7161F06664C500002CE69;
+ 3DA7162006664C500002CE69 = 3DA7162006664C500002CE69;
+ 3DA7162106664C500002CE69 = 3DA7162106664C500002CE69;
+ 3DA7162206664C500002CE69 = 3DA7162206664C500002CE69;
+ 3DA7162306664C500002CE69 = 3DA7162306664C500002CE69;
+ 3DA7162406664C500002CE69 = 3DA7162406664C500002CE69;
+ 3DDE89D906667BAD0002CE69 = 3DDE89D906667BAD0002CE69;
+ };
+ projectwideBuildSettings = {
+ };
+ wantsIndex = 1;
+ wantsSCM = -1;
+ };
+ 5851D5370479562300EE98CD = {
+ activeExec = 0;
+ };
+}
diff --git a/pd/portmidi/pm_mac/pm_test.pbproj/project.pbxproj b/pd/portmidi/pm_mac/pm_test.pbproj/project.pbxproj
new file mode 100644
index 00000000..8e25d1f3
--- /dev/null
+++ b/pd/portmidi/pm_mac/pm_test.pbproj/project.pbxproj
@@ -0,0 +1,337 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 38;
+ objects = {
+ 014CEA490018CE3211CA2923 = {
+ buildRules = (
+ );
+ buildSettings = {
+ COPY_PHASE_STRIP = NO;
+ OPTIMIZATION_CFLAGS = "-O0";
+ };
+ isa = PBXBuildStyle;
+ name = Development;
+ };
+ 014CEA4A0018CE3211CA2923 = {
+ buildRules = (
+ );
+ buildSettings = {
+ COPY_PHASE_STRIP = YES;
+ };
+ isa = PBXBuildStyle;
+ name = Deployment;
+ };
+//010
+//011
+//012
+//013
+//014
+//030
+//031
+//032
+//033
+//034
+ 034768E2FF38A6DC11DB9C8B = {
+ isa = PBXExecutableFileReference;
+ path = pm_test;
+ refType = 3;
+ };
+//030
+//031
+//032
+//033
+//034
+//080
+//081
+//082
+//083
+//084
+ 08FB7793FE84155DC02AAC07 = {
+ buildStyles = (
+ 014CEA490018CE3211CA2923,
+ 014CEA4A0018CE3211CA2923,
+ );
+ hasScannedForEncodings = 1;
+ isa = PBXProject;
+ mainGroup = 08FB7794FE84155DC02AAC07;
+ projectDirPath = "";
+ targets = (
+ 08FB779FFE84155DC02AAC07,
+ );
+ };
+ 08FB7794FE84155DC02AAC07 = {
+ children = (
+ 08FB7795FE84155DC02AAC07,
+ 08FB779DFE84155DC02AAC07,
+ 19C28FBDFE9D53C911CA2CBB,
+ );
+ isa = PBXGroup;
+ name = pm_test;
+ refType = 4;
+ };
+ 08FB7795FE84155DC02AAC07 = {
+ children = (
+ 5851D5650479591100EE98CD,
+ 58ED5B7E047D3A1200B92E62,
+ 5851D56F04795A1A00EE98CD,
+ 5851D5690479593D00EE98CD,
+ 5851D57104795A3C00EE98CD,
+ 5851D56B0479594B00EE98CD,
+ );
+ isa = PBXGroup;
+ name = Source;
+ refType = 4;
+ };
+ 08FB779DFE84155DC02AAC07 = {
+ children = (
+ 09AB6884FE841BABC02AAC07,
+ 58058934047C96F0009FBA67,
+ 5851D5670479592300EE98CD,
+ 5851D56D0479596A00EE98CD,
+ );
+ isa = PBXGroup;
+ name = "External Frameworks and Libraries";
+ refType = 4;
+ };
+ 08FB779FFE84155DC02AAC07 = {
+ buildPhases = (
+ 08FB77A0FE84155DC02AAC07,
+ 08FB77A1FE84155DC02AAC07,
+ 08FB77A3FE84155DC02AAC07,
+ 08FB77A5FE84155DC02AAC07,
+ C6859E980290922304C91782,
+ );
+ buildSettings = {
+ FRAMEWORK_SEARCH_PATHS = "";
+ HEADER_SEARCH_PATHS = "";
+ INSTALL_PATH = "$(HOME)/bin";
+ LIBRARY_SEARCH_PATHS = /Users/zk/Downloads/portmidi.1/pm_mac/build;
+ OTHER_CFLAGS = "";
+ OTHER_LDFLAGS = "";
+ OTHER_REZFLAGS = "";
+ PRODUCT_NAME = pm_test;
+ REZ_EXECUTABLE = YES;
+ SECTORDER_FLAGS = "";
+ WARNING_CFLAGS = "-Wmost -Wno-four-char-constants -Wno-unknown-pragmas";
+ };
+ dependencies = (
+ );
+ isa = PBXToolTarget;
+ name = pm_test;
+ productInstallPath = "$(HOME)/bin";
+ productName = pm_test;
+ productReference = 034768E2FF38A6DC11DB9C8B;
+ };
+ 08FB77A0FE84155DC02AAC07 = {
+ buildActionMask = 2147483647;
+ files = (
+ 5851D56A0479593D00EE98CD,
+ 5851D56C0479594B00EE98CD,
+ 5851D57204795A3C00EE98CD,
+ );
+ isa = PBXHeadersBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 08FB77A1FE84155DC02AAC07 = {
+ buildActionMask = 2147483647;
+ files = (
+ 58ED5C7B047D697A00B92E62,
+ );
+ isa = PBXSourcesBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 08FB77A3FE84155DC02AAC07 = {
+ buildActionMask = 2147483647;
+ files = (
+ 09AB6885FE841BABC02AAC07,
+ 5851D5680479592300EE98CD,
+ 5851D56E0479596A00EE98CD,
+ 58058935047C96F0009FBA67,
+ );
+ isa = PBXFrameworksBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 08FB77A5FE84155DC02AAC07 = {
+ buildActionMask = 2147483647;
+ files = (
+ );
+ isa = PBXRezBuildPhase;
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+//080
+//081
+//082
+//083
+//084
+//090
+//091
+//092
+//093
+//094
+ 09AB6884FE841BABC02AAC07 = {
+ isa = PBXFrameworkReference;
+ name = CoreFoundation.framework;
+ path = /System/Library/Frameworks/CoreFoundation.framework;
+ refType = 0;
+ };
+ 09AB6885FE841BABC02AAC07 = {
+ fileRef = 09AB6884FE841BABC02AAC07;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+//090
+//091
+//092
+//093
+//094
+//190
+//191
+//192
+//193
+//194
+ 19C28FBDFE9D53C911CA2CBB = {
+ children = (
+ 034768E2FF38A6DC11DB9C8B,
+ );
+ isa = PBXGroup;
+ name = Products;
+ refType = 4;
+ };
+//190
+//191
+//192
+//193
+//194
+//580
+//581
+//582
+//583
+//584
+ 58058934047C96F0009FBA67 = {
+ isa = PBXFrameworkReference;
+ name = CoreAudio.framework;
+ path = /System/Library/Frameworks/CoreAudio.framework;
+ refType = 0;
+ };
+ 58058935047C96F0009FBA67 = {
+ fileRef = 58058934047C96F0009FBA67;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 5851D5650479591100EE98CD = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ name = test.c;
+ path = ../pm_test/test.c;
+ refType = 2;
+ };
+ 5851D5670479592300EE98CD = {
+ isa = PBXFrameworkReference;
+ name = CoreMIDI.framework;
+ path = /System/Library/Frameworks/CoreMIDI.framework;
+ refType = 0;
+ };
+ 5851D5680479592300EE98CD = {
+ fileRef = 5851D5670479592300EE98CD;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 5851D5690479593D00EE98CD = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ name = portmidi.h;
+ path = ../pm_common/portmidi.h;
+ refType = 2;
+ };
+ 5851D56A0479593D00EE98CD = {
+ fileRef = 5851D5690479593D00EE98CD;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 5851D56B0479594B00EE98CD = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ name = porttime.h;
+ path = ../porttime/porttime.h;
+ refType = 2;
+ };
+ 5851D56C0479594B00EE98CD = {
+ fileRef = 5851D56B0479594B00EE98CD;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 5851D56D0479596A00EE98CD = {
+ isa = PBXFileReference;
+ name = libportmidi.a;
+ path = build/libportmidi.a;
+ refType = 4;
+ };
+ 5851D56E0479596A00EE98CD = {
+ fileRef = 5851D56D0479596A00EE98CD;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 5851D56F04795A1A00EE98CD = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ name = midithread.c;
+ path = ../pm_test/midithread.c;
+ refType = 2;
+ };
+ 5851D57104795A3C00EE98CD = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ name = pmutil.h;
+ path = ../pm_common/pmutil.h;
+ refType = 2;
+ };
+ 5851D57204795A3C00EE98CD = {
+ fileRef = 5851D57104795A3C00EE98CD;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+ 58ED5B7E047D3A1200B92E62 = {
+ fileEncoding = 30;
+ isa = PBXFileReference;
+ name = latency.c;
+ path = ../pm_test/latency.c;
+ refType = 2;
+ };
+ 58ED5C7B047D697A00B92E62 = {
+ fileRef = 5851D5650479591100EE98CD;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
+//580
+//581
+//582
+//583
+//584
+//C60
+//C61
+//C62
+//C63
+//C64
+ C6859E980290922304C91782 = {
+ buildActionMask = 8;
+ dstPath = /usr/share/man/man1/;
+ dstSubfolderSpec = 0;
+ files = (
+ );
+ isa = PBXCopyFilesBuildPhase;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ };
+ rootObject = 08FB7793FE84155DC02AAC07;
+}
diff --git a/pd/portmidi/pm_mac/pmmac.c b/pd/portmidi/pm_mac/pmmac.c
new file mode 100644
index 00000000..fbf31c83
--- /dev/null
+++ b/pd/portmidi/pm_mac/pmmac.c
@@ -0,0 +1,42 @@
+/* pmmac.c -- PortMidi os-dependent code */
+
+/* This file only needs to implement:
+pm_init(), which calls various routines to register the
+available midi devices,
+Pm_GetDefaultInputDeviceID(), and
+Pm_GetDefaultOutputDeviceID().
+It is seperate from pmmacosxcm because we might want to register
+non-CoreMIDI devices.
+*/
+
+#include "stdlib.h"
+#include "portmidi.h"
+#include "pmmacosxcm.h"
+
+PmError pm_init()
+{
+ return pm_macosxcm_init();
+}
+
+void pm_term(void)
+{
+ pm_macosxcm_term();
+}
+
+PmDeviceID pm_default_input_device_id = -1;
+PmDeviceID pm_default_output_device_id = -1;
+
+PmDeviceID Pm_GetDefaultInputDeviceID()
+{
+ return pm_default_input_device_id;
+}
+
+PmDeviceID Pm_GetDefaultOutputDeviceID() {
+ return pm_default_output_device_id;
+}
+
+void *pm_alloc(size_t s) { return malloc(s); }
+
+void pm_free(void *ptr) { free(ptr); }
+
+
diff --git a/pd/portmidi/pm_mac/pmmac.h b/pd/portmidi/pm_mac/pmmac.h
new file mode 100644
index 00000000..2d714254
--- /dev/null
+++ b/pd/portmidi/pm_mac/pmmac.h
@@ -0,0 +1,4 @@
+/* pmmac.h */
+
+extern PmDeviceID pm_default_input_device_id;
+extern PmDeviceID pm_default_output_device_id; \ No newline at end of file
diff --git a/pd/portmidi/pm_mac/pmmacosxcm.c b/pd/portmidi/pm_mac/pmmacosxcm.c
new file mode 100644
index 00000000..55b9b084
--- /dev/null
+++ b/pd/portmidi/pm_mac/pmmacosxcm.c
@@ -0,0 +1,701 @@
+/*
+ * Platform interface to the MacOS X CoreMIDI framework
+ *
+ * Jon Parise <jparise@cmu.edu>
+ * and subsequent work by Andrew Zeldis and Zico Kolter
+ * and Roger B. Dannenberg
+ *
+ * $Id: pmmacosxcm.c,v 1.1 2005-12-15 00:56:57 eighthave Exp $
+ */
+
+/* Notes:
+ since the input and output streams are represented by MIDIEndpointRef
+ values and almost no other state, we store the MIDIEndpointRef on
+ descriptors[midi->device_id].descriptor. The only other state we need
+ is for errors: we need to know if there is an error and if so, what is
+ the error text. As in pmwinmm.c, we use a structure with two kinds of
+ host error: "error" and "callback_error". That way, asynchronous callbacks
+ do not interfere with other error information.
+
+ OS X does not seem to have an error-code-to-text function, so we will
+ just use text messages instead of error codes.
+ */
+
+#include <stdlib.h>
+
+#include "portmidi.h"
+#include "pminternal.h"
+#include "porttime.h"
+#include "pmmac.h"
+#include "pmmacosxcm.h"
+
+#include <stdio.h>
+#include <string.h>
+
+#include <CoreServices/CoreServices.h>
+#include <CoreMIDI/MIDIServices.h>
+#include <CoreAudio/HostTime.h>
+
+#define PACKET_BUFFER_SIZE 1024
+
+/* this is very strange: if I put in a reasonable
+ number here, e.g. 128, which would allow sysex data
+ to be sent 128 bytes at a time, then I lose sysex
+ data in my loopback test. With a buffer size of 4,
+ we put at most 4 bytes in a packet (but maybe many
+ packets in a packetList), and everything works fine.
+ */
+#define SYSEX_BUFFER_SIZE 4
+
+#define VERBOSE_ON 1
+#define VERBOSE if (VERBOSE_ON)
+
+#define MIDI_SYSEX 0xf0
+#define MIDI_EOX 0xf7
+#define MIDI_STATUS_MASK 0x80
+
+static MIDIClientRef client = NULL; /* Client handle to the MIDI server */
+static MIDIPortRef portIn = NULL; /* Input port handle */
+static MIDIPortRef portOut = NULL; /* Output port handle */
+
+extern pm_fns_node pm_macosx_in_dictionary;
+extern pm_fns_node pm_macosx_out_dictionary;
+
+typedef struct midi_macosxcm_struct {
+ unsigned long sync_time; /* when did we last determine delta? */
+ UInt64 delta; /* difference between stream time and real time in ns */
+ UInt64 last_time; /* last output time */
+ int first_message; /* tells midi_write to sychronize timestamps */
+ int sysex_mode; /* middle of sending sysex */
+ unsigned long sysex_word; /* accumulate data when receiving sysex */
+ unsigned int sysex_byte_count; /* count how many received */
+ char error[PM_HOST_ERROR_MSG_LEN];
+ char callback_error[PM_HOST_ERROR_MSG_LEN];
+ Byte packetBuffer[PACKET_BUFFER_SIZE];
+ MIDIPacketList *packetList; /* a pointer to packetBuffer */
+ MIDIPacket *packet;
+ Byte sysex_buffer[SYSEX_BUFFER_SIZE]; /* temp storage for sysex data */
+ MIDITimeStamp sysex_timestamp; /* timestamp to use with sysex data */
+} midi_macosxcm_node, *midi_macosxcm_type;
+
+/* private function declarations */
+MIDITimeStamp timestamp_pm_to_cm(PmTimestamp timestamp);
+PmTimestamp timestamp_cm_to_pm(MIDITimeStamp timestamp);
+
+char* cm_get_full_endpoint_name(MIDIEndpointRef endpoint);
+
+
+static int
+midi_length(long msg)
+{
+ int status, high, low;
+ static int high_lengths[] = {
+ 1, 1, 1, 1, 1, 1, 1, 1, /* 0x00 through 0x70 */
+ 3, 3, 3, 3, 2, 2, 3, 1 /* 0x80 through 0xf0 */
+ };
+ static int low_lengths[] = {
+ 1, 1, 3, 2, 1, 1, 1, 1, /* 0xf0 through 0xf8 */
+ 1, 1, 1, 1, 1, 1, 1, 1 /* 0xf9 through 0xff */
+ };
+
+ status = msg & 0xFF;
+ high = status >> 4;
+ low = status & 15;
+
+ return (high != 0xF0) ? high_lengths[high] : low_lengths[low];
+}
+
+static PmTimestamp midi_synchronize(PmInternal *midi)
+{
+ midi_macosxcm_type m = (midi_macosxcm_type) midi->descriptor;
+ UInt64 pm_stream_time_2 =
+ AudioConvertHostTimeToNanos(AudioGetCurrentHostTime());
+ PmTimestamp real_time;
+ UInt64 pm_stream_time;
+ /* if latency is zero and this is an output, there is no
+ time reference and midi_synchronize should never be called */
+ assert(midi->time_proc);
+ assert(!(midi->write_flag && midi->latency == 0));
+ do {
+ /* read real_time between two reads of stream time */
+ pm_stream_time = pm_stream_time_2;
+ real_time = (*midi->time_proc)(midi->time_info);
+ pm_stream_time_2 = AudioConvertHostTimeToNanos(AudioGetCurrentHostTime());
+ /* repeat if more than 0.5 ms has elapsed */
+ } while (pm_stream_time_2 > pm_stream_time + 500000);
+ m->delta = pm_stream_time - ((UInt64) real_time * (UInt64) 1000000);
+ m->sync_time = real_time;
+ return real_time;
+}
+
+
+/* called when MIDI packets are received */
+static void
+readProc(const MIDIPacketList *newPackets, void *refCon, void *connRefCon)
+{
+ PmInternal *midi;
+ midi_macosxcm_type m;
+ PmEvent event;
+ MIDIPacket *packet;
+ unsigned int packetIndex;
+ unsigned long now;
+ unsigned int status;
+
+ /* Retrieve the context for this connection */
+ midi = (PmInternal *) connRefCon;
+ m = (midi_macosxcm_type) midi->descriptor;
+ assert(m);
+
+ /* synchronize time references every 100ms */
+ now = (*midi->time_proc)(midi->time_info);
+ if (m->first_message || m->sync_time + 100 /*ms*/ < now) {
+ /* time to resync */
+ now = midi_synchronize(midi);
+ m->first_message = FALSE;
+ }
+
+ packet = (MIDIPacket *) &newPackets->packet[0];
+ /* printf("readproc packet status %x length %d\n", packet->data[0], packet->length); */
+ for (packetIndex = 0; packetIndex < newPackets->numPackets; packetIndex++) {
+ /* Set the timestamp and dispatch this message */
+ event.timestamp =
+ (AudioConvertHostTimeToNanos(packet->timeStamp) - m->delta) /
+ (UInt64) 1000000;
+ status = packet->data[0];
+ /* process packet as sysex data if it begins with MIDI_SYSEX, or
+ MIDI_EOX or non-status byte */
+ if (status == MIDI_SYSEX || status == MIDI_EOX ||
+ !(status & MIDI_STATUS_MASK)) {
+ int i = 0;
+ while (i < packet->length) {
+ pm_read_byte(midi, packet->data[i], event.timestamp);
+ i++;
+ }
+ } else {
+ /* Build the PmMessage for the PmEvent structure */
+ switch (packet->length) {
+ case 1:
+ event.message = Pm_Message(packet->data[0], 0, 0);
+ break;
+ case 2:
+ event.message = Pm_Message(packet->data[0],
+ packet->data[1], 0);
+ break;
+ case 3:
+ event.message = Pm_Message(packet->data[0],
+ packet->data[1],
+ packet->data[2]);
+ break;
+ default:
+ /* Skip packets that are too large to fit in a PmMessage */
+#ifdef DEBUG
+ printf("PortMidi debug msg: large packet skipped\n");
+#endif
+ continue;
+ }
+ pm_read_short(midi, &event);
+ }
+ packet = MIDIPacketNext(packet);
+ }
+}
+
+static PmError
+midi_in_open(PmInternal *midi, void *driverInfo)
+{
+ MIDIEndpointRef endpoint;
+ midi_macosxcm_type m;
+ OSStatus macHostError;
+
+ /* insure that we have a time_proc for timing */
+ if (midi->time_proc == NULL) {
+ if (!Pt_Started())
+ Pt_Start(1, 0, 0);
+ /* time_get does not take a parameter, so coerce */
+ midi->time_proc = (PmTimeProcPtr) Pt_Time;
+ }
+
+ endpoint = (MIDIEndpointRef) descriptors[midi->device_id].descriptor;
+ if (endpoint == NULL) {
+ return pmInvalidDeviceId;
+ }
+
+ m = (midi_macosxcm_type) pm_alloc(sizeof(midi_macosxcm_node)); /* create */
+ midi->descriptor = m;
+ if (!m) {
+ return pmInsufficientMemory;
+ }
+ m->error[0] = 0;
+ m->callback_error[0] = 0;
+ m->sync_time = 0;
+ m->delta = 0;
+ m->last_time = 0;
+ m->first_message = TRUE;
+ m->sysex_mode = FALSE;
+ m->sysex_word = 0;
+ m->sysex_byte_count = 0;
+ m->packetList = NULL;
+ m->packet = NULL;
+
+ macHostError = MIDIPortConnectSource(portIn, endpoint, midi);
+ if (macHostError != noErr) {
+ pm_hosterror = macHostError;
+ sprintf(pm_hosterror_text,
+ "Host error %ld: MIDIPortConnectSource() in midi_in_open()",
+ macHostError);
+ midi->descriptor = NULL;
+ pm_free(m);
+ return pmHostError;
+ }
+
+ return pmNoError;
+}
+
+static PmError
+midi_in_close(PmInternal *midi)
+{
+ MIDIEndpointRef endpoint;
+ OSStatus macHostError;
+ PmError err = pmNoError;
+
+ midi_macosxcm_type m = (midi_macosxcm_type) midi->descriptor;
+
+ if (!m) return pmBadPtr;
+
+ endpoint = (MIDIEndpointRef) descriptors[midi->device_id].descriptor;
+ if (endpoint == NULL) {
+ pm_hosterror = pmBadPtr;
+ }
+
+ /* shut off the incoming messages before freeing data structures */
+ macHostError = MIDIPortDisconnectSource(portIn, endpoint);
+ if (macHostError != noErr) {
+ pm_hosterror = macHostError;
+ sprintf(pm_hosterror_text,
+ "Host error %ld: MIDIPortDisconnectSource() in midi_in_close()",
+ macHostError);
+ err = pmHostError;
+ }
+
+ midi->descriptor = NULL;
+ pm_free(midi->descriptor);
+
+ return err;
+}
+
+
+static PmError
+midi_out_open(PmInternal *midi, void *driverInfo)
+{
+ midi_macosxcm_type m;
+
+ m = (midi_macosxcm_type) pm_alloc(sizeof(midi_macosxcm_node)); /* create */
+ midi->descriptor = m;
+ if (!m) {
+ return pmInsufficientMemory;
+ }
+ m->error[0] = 0;
+ m->callback_error[0] = 0;
+ m->sync_time = 0;
+ m->delta = 0;
+ m->last_time = 0;
+ m->first_message = TRUE;
+ m->sysex_mode = FALSE;
+ m->sysex_word = 0;
+ m->sysex_byte_count = 0;
+ m->packetList = (MIDIPacketList *) m->packetBuffer;
+ m->packet = NULL;
+
+ return pmNoError;
+}
+
+static PmError
+midi_out_close(PmInternal *midi)
+{
+ midi_macosxcm_type m = (midi_macosxcm_type) midi->descriptor;
+ if (!m) return pmBadPtr;
+
+ midi->descriptor = NULL;
+ pm_free(midi->descriptor);
+
+ return pmNoError;
+}
+
+static PmError
+midi_abort(PmInternal *midi)
+{
+ return pmNoError;
+}
+
+
+static PmError
+midi_write_flush(PmInternal *midi)
+{
+ OSStatus macHostError;
+ midi_macosxcm_type m = (midi_macosxcm_type) midi->descriptor;
+ MIDIEndpointRef endpoint =
+ (MIDIEndpointRef) descriptors[midi->device_id].descriptor;
+ assert(m);
+ assert(endpoint);
+ if (m->packet != NULL) {
+ /* out of space, send the buffer and start refilling it */
+ macHostError = MIDISend(portOut, endpoint, m->packetList);
+ m->packet = NULL; /* indicate no data in packetList now */
+ if (macHostError != noErr) goto send_packet_error;
+ }
+ return pmNoError;
+
+send_packet_error:
+ pm_hosterror = macHostError;
+ sprintf(pm_hosterror_text,
+ "Host error %ld: MIDISend() in midi_write()",
+ macHostError);
+ return pmHostError;
+
+}
+
+
+static PmError
+send_packet(PmInternal *midi, Byte *message, unsigned int messageLength,
+ MIDITimeStamp timestamp)
+{
+ PmError err;
+ midi_macosxcm_type m = (midi_macosxcm_type) midi->descriptor;
+ assert(m);
+
+ /* printf("add %d to packet %lx len %d\n", message[0], m->packet, messageLength); */
+ m->packet = MIDIPacketListAdd(m->packetList, sizeof(m->packetBuffer),
+ m->packet, timestamp, messageLength,
+ message);
+ if (m->packet == NULL) {
+ /* out of space, send the buffer and start refilling it */
+ /* make midi->packet non-null to fool midi_write_flush into sending */
+ m->packet = (MIDIPacket *) 4;
+ if ((err = midi_write_flush(midi)) != pmNoError) return err;
+ m->packet = MIDIPacketListInit(m->packetList);
+ assert(m->packet); /* if this fails, it's a programming error */
+ m->packet = MIDIPacketListAdd(m->packetList, sizeof(m->packetBuffer),
+ m->packet, timestamp, messageLength,
+ message);
+ assert(m->packet); /* can't run out of space on first message */
+ }
+ return pmNoError;
+}
+
+
+static PmError
+midi_write_short(PmInternal *midi, PmEvent *event)
+{
+ long when = event->timestamp;
+ long what = event->message;
+ MIDITimeStamp timestamp;
+ UInt64 when_ns;
+ midi_macosxcm_type m = (midi_macosxcm_type) midi->descriptor;
+ Byte message[4];
+ unsigned int messageLength;
+
+ if (m->packet == NULL) {
+ m->packet = MIDIPacketListInit(m->packetList);
+ /* this can never fail, right? failure would indicate something
+ unrecoverable */
+ assert(m->packet);
+ }
+
+ /* compute timestamp */
+ if (when == 0) when = midi->now;
+ /* if latency == 0, midi->now is not valid. We will just set it to zero */
+ if (midi->latency == 0) when = 0;
+ when_ns = ((UInt64) (when + midi->latency) * (UInt64) 1000000) + m->delta;
+ /* make sure we don't go backward in time */
+ if (when_ns < m->last_time) when_ns = m->last_time;
+ m->last_time = when_ns;
+ timestamp = (MIDITimeStamp) AudioConvertNanosToHostTime(when_ns);
+
+ message[0] = Pm_MessageStatus(what);
+ message[1] = Pm_MessageData1(what);
+ message[2] = Pm_MessageData2(what);
+ messageLength = midi_length(what);
+
+ /* Add this message to the packet list */
+ return send_packet(midi, message, messageLength, timestamp);
+}
+
+
+static PmError
+midi_begin_sysex(PmInternal *midi, PmTimestamp when)
+{
+ UInt64 when_ns;
+ midi_macosxcm_type m = (midi_macosxcm_type) midi->descriptor;
+ assert(m);
+ m->sysex_byte_count = 0;
+
+ /* compute timestamp */
+ if (when == 0) when = midi->now;
+ /* if latency == 0, midi->now is not valid. We will just set it to zero */
+ if (midi->latency == 0) when = 0;
+ when_ns = ((UInt64) (when + midi->latency) * (UInt64) 1000000) + m->delta;
+ m->sysex_timestamp = (MIDITimeStamp) AudioConvertNanosToHostTime(when_ns);
+
+ if (m->packet == NULL) {
+ m->packet = MIDIPacketListInit(m->packetList);
+ /* this can never fail, right? failure would indicate something
+ unrecoverable */
+ assert(m->packet);
+ }
+ return pmNoError;
+}
+
+
+static PmError
+midi_end_sysex(PmInternal *midi, PmTimestamp when)
+{
+ PmError err;
+ midi_macosxcm_type m = (midi_macosxcm_type) midi->descriptor;
+ assert(m);
+
+ /* make sure we don't go backward in time */
+ if (m->sysex_timestamp < m->last_time) m->sysex_timestamp = m->last_time;
+
+ /* now send what's in the buffer */
+ err = send_packet(midi, m->sysex_buffer, m->sysex_byte_count,
+ m->sysex_timestamp);
+ m->sysex_byte_count = 0;
+ if (err != pmNoError) {
+ m->packet = NULL; /* flush everything in the packet list */
+ return err;
+ }
+ return pmNoError;
+}
+
+
+static PmError
+midi_write_byte(PmInternal *midi, unsigned char byte, PmTimestamp timestamp)
+{
+ midi_macosxcm_type m = (midi_macosxcm_type) midi->descriptor;
+ assert(m);
+ if (m->sysex_byte_count >= SYSEX_BUFFER_SIZE) {
+ PmError err = midi_end_sysex(midi, timestamp);
+ if (err != pmNoError) return err;
+ }
+ m->sysex_buffer[m->sysex_byte_count++] = byte;
+ return pmNoError;
+}
+
+
+static PmError
+midi_write_realtime(PmInternal *midi, PmEvent *event)
+{
+ /* to send a realtime message during a sysex message, first
+ flush all pending sysex bytes into packet list */
+ PmError err = midi_end_sysex(midi, 0);
+ if (err != pmNoError) return err;
+ /* then we can just do a normal midi_write_short */
+ return midi_write_short(midi, event);
+}
+
+static unsigned int midi_has_host_error(PmInternal *midi)
+{
+ midi_macosxcm_type m = (midi_macosxcm_type) midi->descriptor;
+ return (m->callback_error[0] != 0) || (m->error[0] != 0);
+}
+
+
+static void midi_get_host_error(PmInternal *midi, char *msg, unsigned int len)
+{
+ midi_macosxcm_type m = (midi_macosxcm_type) midi->descriptor;
+ msg[0] = 0; /* initialize to empty string */
+ if (m) { /* make sure there is an open device to examine */
+ if (m->error[0]) {
+ strncpy(msg, m->error, len);
+ m->error[0] = 0; /* clear the error */
+ } else if (m->callback_error[0]) {
+ strncpy(msg, m->callback_error, len);
+ m->callback_error[0] = 0; /* clear the error */
+ }
+ msg[len - 1] = 0; /* make sure string is terminated */
+ }
+}
+
+
+MIDITimeStamp timestamp_pm_to_cm(PmTimestamp timestamp)
+{
+ UInt64 nanos;
+ if (timestamp <= 0) {
+ return (MIDITimeStamp)0;
+ } else {
+ nanos = (UInt64)timestamp * (UInt64)1000000;
+ return (MIDITimeStamp)AudioConvertNanosToHostTime(nanos);
+ }
+}
+
+PmTimestamp timestamp_cm_to_pm(MIDITimeStamp timestamp)
+{
+ UInt64 nanos;
+ nanos = AudioConvertHostTimeToNanos(timestamp);
+ return (PmTimestamp)(nanos / (UInt64)1000000);
+}
+
+
+char* cm_get_full_endpoint_name(MIDIEndpointRef endpoint)
+{
+ MIDIEntityRef entity;
+ MIDIDeviceRef device;
+ CFStringRef endpointName = NULL, deviceName = NULL, fullName = NULL;
+ CFStringEncoding defaultEncoding;
+ char* newName;
+
+ /* get the default string encoding */
+ defaultEncoding = CFStringGetSystemEncoding();
+
+ /* get the entity and device info */
+ MIDIEndpointGetEntity(endpoint, &entity);
+ MIDIEntityGetDevice(entity, &device);
+
+ /* create the nicely formated name */
+ MIDIObjectGetStringProperty(endpoint, kMIDIPropertyName, &endpointName);
+ MIDIObjectGetStringProperty(device, kMIDIPropertyName, &deviceName);
+ if (deviceName != NULL) {
+ fullName = CFStringCreateWithFormat(NULL, NULL, CFSTR("%@: %@"),
+ deviceName, endpointName);
+ } else {
+ fullName = endpointName;
+ }
+
+ /* copy the string into our buffer */
+ newName = (char*)malloc(CFStringGetLength(fullName) + 1);
+ CFStringGetCString(fullName, newName, CFStringGetLength(fullName) + 1,
+ defaultEncoding);
+
+ /* clean up */
+ if (endpointName) CFRelease(endpointName);
+ if (deviceName) CFRelease(deviceName);
+ if (fullName) CFRelease(fullName);
+
+ return newName;
+}
+
+
+
+pm_fns_node pm_macosx_in_dictionary = {
+ none_write_short,
+ none_sysex,
+ none_sysex,
+ none_write_byte,
+ none_write_short,
+ none_write_flush,
+ none_synchronize,
+ midi_in_open,
+ midi_abort,
+ midi_in_close,
+ success_poll,
+ midi_has_host_error,
+ midi_get_host_error,
+};
+
+pm_fns_node pm_macosx_out_dictionary = {
+ midi_write_short,
+ midi_begin_sysex,
+ midi_end_sysex,
+ midi_write_byte,
+ midi_write_realtime,
+ midi_write_flush,
+ midi_synchronize,
+ midi_out_open,
+ midi_abort,
+ midi_out_close,
+ success_poll,
+ midi_has_host_error,
+ midi_get_host_error,
+};
+
+
+PmError pm_macosxcm_init(void)
+{
+ ItemCount numInputs, numOutputs, numDevices;
+ MIDIEndpointRef endpoint;
+ int i;
+ OSStatus macHostError;
+ char *error_text;
+
+ /* Determine the number of MIDI devices on the system */
+ numDevices = MIDIGetNumberOfDevices();
+ numInputs = MIDIGetNumberOfSources();
+ numOutputs = MIDIGetNumberOfDestinations();
+
+ /* Return prematurely if no devices exist on the system
+ Note that this is not an error. There may be no devices.
+ Pm_CountDevices() will return zero, which is correct and
+ useful information
+ */
+ if (numDevices <= 0) {
+ return pmNoError;
+ }
+
+
+ /* Initialize the client handle */
+ macHostError = MIDIClientCreate(CFSTR("PortMidi"), NULL, NULL, &client);
+ if (macHostError != noErr) {
+ error_text = "MIDIClientCreate() in pm_macosxcm_init()";
+ goto error_return;
+ }
+
+ /* Create the input port */
+ macHostError = MIDIInputPortCreate(client, CFSTR("Input port"), readProc,
+ NULL, &portIn);
+ if (macHostError != noErr) {
+ error_text = "MIDIInputPortCreate() in pm_macosxcm_init()";
+ goto error_return;
+ }
+
+ /* Create the output port */
+ macHostError = MIDIOutputPortCreate(client, CFSTR("Output port"), &portOut);
+ if (macHostError != noErr) {
+ error_text = "MIDIOutputPortCreate() in pm_macosxcm_init()";
+ goto error_return;
+ }
+
+ /* Iterate over the MIDI input devices */
+ for (i = 0; i < numInputs; i++) {
+ endpoint = MIDIGetSource(i);
+ if (endpoint == NULL) {
+ continue;
+ }
+
+ /* set the first input we see to the default */
+ if (pm_default_input_device_id == -1)
+ pm_default_input_device_id = pm_descriptor_index;
+
+ /* Register this device with PortMidi */
+ pm_add_device("CoreMIDI", cm_get_full_endpoint_name(endpoint),
+ TRUE, (void*)endpoint, &pm_macosx_in_dictionary);
+ }
+
+ /* Iterate over the MIDI output devices */
+ for (i = 0; i < numOutputs; i++) {
+ endpoint = MIDIGetDestination(i);
+ if (endpoint == NULL) {
+ continue;
+ }
+
+ /* set the first output we see to the default */
+ if (pm_default_output_device_id == -1)
+ pm_default_output_device_id = pm_descriptor_index;
+
+ /* Register this device with PortMidi */
+ pm_add_device("CoreMIDI", cm_get_full_endpoint_name(endpoint),
+ FALSE, (void*)endpoint, &pm_macosx_out_dictionary);
+ }
+ return pmNoError;
+
+error_return:
+ pm_hosterror = macHostError;
+ sprintf(pm_hosterror_text, "Host error %ld: %s\n", macHostError, error_text);
+ pm_macosxcm_term(); /* clear out any opened ports */
+ return pmHostError;
+}
+
+void pm_macosxcm_term(void)
+{
+ if (client != NULL) MIDIClientDispose(client);
+ if (portIn != NULL) MIDIPortDispose(portIn);
+ if (portOut != NULL) MIDIPortDispose(portOut);
+}
diff --git a/pd/portmidi/pm_mac/pmmacosxcm.h b/pd/portmidi/pm_mac/pmmacosxcm.h
new file mode 100644
index 00000000..17259359
--- /dev/null
+++ b/pd/portmidi/pm_mac/pmmacosxcm.h
@@ -0,0 +1,4 @@
+/* system-specific definitions */
+
+PmError pm_macosxcm_init(void);
+void pm_macosxcm_term(void); \ No newline at end of file