├── PublicUtility ├── CADebugMacros.cpp ├── CAHostTimeBase.cpp ├── CAHostTimeBase.h └── CADebugMacros.h ├── .gitignore ├── Readme.txt ├── llaudio.xcodeproj ├── project.pbxproj ├── drakeironman.pbxuser └── drakeironman.mode1v3 └── main.cpp /PublicUtility/CADebugMacros.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mountainstorm/llaudio/HEAD/PublicUtility/CADebugMacros.cpp -------------------------------------------------------------------------------- /PublicUtility/CAHostTimeBase.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mountainstorm/llaudio/HEAD/PublicUtility/CAHostTimeBase.cpp -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | 3 | *.pyc 4 | *.pyo 5 | 6 | *.egg-info 7 | _build 8 | build 9 | dist 10 | MANIFEST 11 | 12 | .coverage 13 | coverage 14 | htmlcov 15 | 16 | _trial_temp 17 | -------------------------------------------------------------------------------- /Readme.txt: -------------------------------------------------------------------------------- 1 | llaudio 2 | ------- 3 | 4 | This is a piece of work I did back in 2010, basically figuring out what the raw 5 | user/kernel audio interface looked like. 6 | 7 | The idea was to produce somethign which would allow audio on puredarwin 8 | 9 | 10 | Some info at the time: 11 | 12 | OSvKernDSPLib.kext: 13 | We don't have the source but the functions that we need are all well documented 14 | in the ADC and simple (each perform a single mathematical operation). It would 15 | be easy for someone to implement these and patch them directly into whatever 16 | needs them or, better still, create a kext which exports them called 17 | OSvKernDSPLib.kext. 18 | 19 | Usermode access: 20 | If you use shark to do a trace (on OSX) of a program recording audio you'll find 21 | LOTS of references to HP_ funcs, in particular HP_IOThread. Now if you search 22 | over a full XCode install you'll find you actually have that code. 23 | 24 | Turns out that a huge amount of the usermode Coreaudio code is shipped with 25 | XCode to allow the development/testing of CoreAudioPlugins; go look in the 26 | folders called HPBase, PublicUtility etc. These classes etc call down to the 27 | lower level audio interface functions, header files: AudioHardware.h etc (we 28 | don't have the source) and these then communicate with the audio drivers 29 | IOUserClient in the kernel. 30 | 31 | So, where does that leave us. Thankfully by trawling over the HP_ code you can 32 | find out whats important for the user code (the key thing it realtime priority), 33 | and by trawling through the kernel source (IOKit) you can find out what 34 | interface the code in AudioHardware.h uses 35 | (http://lists.apple.com/archives/Darwin-dev/2009/Aug/msg00000.html). 36 | 37 | What I posted back in August on the Darwin-dev list is basically correct and 38 | the answers to my questions are: 39 | 40 | Q. Is there a mechanism to tell me when its safe to use this data, or is it, as 41 | I suspect, volatile and you use it "as it". 42 | 43 | A. Sort of. You basically need a realtime usermode thread which polls the 44 | kernel for the correct data. The generic, kernel, audio stuff then gives you a 45 | copy of the samples your expecting. 46 | 47 | Q. My key question is how do I get intelligible audio from the driver? I've 48 | tried putting a sleep in, but to no avail. 49 | 50 | A. IIRC, I did do this over 6 months ago; it all starts working once you get 51 | your io thread working correctly. 52 | 53 | To help illustrate all this I thought I'd attach my test program. I know its a 54 | mess, but it does (or did last time I used it) read audio directly from the 55 | kernel on OSX and save it into a file. What I did was pull out all the key 56 | things from the HP_IOThread func, combine that which what I'd learnt about the 57 | raw IOKIt interface and put it all together. You should be able to load the 58 | output audio into something like Audacity and then play it. Simples, see :) 59 | 60 | 61 | License 62 | ------- 63 | 64 | Created by R J Cooper on 05/06/2012. This file: Copyright (c) 65 | 2012 Mountainstorm API: Copyright (c) 2008 Apple Inc. All rights reserved. 66 | 67 | Permission is hereby granted, free of charge, to any person obtaining a copy 68 | of this software and associated documentation files (the "Software"), to deal 69 | in the Software without restriction, including without limitation the rights 70 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 71 | copies of the Software, and to permit persons to whom the Software is 72 | furnished to do so, subject to the following conditions: 73 | 74 | The above copyright notice and this permission notice shall be included in all 75 | copies or substantial portions of the Software. 76 | 77 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 78 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 79 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 80 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 81 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 82 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 83 | SOFTWARE. 84 | -------------------------------------------------------------------------------- /PublicUtility/CAHostTimeBase.h: -------------------------------------------------------------------------------- 1 | /* Copyright � 2007 Apple Inc. All Rights Reserved. 2 | 3 | Disclaimer: IMPORTANT: This Apple software is supplied to you by 4 | Apple Inc. ("Apple") in consideration of your agreement to the 5 | following terms, and your use, installation, modification or 6 | redistribution of this Apple software constitutes acceptance of these 7 | terms. If you do not agree with these terms, please do not use, 8 | install, modify or redistribute this Apple software. 9 | 10 | In consideration of your agreement to abide by the following terms, and 11 | subject to these terms, Apple grants you a personal, non-exclusive 12 | license, under Apple's copyrights in this original Apple software (the 13 | "Apple Software"), to use, reproduce, modify and redistribute the Apple 14 | Software, with or without modifications, in source and/or binary forms; 15 | provided that if you redistribute the Apple Software in its entirety and 16 | without modifications, you must retain this notice and the following 17 | text and disclaimers in all such redistributions of the Apple Software. 18 | Neither the name, trademarks, service marks or logos of Apple Inc. 19 | may be used to endorse or promote products derived from the Apple 20 | Software without specific prior written permission from Apple. Except 21 | as expressly stated in this notice, no other rights or licenses, express 22 | or implied, are granted by Apple herein, including but not limited to 23 | any patent rights that may be infringed by your derivative works or by 24 | other works in which the Apple Software may be incorporated. 25 | 26 | The Apple Software is provided by Apple on an "AS IS" basis. APPLE 27 | MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION 28 | THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS 29 | FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND 30 | OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. 31 | 32 | IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL 33 | OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 34 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 35 | INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, 36 | MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED 37 | AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), 38 | STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE 39 | POSSIBILITY OF SUCH DAMAGE. 40 | */ 41 | #if !defined(__CAHostTimeBase_h__) 42 | #define __CAHostTimeBase_h__ 43 | 44 | //============================================================================= 45 | // Includes 46 | //============================================================================= 47 | 48 | 49 | #if TARGET_OS_MAC 50 | #include 51 | #elif TARGET_OS_WIN32 52 | #include 53 | #else 54 | #error Unsupported operating system 55 | #endif 56 | 57 | #include "CADebugMacros.h" 58 | 59 | //============================================================================= 60 | // CAHostTimeBase 61 | // 62 | // This class provides platform independent access to the host's time base. 63 | //============================================================================= 64 | 65 | #if CoreAudio_Debug 66 | // #define Log_Host_Time_Base_Parameters 1 67 | // #define Track_Host_TimeBase 1 68 | #endif 69 | 70 | class CAHostTimeBase 71 | { 72 | 73 | public: 74 | static UInt64 ConvertToNanos(UInt64 inHostTime); 75 | static UInt64 ConvertFromNanos(UInt64 inNanos); 76 | 77 | static UInt64 GetTheCurrentTime(); 78 | #if TARGET_OS_MAC 79 | static UInt64 GetCurrentTime() { return GetTheCurrentTime(); } 80 | #endif 81 | static UInt64 GetCurrentTimeInNanos(); 82 | 83 | static Float64 GetFrequency() { if(!sIsInited) { Initialize(); } return sFrequency; } 84 | static UInt32 GetMinimumDelta() { if(!sIsInited) { Initialize(); } return sMinDelta; } 85 | 86 | static UInt64 AbsoluteHostDeltaToNanos(UInt64 inStartTime, UInt64 inEndTime); 87 | static SInt64 HostDeltaToNanos(UInt64 inStartTime, UInt64 inEndTime); 88 | 89 | private: 90 | static void Initialize(); 91 | 92 | static bool sIsInited; 93 | 94 | static Float64 sFrequency; 95 | static UInt32 sMinDelta; 96 | static UInt32 sToNanosNumerator; 97 | static UInt32 sToNanosDenominator; 98 | static UInt32 sFromNanosNumerator; 99 | static UInt32 sFromNanosDenominator; 100 | static bool sUseMicroseconds; 101 | #if Track_Host_TimeBase 102 | static UInt64 sLastTime; 103 | #endif 104 | }; 105 | 106 | inline UInt64 CAHostTimeBase::GetTheCurrentTime() 107 | { 108 | UInt64 theTime = 0; 109 | 110 | #if TARGET_OS_MAC 111 | theTime = mach_absolute_time(); 112 | #elif TARGET_OS_WIN32 113 | LARGE_INTEGER theValue; 114 | QueryPerformanceCounter(&theValue); 115 | theTime = *((UInt64*)&theValue); 116 | #endif 117 | 118 | #if Track_Host_TimeBase 119 | if(sLastTime != 0) 120 | { 121 | if(theTime <= sLastTime) 122 | { 123 | DebugMessageN2("CAHostTimeBase::GetTheCurrentTime: the current time is earlier than the last time, now: %qd, then: %qd", theTime, sLastTime); 124 | } 125 | sLastTime = theTime; 126 | } 127 | else 128 | { 129 | sLastTime = theTime; 130 | } 131 | #endif 132 | 133 | return theTime; 134 | } 135 | 136 | inline UInt64 CAHostTimeBase::ConvertToNanos(UInt64 inHostTime) 137 | { 138 | if(!sIsInited) 139 | { 140 | Initialize(); 141 | } 142 | 143 | Float64 theNumerator = static_cast(sToNanosNumerator); 144 | Float64 theDenominator = static_cast(sToNanosDenominator); 145 | Float64 theHostTime = static_cast(inHostTime); 146 | 147 | Float64 thePartialAnswer = theHostTime / theDenominator; 148 | Float64 theFloatAnswer = thePartialAnswer * theNumerator; 149 | UInt64 theAnswer = static_cast(theFloatAnswer); 150 | 151 | //Assert(!((theNumerator > theDenominator) && (theAnswer < inHostTime)), "CAHostTimeBase::ConvertToNanos: The conversion wrapped"); 152 | //Assert(!((theDenominator > theNumerator) && (theAnswer > inHostTime)), "CAHostTimeBase::ConvertToNanos: The conversion wrapped"); 153 | 154 | return theAnswer; 155 | } 156 | 157 | inline UInt64 CAHostTimeBase::ConvertFromNanos(UInt64 inNanos) 158 | { 159 | if(!sIsInited) 160 | { 161 | Initialize(); 162 | } 163 | 164 | Float64 theNumerator = static_cast(sToNanosNumerator); 165 | Float64 theDenominator = static_cast(sToNanosDenominator); 166 | Float64 theNanos = static_cast(inNanos); 167 | 168 | Float64 thePartialAnswer = theNanos / theNumerator; 169 | Float64 theFloatAnswer = thePartialAnswer * theDenominator; 170 | UInt64 theAnswer = static_cast(theFloatAnswer); 171 | 172 | //Assert(!((theDenominator > theNumerator) && (theAnswer < inNanos)), "CAHostTimeBase::ConvertToNanos: The conversion wrapped"); 173 | //Assert(!((theNumerator > theDenominator) && (theAnswer > inNanos)), "CAHostTimeBase::ConvertToNanos: The conversion wrapped"); 174 | 175 | return theAnswer; 176 | } 177 | 178 | 179 | inline UInt64 CAHostTimeBase::GetCurrentTimeInNanos() 180 | { 181 | return ConvertToNanos(GetTheCurrentTime()); 182 | } 183 | 184 | inline UInt64 CAHostTimeBase::AbsoluteHostDeltaToNanos(UInt64 inStartTime, UInt64 inEndTime) 185 | { 186 | UInt64 theAnswer; 187 | 188 | if(inStartTime <= inEndTime) 189 | { 190 | theAnswer = inEndTime - inStartTime; 191 | } 192 | else 193 | { 194 | theAnswer = inStartTime - inEndTime; 195 | } 196 | 197 | return ConvertToNanos(theAnswer); 198 | } 199 | 200 | inline SInt64 CAHostTimeBase::HostDeltaToNanos(UInt64 inStartTime, UInt64 inEndTime) 201 | { 202 | SInt64 theAnswer; 203 | SInt64 theSign = 1; 204 | 205 | if(inStartTime <= inEndTime) 206 | { 207 | theAnswer = inEndTime - inStartTime; 208 | } 209 | else 210 | { 211 | theAnswer = inStartTime - inEndTime; 212 | theSign = -1; 213 | } 214 | 215 | return theSign * ConvertToNanos(theAnswer); 216 | } 217 | 218 | #endif 219 | -------------------------------------------------------------------------------- /llaudio.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 42; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 4AA71942102776C3008913AD /* CAHostTimeBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4AA71940102776C3008913AD /* CAHostTimeBase.cpp */; }; 11 | 4AA71943102776C3008913AD /* CAHostTimeBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 4AA71941102776C3008913AD /* CAHostTimeBase.h */; }; 12 | 4AA719491027775E008913AD /* CADebugMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 4AA719471027775E008913AD /* CADebugMacros.h */; }; 13 | 4AA7194A1027775E008913AD /* CADebugMacros.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4AA719481027775E008913AD /* CADebugMacros.cpp */; }; 14 | EE19EED707B2C7BF0083E1AA /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 08FB7796FE84155DC02AAC07 /* main.cpp */; settings = {ATTRIBUTES = (); }; }; 15 | EE19EED907B2C7BF0083E1AA /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 09AB6884FE841BABC02AAC07 /* CoreFoundation.framework */; }; 16 | EE19EEDA07B2C7BF0083E1AA /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 130F0D2200FCB0C106CB154B /* IOKit.framework */; }; 17 | /* End PBXBuildFile section */ 18 | 19 | /* Begin PBXFileReference section */ 20 | 08FB7796FE84155DC02AAC07 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = main.cpp; sourceTree = ""; }; 21 | 09AB6884FE841BABC02AAC07 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = /System/Library/Frameworks/CoreFoundation.framework; sourceTree = ""; }; 22 | 130F0D2200FCB0C106CB154B /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = /System/Library/Frameworks/IOKit.framework; sourceTree = ""; }; 23 | 4AA71940102776C3008913AD /* CAHostTimeBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CAHostTimeBase.cpp; path = PublicUtility/CAHostTimeBase.cpp; sourceTree = ""; }; 24 | 4AA71941102776C3008913AD /* CAHostTimeBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CAHostTimeBase.h; path = PublicUtility/CAHostTimeBase.h; sourceTree = ""; }; 25 | 4AA719471027775E008913AD /* CADebugMacros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CADebugMacros.h; path = PublicUtility/CADebugMacros.h; sourceTree = ""; }; 26 | 4AA719481027775E008913AD /* CADebugMacros.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CADebugMacros.cpp; path = PublicUtility/CADebugMacros.cpp; sourceTree = ""; }; 27 | EE19EEDC07B2C7BF0083E1AA /* llaudio */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = llaudio; sourceTree = BUILT_PRODUCTS_DIR; }; 28 | /* End PBXFileReference section */ 29 | 30 | /* Begin PBXFrameworksBuildPhase section */ 31 | EE19EED807B2C7BF0083E1AA /* Frameworks */ = { 32 | isa = PBXFrameworksBuildPhase; 33 | buildActionMask = 2147483647; 34 | files = ( 35 | EE19EED907B2C7BF0083E1AA /* CoreFoundation.framework in Frameworks */, 36 | EE19EEDA07B2C7BF0083E1AA /* IOKit.framework in Frameworks */, 37 | ); 38 | runOnlyForDeploymentPostprocessing = 0; 39 | }; 40 | /* End PBXFrameworksBuildPhase section */ 41 | 42 | /* Begin PBXGroup section */ 43 | 08FB7794FE84155DC02AAC07 /* llaudio */ = { 44 | isa = PBXGroup; 45 | children = ( 46 | 4AA7193F102776B5008913AD /* PublicUtility */, 47 | 08FB7795FE84155DC02AAC07 /* Source */, 48 | 08FB779DFE84155DC02AAC07 /* External Frameworks and Libraries */, 49 | 19C28FBDFE9D53C911CA2CBB /* Products */, 50 | ); 51 | name = llaudio; 52 | sourceTree = ""; 53 | }; 54 | 08FB7795FE84155DC02AAC07 /* Source */ = { 55 | isa = PBXGroup; 56 | children = ( 57 | 08FB7796FE84155DC02AAC07 /* main.cpp */, 58 | ); 59 | name = Source; 60 | sourceTree = ""; 61 | }; 62 | 08FB779DFE84155DC02AAC07 /* External Frameworks and Libraries */ = { 63 | isa = PBXGroup; 64 | children = ( 65 | 09AB6884FE841BABC02AAC07 /* CoreFoundation.framework */, 66 | 130F0D2200FCB0C106CB154B /* IOKit.framework */, 67 | ); 68 | name = "External Frameworks and Libraries"; 69 | sourceTree = ""; 70 | }; 71 | 19C28FBDFE9D53C911CA2CBB /* Products */ = { 72 | isa = PBXGroup; 73 | children = ( 74 | EE19EEDC07B2C7BF0083E1AA /* llaudio */, 75 | ); 76 | name = Products; 77 | sourceTree = ""; 78 | }; 79 | 4AA7193F102776B5008913AD /* PublicUtility */ = { 80 | isa = PBXGroup; 81 | children = ( 82 | 4AA719471027775E008913AD /* CADebugMacros.h */, 83 | 4AA719481027775E008913AD /* CADebugMacros.cpp */, 84 | 4AA71940102776C3008913AD /* CAHostTimeBase.cpp */, 85 | 4AA71941102776C3008913AD /* CAHostTimeBase.h */, 86 | ); 87 | name = PublicUtility; 88 | sourceTree = ""; 89 | }; 90 | /* End PBXGroup section */ 91 | 92 | /* Begin PBXHeadersBuildPhase section */ 93 | EE19EED507B2C7BF0083E1AA /* Headers */ = { 94 | isa = PBXHeadersBuildPhase; 95 | buildActionMask = 2147483647; 96 | files = ( 97 | 4AA71943102776C3008913AD /* CAHostTimeBase.h in Headers */, 98 | 4AA719491027775E008913AD /* CADebugMacros.h in Headers */, 99 | ); 100 | runOnlyForDeploymentPostprocessing = 0; 101 | }; 102 | /* End PBXHeadersBuildPhase section */ 103 | 104 | /* Begin PBXNativeTarget section */ 105 | EE19EED407B2C7BF0083E1AA /* llaudio */ = { 106 | isa = PBXNativeTarget; 107 | buildConfigurationList = 3EEA307508D71E4B002CBB49 /* Build configuration list for PBXNativeTarget "llaudio" */; 108 | buildPhases = ( 109 | EE19EED507B2C7BF0083E1AA /* Headers */, 110 | EE19EED607B2C7BF0083E1AA /* Sources */, 111 | EE19EED807B2C7BF0083E1AA /* Frameworks */, 112 | EE19EEDB07B2C7BF0083E1AA /* Rez */, 113 | ); 114 | buildRules = ( 115 | ); 116 | dependencies = ( 117 | ); 118 | name = llaudio; 119 | productInstallPath = "$(HOME)/bin"; 120 | productName = llaudio; 121 | productReference = EE19EEDC07B2C7BF0083E1AA /* llaudio */; 122 | productType = "com.apple.product-type.tool"; 123 | }; 124 | /* End PBXNativeTarget section */ 125 | 126 | /* Begin PBXProject section */ 127 | 08FB7793FE84155DC02AAC07 /* Project object */ = { 128 | isa = PBXProject; 129 | buildConfigurationList = 3EEA307908D71E4B002CBB49 /* Build configuration list for PBXProject "llaudio" */; 130 | compatibilityVersion = "Xcode 2.4"; 131 | hasScannedForEncodings = 1; 132 | mainGroup = 08FB7794FE84155DC02AAC07 /* llaudio */; 133 | projectDirPath = ""; 134 | projectRoot = ""; 135 | targets = ( 136 | EE19EED407B2C7BF0083E1AA /* llaudio */, 137 | ); 138 | }; 139 | /* End PBXProject section */ 140 | 141 | /* Begin PBXRezBuildPhase section */ 142 | EE19EEDB07B2C7BF0083E1AA /* Rez */ = { 143 | isa = PBXRezBuildPhase; 144 | buildActionMask = 2147483647; 145 | files = ( 146 | ); 147 | runOnlyForDeploymentPostprocessing = 0; 148 | }; 149 | /* End PBXRezBuildPhase section */ 150 | 151 | /* Begin PBXSourcesBuildPhase section */ 152 | EE19EED607B2C7BF0083E1AA /* Sources */ = { 153 | isa = PBXSourcesBuildPhase; 154 | buildActionMask = 2147483647; 155 | files = ( 156 | EE19EED707B2C7BF0083E1AA /* main.cpp in Sources */, 157 | 4AA71942102776C3008913AD /* CAHostTimeBase.cpp in Sources */, 158 | 4AA7194A1027775E008913AD /* CADebugMacros.cpp in Sources */, 159 | ); 160 | runOnlyForDeploymentPostprocessing = 0; 161 | }; 162 | /* End PBXSourcesBuildPhase section */ 163 | 164 | /* Begin XCBuildConfiguration section */ 165 | 3EEA307608D71E4B002CBB49 /* Debug */ = { 166 | isa = XCBuildConfiguration; 167 | buildSettings = { 168 | COPY_PHASE_STRIP = NO; 169 | GCC_DYNAMIC_NO_PIC = NO; 170 | GCC_ENABLE_FIX_AND_CONTINUE = YES; 171 | GCC_MODEL_TUNING = G5; 172 | GCC_OPTIMIZATION_LEVEL = 0; 173 | INSTALL_PATH = "$(HOME)/bin"; 174 | PRODUCT_NAME = llaudio; 175 | ZERO_LINK = YES; 176 | }; 177 | name = Debug; 178 | }; 179 | 3EEA307708D71E4B002CBB49 /* Release */ = { 180 | isa = XCBuildConfiguration; 181 | buildSettings = { 182 | ARCHS = ( 183 | ppc, 184 | i386, 185 | ); 186 | GCC_GENERATE_DEBUGGING_SYMBOLS = NO; 187 | GCC_MODEL_TUNING = G5; 188 | INSTALL_PATH = "$(HOME)/bin"; 189 | PRODUCT_NAME = llaudio; 190 | }; 191 | name = Release; 192 | }; 193 | 3EEA307A08D71E4B002CBB49 /* Debug */ = { 194 | isa = XCBuildConfiguration; 195 | buildSettings = { 196 | GCC_PREPROCESSOR_DEFINITIONS = TARGET_OS_MAC; 197 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 198 | GCC_WARN_UNUSED_VARIABLE = YES; 199 | PREBINDING = NO; 200 | SDKROOT = /Developer/SDKs/MacOSX10.5.sdk; 201 | }; 202 | name = Debug; 203 | }; 204 | 3EEA307B08D71E4B002CBB49 /* Release */ = { 205 | isa = XCBuildConfiguration; 206 | buildSettings = { 207 | GCC_PREPROCESSOR_DEFINITIONS = TARGET_OS_MAC; 208 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 209 | GCC_WARN_UNUSED_VARIABLE = YES; 210 | PREBINDING = NO; 211 | SDKROOT = /Developer/SDKs/MacOSX10.5.sdk; 212 | }; 213 | name = Release; 214 | }; 215 | /* End XCBuildConfiguration section */ 216 | 217 | /* Begin XCConfigurationList section */ 218 | 3EEA307508D71E4B002CBB49 /* Build configuration list for PBXNativeTarget "llaudio" */ = { 219 | isa = XCConfigurationList; 220 | buildConfigurations = ( 221 | 3EEA307608D71E4B002CBB49 /* Debug */, 222 | 3EEA307708D71E4B002CBB49 /* Release */, 223 | ); 224 | defaultConfigurationIsVisible = 0; 225 | defaultConfigurationName = Release; 226 | }; 227 | 3EEA307908D71E4B002CBB49 /* Build configuration list for PBXProject "llaudio" */ = { 228 | isa = XCConfigurationList; 229 | buildConfigurations = ( 230 | 3EEA307A08D71E4B002CBB49 /* Debug */, 231 | 3EEA307B08D71E4B002CBB49 /* Release */, 232 | ); 233 | defaultConfigurationIsVisible = 0; 234 | defaultConfigurationName = Release; 235 | }; 236 | /* End XCConfigurationList section */ 237 | }; 238 | rootObject = 08FB7793FE84155DC02AAC07 /* Project object */; 239 | } 240 | -------------------------------------------------------------------------------- /PublicUtility/CADebugMacros.h: -------------------------------------------------------------------------------- 1 | /* Copyright � 2007 Apple Inc. All Rights Reserved. 2 | 3 | Disclaimer: IMPORTANT: This Apple software is supplied to you by 4 | Apple Inc. ("Apple") in consideration of your agreement to the 5 | following terms, and your use, installation, modification or 6 | redistribution of this Apple software constitutes acceptance of these 7 | terms. If you do not agree with these terms, please do not use, 8 | install, modify or redistribute this Apple software. 9 | 10 | In consideration of your agreement to abide by the following terms, and 11 | subject to these terms, Apple grants you a personal, non-exclusive 12 | license, under Apple's copyrights in this original Apple software (the 13 | "Apple Software"), to use, reproduce, modify and redistribute the Apple 14 | Software, with or without modifications, in source and/or binary forms; 15 | provided that if you redistribute the Apple Software in its entirety and 16 | without modifications, you must retain this notice and the following 17 | text and disclaimers in all such redistributions of the Apple Software. 18 | Neither the name, trademarks, service marks or logos of Apple Inc. 19 | may be used to endorse or promote products derived from the Apple 20 | Software without specific prior written permission from Apple. Except 21 | as expressly stated in this notice, no other rights or licenses, express 22 | or implied, are granted by Apple herein, including but not limited to 23 | any patent rights that may be infringed by your derivative works or by 24 | other works in which the Apple Software may be incorporated. 25 | 26 | The Apple Software is provided by Apple on an "AS IS" basis. APPLE 27 | MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION 28 | THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS 29 | FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND 30 | OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS. 31 | 32 | IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL 33 | OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 34 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 35 | INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, 36 | MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED 37 | AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), 38 | STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE 39 | POSSIBILITY OF SUCH DAMAGE. 40 | */ 41 | #if !defined(__CADebugMacros_h__) 42 | #define __CADebugMacros_h__ 43 | 44 | //============================================================================= 45 | // Includes 46 | //============================================================================= 47 | 48 | #include 49 | 50 | //============================================================================= 51 | // CADebugMacros 52 | //============================================================================= 53 | 54 | //#define CoreAudio_StopOnFailure 1 55 | //#define CoreAudio_TimeStampMessages 1 56 | //#define CoreAudio_ThreadStampMessages 1 57 | //#define CoreAudio_FlushDebugMessages 1 58 | 59 | #if TARGET_RT_BIG_ENDIAN 60 | #define CA4CCToCString(the4CC) { ((char*)&the4CC)[0], ((char*)&the4CC)[1], ((char*)&the4CC)[2], ((char*)&the4CC)[3], 0 } 61 | #define CACopy4CCToCString(theCString, the4CC) { theCString[0] = ((char*)&the4CC)[0]; theCString[1] = ((char*)&the4CC)[1]; theCString[2] = ((char*)&the4CC)[2]; theCString[3] = ((char*)&the4CC)[3]; theCString[4] = 0; } 62 | #else 63 | #define CA4CCToCString(the4CC) { ((char*)&the4CC)[3], ((char*)&the4CC)[2], ((char*)&the4CC)[1], ((char*)&the4CC)[0], 0 } 64 | #define CACopy4CCToCString(theCString, the4CC) { theCString[0] = ((char*)&the4CC)[3]; theCString[1] = ((char*)&the4CC)[2]; theCString[2] = ((char*)&the4CC)[1]; theCString[3] = ((char*)&the4CC)[0]; theCString[4] = 0; } 65 | #endif 66 | 67 | #pragma mark Basic Definitions 68 | 69 | #if DEBUG || CoreAudio_Debug 70 | 71 | // can be used to break into debugger immediately, also see CADebugger 72 | #define BusError() (*(long *)0 = 0) 73 | 74 | // basic debugging print routines 75 | #if TARGET_OS_MAC && !TARGET_API_MAC_CARBON 76 | extern pascal void DebugStr(const unsigned char* debuggerMsg); 77 | #define DebugMessage(msg) DebugStr("\p"msg) 78 | #define DebugMessageN1(msg, N1) 79 | #define DebugMessageN2(msg, N1, N2) 80 | #define DebugMessageN3(msg, N1, N2, N3) 81 | #else 82 | #include "CADebugPrintf.h" 83 | 84 | #if (CoreAudio_FlushDebugMessages && !CoreAudio_UseSysLog) || defined(CoreAudio_UseSideFile) 85 | #define FlushRtn ;fflush(DebugPrintfFile) 86 | #else 87 | #define FlushRtn 88 | #endif 89 | 90 | #if CoreAudio_ThreadStampMessages 91 | #include 92 | #include "CAHostTimeBase.h" 93 | #define DebugMessage(msg) DebugPrintfRtn(DebugPrintfFileComma "%p %.4f: %s"DebugPrintfLineEnding, pthread_self(), ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), msg) FlushRtn 94 | #define DebugMessageN1(msg, N1) DebugPrintfRtn(DebugPrintfFileComma "%p %.4f: "msg"\n", pthread_self(), ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), N1) FlushRtn 95 | #define DebugMessageN2(msg, N1, N2) DebugPrintfRtn(DebugPrintfFileComma "%p %.4f: "msg"\n", pthread_self(), ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), N1, N2) FlushRtn 96 | #define DebugMessageN3(msg, N1, N2, N3) DebugPrintfRtn(DebugPrintfFileComma "%p %.4f: "msg"\n", pthread_self(), ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), N1, N2, N3) FlushRtn 97 | #define DebugMessageN4(msg, N1, N2, N3, N4) DebugPrintfRtn(DebugPrintfFileComma "%p %.4f: "msg"\n", pthread_self(), ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), N1, N2, N3, N4) FlushRtn 98 | #define DebugMessageN5(msg, N1, N2, N3, N4, N5) DebugPrintfRtn(DebugPrintfFileComma "%p %.4f: "msg"\n", pthread_self(), ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), N1, N2, N3, N4, N5) FlushRtn 99 | #define DebugMessageN6(msg, N1, N2, N3, N4, N5, N6) DebugPrintfRtn(DebugPrintfFileComma "%p %.4f: "msg"\n", pthread_self(), ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), N1, N2, N3, N4, N5, N6) FlushRtn 100 | #define DebugMessageN7(msg, N1, N2, N3, N4, N5, N6, N7) DebugPrintfRtn(DebugPrintfFileComma "%p %.4f: "msg"\n", pthread_self(), ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), N1, N2, N3, N4, N5, N6, N7) FlushRtn 101 | #define DebugMessageN8(msg, N1, N2, N3, N4, N5, N6, N7, N8) DebugPrintfRtn(DebugPrintfFileComma "%p %.4f: "msg"\n", pthread_self(), ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), N1, N2, N3, N4, N5, N6, N7, N8) FlushRtn 102 | #define DebugMessageN9(msg, N1, N2, N3, N4, N5, N6, N7, N8, N9) DebugPrintfRtn(DebugPrintfFileComma "%p %.4f: "msg"\n", pthread_self(), ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), N1, N2, N3, N4, N5, N6, N7, N8, N9) FlushRtn 103 | #elif CoreAudio_TimeStampMessages 104 | #include "CAHostTimeBase.h" 105 | #define DebugMessage(msg) DebugPrintfRtn(DebugPrintfFileComma "%.4f: %s"DebugPrintfLineEnding, pthread_self(), ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), msg) FlushRtn 106 | #define DebugMessageN1(msg, N1) DebugPrintfRtn(DebugPrintfFileComma "%.4f: "msg DebugPrintfLineEnding, ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), N1) FlushRtn 107 | #define DebugMessageN2(msg, N1, N2) DebugPrintfRtn(DebugPrintfFileComma "%.4f: "msg DebugPrintfLineEnding, ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), N1, N2) FlushRtn 108 | #define DebugMessageN3(msg, N1, N2, N3) DebugPrintfRtn(DebugPrintfFileComma "%.4f: "msg DebugPrintfLineEnding, ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), N1, N2, N3) FlushRtn 109 | #define DebugMessageN4(msg, N1, N2, N3, N4) DebugPrintfRtn(DebugPrintfFileComma "%.4f: "msg DebugPrintfLineEnding, ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), N1, N2, N3, N4) FlushRtn 110 | #define DebugMessageN5(msg, N1, N2, N3, N4, N5) DebugPrintfRtn(DebugPrintfFileComma "%.4f: "msg DebugPrintfLineEnding, ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), N1, N2, N3, N4, N5) FlushRtn 111 | #define DebugMessageN6(msg, N1, N2, N3, N4, N5, N6) DebugPrintfRtn(DebugPrintfFileComma "%.4f: "msg DebugPrintfLineEnding, ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), N1, N2, N3, N4, N5, N6) FlushRtn 112 | #define DebugMessageN7(msg, N1, N2, N3, N4, N5, N6, N7) DebugPrintfRtn(DebugPrintfFileComma "%.4f: "msg DebugPrintfLineEnding, ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), N1, N2, N3, N4, N5, N6, N7) FlushRtn 113 | #define DebugMessageN8(msg, N1, N2, N3, N4, N5, N6, N7, N8) DebugPrintfRtn(DebugPrintfFileComma "%.4f: "msg DebugPrintfLineEnding, ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), N1, N2, N3, N4, N5, N6, N7, N8) FlushRtn 114 | #define DebugMessageN9(msg, N1, N2, N3, N4, N5, N6, N7, N8, N9) DebugPrintfRtn(DebugPrintfFileComma "%.4f: "msg DebugPrintfLineEnding, ((Float64)(CAHostTimeBase::GetCurrentTimeInNanos()) / 1000000.0), N1, N2, N3, N4, N5, N6, N7, N8, N9) FlushRtn 115 | #else 116 | #define DebugMessage(msg) DebugPrintfRtn(DebugPrintfFileComma "%s"DebugPrintfLineEnding, msg) FlushRtn 117 | #define DebugMessageN1(msg, N1) DebugPrintfRtn(DebugPrintfFileComma msg DebugPrintfLineEnding, N1) FlushRtn 118 | #define DebugMessageN2(msg, N1, N2) DebugPrintfRtn(DebugPrintfFileComma msg DebugPrintfLineEnding, N1, N2) FlushRtn 119 | #define DebugMessageN3(msg, N1, N2, N3) DebugPrintfRtn(DebugPrintfFileComma msg DebugPrintfLineEnding, N1, N2, N3) FlushRtn 120 | #define DebugMessageN4(msg, N1, N2, N3, N4) DebugPrintfRtn(DebugPrintfFileComma msg DebugPrintfLineEnding, N1, N2, N3, N4) FlushRtn 121 | #define DebugMessageN5(msg, N1, N2, N3, N4, N5) DebugPrintfRtn(DebugPrintfFileComma msg DebugPrintfLineEnding, N1, N2, N3, N4, N5) FlushRtn 122 | #define DebugMessageN6(msg, N1, N2, N3, N4, N5, N6) DebugPrintfRtn(DebugPrintfFileComma msg DebugPrintfLineEnding, N1, N2, N3, N4, N5, N6) FlushRtn 123 | #define DebugMessageN7(msg, N1, N2, N3, N4, N5, N6, N7) DebugPrintfRtn(DebugPrintfFileComma msg DebugPrintfLineEnding, N1, N2, N3, N4, N5, N6, N7) FlushRtn 124 | #define DebugMessageN8(msg, N1, N2, N3, N4, N5, N6, N7, N8) DebugPrintfRtn(DebugPrintfFileComma msg DebugPrintfLineEnding, N1, N2, N3, N4, N5, N6, N7, N8) FlushRtn 125 | #define DebugMessageN9(msg, N1, N2, N3, N4, N5, N6, N7, N8, N9) DebugPrintfRtn(DebugPrintfFileComma msg DebugPrintfLineEnding, N1, N2, N3, N4, N5, N6, N7, N8, N9) FlushRtn 126 | #endif 127 | #endif 128 | void DebugPrint(const char *fmt, ...); // can be used like printf 129 | #define DEBUGPRINT(msg) DebugPrint msg // have to double-parenthesize arglist (see Debugging.h) 130 | #if VERBOSE 131 | #define vprint(msg) DEBUGPRINT(msg) 132 | #else 133 | #define vprint(msg) 134 | #endif 135 | 136 | #if CoreAudio_StopOnFailure 137 | #include "CADebugger.h" 138 | #define STOP CADebuggerStop() 139 | #else 140 | #define STOP 141 | #endif 142 | 143 | #else 144 | #define DebugMessage(msg) 145 | #define DebugMessageN1(msg, N1) 146 | #define DebugMessageN2(msg, N1, N2) 147 | #define DebugMessageN3(msg, N1, N2, N3) 148 | #define DebugMessageN4(msg, N1, N2, N3, N4) 149 | #define DebugMessageN5(msg, N1, N2, N3, N4, N5) 150 | #define DebugMessageN6(msg, N1, N2, N3, N4, N5, N6) 151 | #define DebugMessageN7(msg, N1, N2, N3, N4, N5, N6, N7) 152 | #define DebugMessageN8(msg, N1, N2, N3, N4, N5, N6, N7, N8) 153 | #define DebugMessageN9(msg, N1, N2, N3, N4, N5, N6, N7, N8, N9) 154 | #define DEBUGPRINT(msg) 155 | #define vprint(msg) 156 | #define STOP 157 | #endif 158 | 159 | void LogError(const char *fmt, ...); // writes to syslog (and stderr if debugging) 160 | void LogWarning(const char *fmt, ...); // writes to syslog (and stderr if debugging) 161 | 162 | #if DEBUG || CoreAudio_Debug 163 | 164 | #pragma mark Debug Macros 165 | 166 | #define Assert(inCondition, inMessage) \ 167 | if(!(inCondition)) \ 168 | { \ 169 | DebugMessage(inMessage); \ 170 | STOP; \ 171 | } 172 | 173 | #define AssertNoError(inError, inMessage) \ 174 | { \ 175 | SInt32 __Err = (inError); \ 176 | if(__Err != 0) \ 177 | { \ 178 | char __4CC[5] = CA4CCToCString(__Err); \ 179 | DebugMessageN2(inMessage ", Error: %d (%s)", (int)__Err, __4CC); \ 180 | STOP; \ 181 | } \ 182 | } 183 | 184 | #define AssertNoKernelError(inError, inMessage) \ 185 | { \ 186 | unsigned int __Err = (unsigned int)(inError); \ 187 | if(__Err != 0) \ 188 | { \ 189 | DebugMessageN1(inMessage ", Error: 0x%X", __Err); \ 190 | STOP; \ 191 | } \ 192 | } 193 | 194 | #define FailIf(inCondition, inHandler, inMessage) \ 195 | if(inCondition) \ 196 | { \ 197 | DebugMessage(inMessage); \ 198 | STOP; \ 199 | goto inHandler; \ 200 | } 201 | 202 | #define FailWithAction(inCondition, inAction, inHandler, inMessage) \ 203 | if(inCondition) \ 204 | { \ 205 | DebugMessage(inMessage); \ 206 | STOP; \ 207 | { inAction; } \ 208 | goto inHandler; \ 209 | } 210 | 211 | #define FailIfNULL(inPointer, inAction, inHandler, inMessage) \ 212 | if((inPointer) == NULL) \ 213 | { \ 214 | DebugMessage(inMessage); \ 215 | STOP; \ 216 | { inAction; } \ 217 | goto inHandler; \ 218 | } 219 | 220 | #define FailIfKernelError(inKernelError, inException, inMessage) \ 221 | { \ 222 | kern_return_t __Err = (inKernelError); \ 223 | if(__Err != 0) \ 224 | { \ 225 | DebugMessageN1(inMessage ", Error: 0x%X", __Err); \ 226 | STOP; \ 227 | { inAction; } \ 228 | goto inHandler; \ 229 | } \ 230 | } 231 | 232 | #define FailIfError(inError, inException, inMessage) \ 233 | { \ 234 | SInt32 __Err = (inError); \ 235 | if(__Err != 0) \ 236 | { \ 237 | char __4CC[5] = CA4CCToCString(__Err); \ 238 | DebugMessageN2(inMessage ", Error: %ld (%s)", __Err, __4CC); \ 239 | STOP; \ 240 | { inAction; } \ 241 | goto inHandler; \ 242 | } \ 243 | } 244 | 245 | #if defined(__cplusplus) 246 | 247 | #define Throw(inException) STOP; throw (inException) 248 | 249 | #define ThrowIf(inCondition, inException, inMessage) \ 250 | if(inCondition) \ 251 | { \ 252 | DebugMessage(inMessage); \ 253 | Throw(inException); \ 254 | } 255 | 256 | #define ThrowIfNULL(inPointer, inException, inMessage) \ 257 | if((inPointer) == NULL) \ 258 | { \ 259 | DebugMessage(inMessage); \ 260 | Throw(inException); \ 261 | } 262 | 263 | #define ThrowIfKernelError(inKernelError, inException, inMessage) \ 264 | { \ 265 | kern_return_t __Err = (inKernelError); \ 266 | if(__Err != 0) \ 267 | { \ 268 | DebugMessageN1(inMessage ", Error: 0x%X", __Err); \ 269 | Throw(inException); \ 270 | } \ 271 | } 272 | 273 | #define ThrowIfError(inError, inException, inMessage) \ 274 | { \ 275 | SInt32 __Err = (inError); \ 276 | if(__Err != 0) \ 277 | { \ 278 | char __4CC[5] = CA4CCToCString(__Err); \ 279 | DebugMessageN2(inMessage ", Error: %d (%s)", (int)__Err, __4CC); \ 280 | Throw(inException); \ 281 | } \ 282 | } 283 | 284 | #if TARGET_OS_WIN32 285 | #define ThrowIfWinError(inError, inException, inMessage) \ 286 | { \ 287 | HRESULT __Err = (inError); \ 288 | if(FAILED(__Err)) \ 289 | { \ 290 | DebugMessageN2(inMessage ", Code: %d, Facility: 0x%X", HRESULT_CODE(__Err), HRESULT_FACILITY(__Err)); \ 291 | Throw(inException); \ 292 | } \ 293 | } 294 | #endif 295 | 296 | #define SubclassResponsibility(inMethodName, inException) \ 297 | { \ 298 | DebugMessage(inMethodName": Subclasses must implement this method"); \ 299 | Throw(inException); \ 300 | } 301 | 302 | #endif // defined(__cplusplus) 303 | 304 | #else 305 | 306 | #pragma mark Release Macros 307 | 308 | #define Assert(inCondition, inMessage) \ 309 | if(!(inCondition)) \ 310 | { \ 311 | STOP; \ 312 | } 313 | 314 | #define AssertNoError(inError, inMessage) \ 315 | { \ 316 | SInt32 __Err = (inError); \ 317 | if(__Err != 0) \ 318 | { \ 319 | STOP; \ 320 | } \ 321 | } 322 | 323 | #define AssertNoKernelError(inError, inMessage) \ 324 | { \ 325 | unsigned int __Err = (unsigned int)(inError); \ 326 | if(__Err != 0) \ 327 | { \ 328 | STOP; \ 329 | } \ 330 | } 331 | 332 | #define FailIf(inCondition, inHandler, inMessage) \ 333 | if(inCondition) \ 334 | { \ 335 | STOP; \ 336 | goto inHandler; \ 337 | } 338 | 339 | #define FailWithAction(inCondition, inAction, inHandler, inMessage) \ 340 | if(inCondition) \ 341 | { \ 342 | STOP; \ 343 | { inAction; } \ 344 | goto inHandler; \ 345 | } 346 | 347 | #define FailIfNULL(inPointer, inAction, inHandler, inMessage) \ 348 | if((inPointer) == NULL) \ 349 | { \ 350 | STOP; \ 351 | { inAction; } \ 352 | goto inHandler; \ 353 | } 354 | 355 | #define FailIfKernelError(inKernelError, inException, inMessage) \ 356 | if((inKernelError) != 0) \ 357 | { \ 358 | STOP; \ 359 | { inAction; } \ 360 | goto inHandler; \ 361 | } 362 | 363 | #define FailIfError(inError, inException, inMessage) \ 364 | if((inError) != 0) \ 365 | { \ 366 | STOP; \ 367 | { inAction; } \ 368 | goto inHandler; \ 369 | } 370 | 371 | #if defined(__cplusplus) 372 | 373 | #define Throw(inException) STOP; throw (inException) 374 | 375 | #define ThrowIf(inCondition, inException, inMessage) \ 376 | if(inCondition) \ 377 | { \ 378 | Throw(inException); \ 379 | } 380 | 381 | #define ThrowIfNULL(inPointer, inException, inMessage) \ 382 | if((inPointer) == NULL) \ 383 | { \ 384 | Throw(inException); \ 385 | } 386 | 387 | #define ThrowIfKernelError(inKernelError, inException, inMessage) \ 388 | { \ 389 | kern_return_t __Err = (inKernelError); \ 390 | if(__Err != 0) \ 391 | { \ 392 | Throw(inException); \ 393 | } \ 394 | } 395 | 396 | #define ThrowIfError(inError, inException, inMessage) \ 397 | { \ 398 | SInt32 __Err = (inError); \ 399 | if(__Err != 0) \ 400 | { \ 401 | Throw(inException); \ 402 | } \ 403 | } 404 | 405 | #if TARGET_OS_WIN32 406 | #define ThrowIfWinError(inError, inException, inMessage) \ 407 | { \ 408 | HRESULT __Err = (inError); \ 409 | if(FAILED(__Err)) \ 410 | { \ 411 | Throw(inException); \ 412 | } \ 413 | } 414 | #endif 415 | 416 | #define SubclassResponsibility(inMethodName, inException) \ 417 | { \ 418 | Throw(inException); \ 419 | } 420 | 421 | #endif // defined(__cplusplus) 422 | 423 | #endif // DEBUG || CoreAudio_Debug 424 | 425 | #endif 426 | -------------------------------------------------------------------------------- /main.cpp: -------------------------------------------------------------------------------- 1 | // Created by R J Cooper. 2 | // Copyright (c) 2010 Mountainstorm 3 | // 4 | // Permission is hereby granted, free of charge, to any person obtaining a copy 5 | // of this software and associated documentation files (the "Software"), to deal 6 | // in the Software without restriction, including without limitation the rights 7 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | // copies of the Software, and to permit persons to whom the Software is 9 | // furnished to do so, subject to the following conditions: 10 | // 11 | // The above copyright notice and this permission notice shall be included in all 12 | // copies or substantial portions of the Software. 13 | // 14 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20 | // SOFTWARE. 21 | 22 | #include 23 | 24 | #include 25 | #include 26 | 27 | #include 28 | 29 | #include 30 | #include 31 | #include 32 | #include 33 | #include 34 | #include 35 | #include 36 | 37 | #include "CAHostTimeBase.h" 38 | 39 | 40 | #define kBufferSizeInFrames ( 512 ) 41 | #define kSampleFramesPerEnginBuffer ( 9216 ) 42 | 43 | 44 | char g_bufDataStore[ ( 44100 * 2 * sizeof( Float32 ) ) * 11 ] = {0}; 45 | char g_bufData[ sizeof( IOAudioBufferDataDescriptor ) - 1 + ( kBufferSizeInFrames * 2 * sizeof( Float32 ) ) ] = {0}; 46 | IOAudioBufferDataDescriptor *g_buf = ( IOAudioBufferDataDescriptor * ) g_bufData; 47 | 48 | 49 | 50 | typedef struct __AudioEngineInterface 51 | { 52 | io_service_t audioEngine; 53 | io_connect_t audioEngineConnection; 54 | io_service_t audioStreams[ 32 ]; 55 | 56 | } AudioEngineInterface; 57 | 58 | 59 | 60 | kern_return_t AudioEngineAPI__start( AudioEngineInterface *self ); 61 | kern_return_t AudioEngineAPI__stop( AudioEngineInterface *self ); 62 | kern_return_t AudioEngineAPI__getConnectionID( AudioEngineInterface *self, UInt32 *connection ); 63 | kern_return_t AudioEngineAPI__getNearestStartTime( AudioEngineInterface *self ); 64 | kern_return_t AudioEngineAPI__registerClientBuffer( AudioEngineInterface *self, UInt32 streamID, void *buffer, UInt32 bufferSize, UInt32 bufferSetID ); 65 | kern_return_t AudioEngineAPI__unregisterClientBuffer( AudioEngineInterface *self, void *buffer, UInt32 bufferSetID ); 66 | 67 | 68 | 69 | kern_return_t AudioEngineAPI__start( AudioEngineInterface *self ) 70 | { 71 | kern_return_t kernResult = 0; 72 | kernResult = IOConnectCallMethod( self->audioEngineConnection, 73 | kIOAudioEngineCallStart, 74 | NULL, // array of scalar (64-bit) input values. 75 | 0, // the number of scalar input values. 76 | NULL, // a pointer to the struct input parameter. 77 | 0, // the size of the input structure parameter. 78 | NULL, // array of scalar (64-bit) output values. 79 | NULL, // pointer to the number of scalar output values. 80 | NULL, // pointer to the struct output parameter. 81 | NULL // pointer to the size of the output structure parameter. 82 | ); 83 | if( kernResult != KERN_SUCCESS ) 84 | { 85 | printf( "kIOAudioEngineCallStart failed, kernResult: %x\n", kernResult ); 86 | 87 | } // if 88 | return( kernResult ); 89 | 90 | } // AudioEngineAPI__start( func ) 91 | 92 | 93 | 94 | kern_return_t AudioEngineAPI__stop( AudioEngineInterface *self ) 95 | { 96 | kern_return_t kernResult = 0; 97 | kernResult = IOConnectCallMethod( self->audioEngineConnection, 98 | kIOAudioEngineCallStop, 99 | NULL, // array of scalar (64-bit) input values. 100 | 0, // the number of scalar input values. 101 | NULL, // a pointer to the struct input parameter. 102 | 0, // the size of the input structure parameter. 103 | NULL, // array of scalar (64-bit) output values. 104 | NULL, // pointer to the number of scalar output values. 105 | NULL, // pointer to the struct output parameter. 106 | NULL // pointer to the size of the output structure parameter. 107 | ); 108 | if( kernResult != KERN_SUCCESS ) 109 | { 110 | printf( "kIOAudioEngineCallStop failed, kernResult: %x\n", kernResult ); 111 | 112 | } // if 113 | return( kernResult ); 114 | 115 | } // AudioEngineAPI__stop( func ) 116 | 117 | 118 | 119 | kern_return_t AudioEngineAPI__getConnectionID( AudioEngineInterface *self, UInt32 *connection ) 120 | { 121 | kern_return_t kernResult = 0; 122 | uint64_t params[ 1 ] = {0}; 123 | uint32_t outParams = sizeof( params ) / sizeof( params[ 0 ] ); 124 | 125 | kernResult = IOConnectCallMethod( self->audioEngineConnection, 126 | kIOAudioEngineCallGetConnectionID, 127 | NULL, // array of scalar (64-bit) input values. 128 | 0, // the number of scalar input values. 129 | NULL, // a pointer to the struct input parameter. 130 | 0, // the size of the input structure parameter. 131 | params, // array of scalar (64-bit) output values. 132 | &outParams, // pointer to the number of scalar output values. 133 | NULL, // pointer to the struct output parameter. 134 | NULL // pointer to the size of the output structure parameter. 135 | ); 136 | printf( "kIOAudioEngineCallGetConnectionID: %x\n", params[ 0 ] ); 137 | *connection = params[ 0 ]; 138 | if( kernResult != KERN_SUCCESS ) 139 | { 140 | printf( "kIOAudioEngineCallGetConnectionID failed, kernResult: %x\n", kernResult ); 141 | 142 | } // if 143 | return( kernResult ); 144 | 145 | } // AudioEngineAPI__getConnectionID( func ) 146 | 147 | 148 | 149 | kern_return_t AudioEngineAPI__getNearestStartTime( AudioEngineInterface *self ) 150 | { 151 | kern_return_t kernResult = 0; 152 | //uint64_t params[ 3 ] = {0}; 153 | //uint32_t inParams = sizeof( params ) / sizeof( params[ 0 ] ); 154 | 155 | // IOAudioStream *audioStream, IOAudioTimeStamp *ioTimeStamp, UInt32 isInput 156 | /* FIX: I can't see how you can call this. IOAudioEngineUserClient doesn't resolve the audioStream as an ID, passing it straight to the IOAudioEngine 157 | kernResult = IOConnectCallMethod( self->audioEngineConnection, 158 | kIOAudioEngineCallGetNearestStartTime, 159 | params, // array of scalar (64-bit) input values. 160 | inParams, // the number of scalar input values. 161 | NULL, // a pointer to the struct input parameter. 162 | 0, // the size of the input structure parameter. 163 | NULL, // array of scalar (64-bit) output values. 164 | NULL, // pointer to the number of scalar output values. 165 | NULL, // pointer to the struct output parameter. 166 | NULL // pointer to the size of the output structure parameter. 167 | ); 168 | */ 169 | if( kernResult != KERN_SUCCESS ) 170 | { 171 | printf( "kIOAudioEngineCallGetNearestStartTime failed, kernResult: %x\n", kernResult ); 172 | 173 | } // if 174 | return( kernResult ); 175 | 176 | } // AudioEngineAPI__getNearestStartTime( func ) 177 | 178 | 179 | 180 | kern_return_t AudioEngineAPI__registerClientBuffer( AudioEngineInterface *self, UInt32 streamID, void *buffer, UInt32 bufferSize, UInt32 bufferSetID ) 181 | { 182 | kern_return_t kernResult = 0; 183 | uint64_t params[ 4 ] = {0}; 184 | uint32_t inParams = sizeof( params ) / sizeof( params[ 0 ] ); 185 | 186 | params[ 0 ] = streamID; 187 | params[ 1 ] = ( uint64_t ) buffer; 188 | params[ 2 ] = bufferSize; 189 | params[ 3 ] = bufferSetID; 190 | 191 | // IOAudioStream *audioStream, IOAudioTimeStamp *ioTimeStamp, UInt32 isInput 192 | kernResult = IOConnectCallMethod( self->audioEngineConnection, 193 | kIOAudioEngineCallRegisterClientBuffer, 194 | params, // array of scalar (64-bit) input values. 195 | inParams, // the number of scalar input values. 196 | NULL, // a pointer to the struct input parameter. 197 | 0, // the size of the input structure parameter. 198 | NULL, // array of scalar (64-bit) output values. 199 | NULL, // pointer to the number of scalar output values. 200 | NULL, // pointer to the struct output parameter. 201 | NULL // pointer to the size of the output structure parameter. 202 | ); 203 | if( kernResult != KERN_SUCCESS ) 204 | { 205 | printf( "kIOAudioEngineCallRegisterClientBuffer failed, kernResult: %x\n", kernResult ); 206 | 207 | } // if 208 | return( kernResult ); 209 | 210 | } // AudioEngineAPI__registerClientBuffer( func ) 211 | 212 | 213 | 214 | kern_return_t AudioEngineAPI__unregisterClientBuffer( AudioEngineInterface *self, void *buffer, UInt32 bufferSetID ) 215 | { 216 | kern_return_t kernResult = 0; 217 | uint64_t params[ 2 ] = {0}; 218 | uint32_t inParams = sizeof( params ) / sizeof( params[ 0 ] ); 219 | 220 | params[ 0 ] = ( uint64_t ) buffer; 221 | params[ 1 ] = bufferSetID; 222 | 223 | // IOAudioStream *audioStream, IOAudioTimeStamp *ioTimeStamp, UInt32 isInput 224 | kernResult = IOConnectCallMethod( self->audioEngineConnection, 225 | kIOAudioEngineCallUnregisterClientBuffer, 226 | params, // array of scalar (64-bit) input values. 227 | inParams, // the number of scalar input values. 228 | NULL, // a pointer to the struct input parameter. 229 | 0, // the size of the input structure parameter. 230 | NULL, // array of scalar (64-bit) output values. 231 | NULL, // pointer to the number of scalar output values. 232 | NULL, // pointer to the struct output parameter. 233 | NULL // pointer to the size of the output structure parameter. 234 | ); 235 | if( kernResult != KERN_SUCCESS ) 236 | { 237 | printf( "kIOAudioEngineCallUnregisterClientBuffer failed, kernResult: %x\n", kernResult ); 238 | 239 | } // if 240 | return( kernResult ); 241 | 242 | } // AudioEngineAPI__unregisterClientBuffer( func ) 243 | 244 | 245 | 246 | void AudioEngineAPI__calculateIOThreadTimeConstraints(UInt64& outPeriod, UInt32& outQuanta, UInt32 noFramesInBuffer, Float64 sampleRate) 247 | { 248 | static const UInt64 kLowLatencyThreshhold = 1500ULL * 1000ULL; 249 | static const UInt64 kMedLatencyThreshhold = 4444ULL * 1000ULL; 250 | static UInt32 kLowLatencyComputeQuantum = 0; 251 | static UInt32 kMedLatencyComputeQuantum = 0; 252 | static UInt32 kHighLatencyComputeQuantum = 0; 253 | 254 | if(kLowLatencyComputeQuantum == 0) 255 | { 256 | kLowLatencyComputeQuantum = static_cast(CAHostTimeBase::ConvertFromNanos(500 * 1000)); 257 | kMedLatencyComputeQuantum = static_cast(CAHostTimeBase::ConvertFromNanos(300 * 1000)); 258 | kHighLatencyComputeQuantum = static_cast(CAHostTimeBase::ConvertFromNanos(100 * 1000)); 259 | } 260 | 261 | outPeriod = static_cast((static_cast(noFramesInBuffer)/sampleRate) * CAHostTimeBase::GetFrequency()); 262 | UInt64 thePeriodNanos = CAHostTimeBase::ConvertToNanos(outPeriod); 263 | outQuanta = kHighLatencyComputeQuantum; 264 | 265 | if(thePeriodNanos < kLowLatencyThreshhold) 266 | { 267 | outQuanta = kLowLatencyComputeQuantum; 268 | } 269 | else if(thePeriodNanos < kMedLatencyThreshhold) 270 | { 271 | outQuanta = kMedLatencyComputeQuantum; 272 | } 273 | 274 | if(outQuanta > thePeriodNanos) 275 | { 276 | outQuanta = static_cast(outPeriod); 277 | } 278 | } // AudioEngineAPI__calculateIOThreadTimeConstraints( func ) 279 | 280 | 281 | 282 | // frameSize e.g. 512, sampleRate e.g. 44100 283 | kern_return_t AudioEngineAPI__setSelfAsIOThread( UInt32 noFramesInBuffer, Float64 sampleRate ) 284 | { 285 | kern_return_t kernResult = 0; 286 | thread_time_constraint_policy_data_t thePolicy = {0}; 287 | 288 | UInt64 period = 0; 289 | UInt32 quanta = 0; 290 | AudioEngineAPI__calculateIOThreadTimeConstraints( period, quanta, noFramesInBuffer, sampleRate ); 291 | 292 | thePolicy.period = ( UInt32 ) period; 293 | thePolicy.computation = quanta; 294 | thePolicy.constraint = ( UInt32 ) period; 295 | thePolicy.preemptible = true; 296 | kernResult = thread_policy_set( mach_thread_self(), 297 | THREAD_TIME_CONSTRAINT_POLICY, 298 | ( thread_policy_t ) &thePolicy, 299 | THREAD_TIME_CONSTRAINT_POLICY_COUNT ); 300 | if( kernResult != KERN_SUCCESS ) 301 | { 302 | printf( "thread_policy_set failed, kernResult: %x\n", kernResult ); 303 | 304 | } // if 305 | return( kernResult ); 306 | 307 | } // AudioEngineAPI__setSelfAsIOThread( func ) 308 | 309 | 310 | 311 | kern_return_t AudioEngineAPI__sleepTillIOCycle( UInt64 anchor, UInt64 period, UInt64 ioCycle ) 312 | { 313 | kern_return_t kernResult = KERN_FAILURE; 314 | UInt64 wakeup = anchor + ( period * ( ioCycle + 1 ) ); 315 | UInt64 now = CAHostTimeBase::GetTheCurrentTime(); 316 | 317 | if( now < wakeup ) 318 | { 319 | // sleep till wakupTime (its in ticks) 320 | kernResult = mach_wait_until( wakeup ); 321 | 322 | } 323 | else 324 | { 325 | printf( "overload, ioCycle: %u\n", ioCycle ); 326 | 327 | } // if 328 | return( kernResult ); 329 | 330 | } // AudioEngineAPI__sleepTillIOCycle( func ) 331 | 332 | 333 | 334 | void callNN( void *refcon, io_service_t service, uint32_t messageType, void *messageArgument ) 335 | { 336 | printf( "callNN\n" ); 337 | } 338 | 339 | 340 | 341 | void test( AudioEngineInterface *dst ) 342 | { 343 | kern_return_t kernResult = 0; 344 | io_string_t dstPath = {0}; 345 | 346 | IORegistryEntryGetPath( dst->audioEngine, kIOServicePlane, dstPath ); 347 | printf( "playing, using: %s\n", dstPath ); 348 | 349 | // Instantiate a connection to the user client. 350 | kernResult = IOServiceOpen( dst->audioEngine, mach_task_self(), 0, &dst->audioEngineConnection ); 351 | if( dst->audioEngineConnection != IO_OBJECT_NULL ) 352 | { 353 | //mach_port_name_t port = 0; 354 | //IOAudioNotificationMessage notification = {0}; 355 | int i = 0; 356 | //IONotificationPortRef portRef = 0; 357 | //io_object_t nn = 0; 358 | vm_address_t addr = 0; 359 | vm_size_t addrSize = 0; 360 | UInt32 bufID = 7; 361 | IOAudioEngineStatus *status = NULL; 362 | FILE *fp = NULL; 363 | UInt32 fsf = 0; 364 | char *storeCur = NULL; 365 | uint64_t ioCycleCount = 0; 366 | uint64_t start; 367 | uint64_t end; 368 | uint64_t elapsed; 369 | uint64_t elapsedNano; 370 | static mach_timebase_info_data_t sTimebaseInfo; 371 | 372 | 373 | AudioEngineAPI__registerClientBuffer( dst, 0, g_buf, sizeof( g_bufData ), bufID ); 374 | 375 | kernResult = IOConnectMapMemory( dst->audioEngineConnection, 376 | kIOAudioStatusBuffer, 377 | mach_task_self(), 378 | ( vm_address_t * ) &status, 379 | &addrSize, 380 | kIOMapAnywhere ); 381 | printf( "IOConnectMapMemory, %x, %x, %u\n", kernResult, addr, addrSize ); 382 | 383 | /* 384 | kernResult = IOConnectMapMemory( dst->audioEngineConnection, 385 | kIOAudioBytesInInputBuffer, // use kIOAudioBytesInOutputBuffer for an output one 386 | mach_task_self(), 387 | ( vm_address_t * ) &addr, 388 | &addrSize, 389 | kIOMapAnywhere ); 390 | printf( "IOConnectMapMemory, %x, %x, %u\n", kernResult, addr, addrSize ); 391 | */ 392 | 393 | //portRef = IONotificationPortCreate( mach_task_self() ); 394 | //printf( "IONotificationPortCreate, %x\n", portRef ); 395 | 396 | //kernResult = IOServiceAddInterestNotification( portRef, dst->audioEngine, kIOGeneralInterest, callNN, NULL, &nn ); 397 | //printf( "IOServiceAddInterestNotification, %x\n", kernResult ); 398 | 399 | //kernResult = IOConnectSetNotificationPort( dst->audioEngineConnection, 0, IONotificationPortGetMachPort( portRef ), 0 ); 400 | //printf( "IOConnectSetNotificationPort, kernResult: %x\n", kernResult ); 401 | 402 | 403 | AudioEngineAPI__setSelfAsIOThread( kBufferSizeInFrames, 44100 ); 404 | AudioEngineAPI__start( dst ); 405 | 406 | // anchor time 407 | UInt64 anchor = CAHostTimeBase::GetTheCurrentTime(); 408 | 409 | // this sends back notification - returns a IOAudioNotificationMessage 410 | // for( i = 0; i < 2; i++ ) 411 | { 412 | // mach_msg_overwrite( NULL, MACH_RCV_MSG, 0, sizeof( notification ), IONotificationPortGetMachPort( portRef ), MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL, ( mach_msg_header_t * ) ¬ification, sizeof( notification ) - sizeof( mach_msg_header_t ) ); 413 | // printf("Data received: %u\n", i ); 414 | } 415 | 416 | /* 417 | struct { 418 | mach_msg_header_t msgHdr; 419 | OSNotificationHeader notifyHeader; 420 | mach_msg_trailer_t trailer; 421 | } msg; 422 | kernResult = mach_msg(&msg.msgHdr, MACH_RCV_MSG, 0, sizeof(msg), IONotificationPortGetMachPort( portRef ), 0, MACH_PORT_NULL); 423 | printf( "mach_msg: %x\n", kernResult ); 424 | */ 425 | // P1: UInt32 firstSampleFrame = which sample frame to start overwriting 426 | // P2: UInt32 loopCount = 427 | // P3: bool inputIO = true -> record into buffer, false -> read from buffer and play 428 | // P4: UInt32 bufferSetID = the buffer set to use 429 | // P5: UInt32 sampleIntervalHi = 430 | // P6: UInt32 sampleIntervalLo = 431 | 432 | 433 | /* sleep( 1 ); 434 | kernResult = IOConnectTrap6( dst->audioEngineConnection, kIOAudioEngineTrapPerformClientIO, 0, 0, true, bufID, 0, 0 ); 435 | printf( "IOCOnnectTrap6, kernResult: %x, %f\n", kernResult, checkbuf() ); 436 | 437 | sleep( 1 ); 438 | kernResult = IOConnectTrap6( dst->audioEngineConnection, kIOAudioEngineTrapPerformClientIO, 0, 0, true, bufID, 0, 0 ); 439 | printf( "IOCOnnectTrap6, kernResult: %x, %f\n", kernResult, checkbuf() ); 440 | 441 | sleep( 1 ); 442 | kernResult = IOConnectTrap6( dst->audioEngineConnection, kIOAudioEngineTrapPerformClientIO, 0, 0, true, bufID, 0, 0 ); 443 | printf( "IOCOnnectTrap6, kernResult: %x, %f\n", kernResult, checkbuf() ); 444 | */ 445 | 446 | UInt64 idealPeriod = 0; 447 | UInt32 idealQuanta = 0; 448 | AudioEngineAPI__calculateIOThreadTimeConstraints( idealPeriod, idealQuanta, kBufferSizeInFrames, 44100 ); 449 | 450 | fprintf( stderr, "--------\n" ); 451 | storeCur = g_bufDataStore; 452 | 453 | fsf = 0; 454 | g_buf->fActualDataByteSize = sizeof( g_bufData ) - sizeof( IOAudioBufferDataDescriptor ) + 1; 455 | g_buf->fActualNumSampleFrames = kBufferSizeInFrames; // read x frames ? 456 | g_buf->fTotalDataByteSize = sizeof( g_bufData ) - sizeof( IOAudioBufferDataDescriptor ) + 1; 457 | g_buf->fNominalDataByteSize = sizeof( g_bufData ) - sizeof( IOAudioBufferDataDescriptor ) + 1; // not used 458 | 459 | for( ioCycleCount = 0; ioCycleCount < 860; ioCycleCount++ ) 460 | { 461 | if( AudioEngineAPI__sleepTillIOCycle( anchor, idealPeriod, ioCycleCount ) == KERN_SUCCESS ) 462 | { 463 | 464 | /* printf( "Status:\n" ); 465 | printf( " fVersion: %u\n", status->fVersion ); 466 | printf( " fCurrentLoopCount: %u\n", status->fCurrentLoopCount ); 467 | printf( " fLastLoopTime: %u64\n", status->fLastLoopTime ); 468 | printf( "fEraseHeadSampleFrame: %u\n", status->fEraseHeadSampleFrame ); 469 | */ 470 | 471 | /* g_buf->fActualDataByteSize = sizeof( g_bufData ) - sizeof( IOAudioBufferDataDescriptor ) - 1; 472 | g_buf->fActualNumSampleFrames = 256; // read x frames ? 473 | g_buf->fTotalDataByteSize = sizeof( g_bufData ); 474 | g_buf->fNominalDataByteSize = 0; // not used 475 | */ 476 | kernResult = IOConnectTrap6( dst->audioEngineConnection, kIOAudioEngineTrapPerformClientIO, fsf, 0, true, bufID, 0, 0 ); 477 | 478 | memcpy( storeCur, g_buf->fData, g_buf->fActualDataByteSize ); 479 | fsf += g_buf->fActualNumSampleFrames; 480 | storeCur += g_buf->fActualDataByteSize; 481 | 482 | if( fsf >= kSampleFramesPerEnginBuffer ) 483 | { 484 | fsf = 0; 485 | 486 | } // if 487 | 488 | /* printf( " Data:\n" ); 489 | printf( " fActualDataByteSize: %u\n", g_buf->fActualDataByteSize ); 490 | printf( " fActualNumSampleFrames: %u\n", g_buf->fActualNumSampleFrames ); 491 | printf( " fTotalDataByteSize: %u\n", g_buf->fTotalDataByteSize ); 492 | printf( " fNominalDataByteSize: %u\n", g_buf->fNominalDataByteSize ); 493 | */ 494 | } // if 495 | } 496 | end = mach_absolute_time(); 497 | fprintf( stderr, "-------- %llu, %llu\n", end, start ); 498 | 499 | 500 | AudioEngineAPI__stop( dst ); 501 | 502 | 503 | elapsed = end - anchor; 504 | if ( sTimebaseInfo.denom == 0 ) { 505 | (void) mach_timebase_info(&sTimebaseInfo); 506 | } 507 | printf( "total loop time: %f - %llu\n", ( float ) elapsed / ( float ) 1000000000, elapsed * sTimebaseInfo.numer / sTimebaseInfo.denom ); 508 | printf( "time: %f\n", ( float ) CAHostTimeBase::ConvertToNanos( elapsed ) / ( float ) 1000000000 ); 509 | 510 | 511 | // Do the maths. We hope that the multiplication doesn't 512 | // overflow; the price you pay for working in fixed point. 513 | 514 | 515 | fp = fopen( "rawaudui.pcm", "wb" ); 516 | fwrite( g_bufDataStore, sizeof( g_bufDataStore ), 1, fp ); 517 | fclose( fp ); 518 | 519 | 520 | //kernResult = IOConnectSetNotificationPort( dst->audioEngineConnection, kIOAudioEngineAllNotifications, MACH_PORT_NULL, 0 ); 521 | //printf( "IOConnectSetNotificationPort, kernResult: %x\n", kernResult ); 522 | 523 | 524 | AudioEngineAPI__unregisterClientBuffer( dst, g_buf, bufID ); 525 | 526 | kernResult = IOConnectUnmapMemory( dst->audioEngineConnection, kIOAudioStatusBuffer, mach_task_self(), ( vm_address_t )&g_buf ); 527 | printf( "IOConnectUnmapMemory, %x\n", kernResult ); 528 | //IONotificationPortDestroy( portRef ); 529 | 530 | IOServiceClose( dst->audioEngineConnection ); 531 | 532 | } 533 | else 534 | { 535 | printf( "Unable to open dst service: %x\n", kernResult ); 536 | } 537 | } 538 | 539 | 540 | 541 | 542 | int main (int argc, const char * argv[]) 543 | { 544 | kern_return_t kernResult = 0; 545 | AudioEngineInterface audioEngine[ 32 ] = {0}; 546 | AudioEngineInterface *cur = NULL; 547 | io_iterator_t iterator = 0; 548 | 549 | 550 | // Repeat the test on any instances of the Mac OS X 10.4 version of the driver. 551 | kernResult = IOServiceGetMatchingServices( kIOMasterPortDefault, IOServiceMatching( kIOAudioEngineClassName ), &iterator ); 552 | if( kernResult != KERN_SUCCESS ) 553 | { 554 | printf( "IOServiceGetMatchingServices failed: %x\n", kernResult ); 555 | return -1; 556 | 557 | } // if 558 | 559 | cur = audioEngine; 560 | while( ( cur->audioEngine = IOIteratorNext( iterator ) ) != IO_OBJECT_NULL ) 561 | { 562 | io_iterator_t childIterator = 0; 563 | 564 | io_string_t path = {0}; 565 | CFStringRef id = NULL; 566 | CFStringRef desc = NULL; 567 | IORegistryEntryGetPath( cur->audioEngine, kIOServicePlane, path ); 568 | 569 | id = ( CFStringRef ) IORegistryEntryCreateCFProperty( cur->audioEngine, CFSTR( kIOAudioEngineGlobalUniqueIDKey ), kCFAllocatorDefault, 0 ); 570 | desc = ( CFStringRef ) IORegistryEntryCreateCFProperty( cur->audioEngine, CFSTR( kIOAudioEngineDescriptionKey ), kCFAllocatorDefault, 0 ); 571 | 572 | printf( "Found a device( %u ): %s\n", ( cur - audioEngine ), path ); 573 | printf( " ID: %s\n", id ? CFStringGetCStringPtr( id, kCFStringEncodingMacRoman ): "(null)" ); 574 | printf( " description: %s\n", desc ? CFStringGetCStringPtr( desc, kCFStringEncodingMacRoman ): "(null)" ); 575 | 576 | kernResult = IORegistryEntryGetChildIterator( cur->audioEngine, kIOServicePlane, &childIterator ); 577 | if( kernResult == KERN_SUCCESS ) 578 | { 579 | io_service_t *curStream = cur->audioStreams; 580 | while( ( *curStream = IOIteratorNext( childIterator ) ) != IO_OBJECT_NULL ) 581 | { 582 | io_name_t clsName = {0}; 583 | IOObjectGetClass( *curStream, clsName ); 584 | if( ( strcmp( clsName, kIOAudioStreamClassName ) == 0 ) 585 | || ( strcmp( clsName, "AppleUSBAudioStream" ) == 0 ) ) 586 | { 587 | printf( " Found a stream: %s\n", clsName ); 588 | curStream++; 589 | 590 | } 591 | else 592 | { 593 | printf( " - not a stream: %s\n", clsName ); 594 | *curStream = 0; 595 | 596 | } // if 597 | } // while 598 | IOObjectRelease( childIterator ); 599 | 600 | } // if 601 | cur++; 602 | 603 | } // while 604 | IOObjectRelease( iterator ); 605 | 606 | 607 | test( &audioEngine[ 1 ] ); 608 | return( 0 ); 609 | } 610 | 611 | -------------------------------------------------------------------------------- /llaudio.xcodeproj/drakeironman.pbxuser: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | 08FB7793FE84155DC02AAC07 /* Project object */ = { 4 | activeBuildConfigurationName = Debug; 5 | activeExecutable = 4ABB2517101AF9C400EED49A /* llaudio */; 6 | activeTarget = EE19EED407B2C7BF0083E1AA /* llaudio */; 7 | addToTargets = ( 8 | EE19EED407B2C7BF0083E1AA /* llaudio */, 9 | ); 10 | breakpoints = ( 11 | 4A56F860101DC849005F3171 /* main.cpp:503 */, 12 | 4ADDC36F10245855003C6833 /* main.cpp:482 */, 13 | 4A5B39AC102A1500005DE6A0 /* main.cpp:463 */, 14 | ); 15 | codeSenseManager = 4ABB2526101AF9DF00EED49A /* Code sense */; 16 | executables = ( 17 | 4ABB2517101AF9C400EED49A /* llaudio */, 18 | ); 19 | expressions = ( 20 | "(IODataQueueMemory *)g_buf", 21 | storeCur, 22 | g_bugDataStore, 23 | g_bufDataStore, 24 | ); 25 | perUserDictionary = { 26 | PBXConfiguration.PBXFileTableDataSource3.PBXExecutablesDataSource = { 27 | PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; 28 | PBXFileTableDataSourceColumnSortingKey = PBXExecutablesDataSource_NameID; 29 | PBXFileTableDataSourceColumnWidthsKey = ( 30 | 22, 31 | 300, 32 | 596.58349609375, 33 | ); 34 | PBXFileTableDataSourceColumnsKey = ( 35 | PBXExecutablesDataSource_ActiveFlagID, 36 | PBXExecutablesDataSource_NameID, 37 | PBXExecutablesDataSource_CommentsID, 38 | ); 39 | }; 40 | PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = { 41 | PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; 42 | PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; 43 | PBXFileTableDataSourceColumnWidthsKey = ( 44 | 20, 45 | 655, 46 | 20, 47 | 48, 48 | 43, 49 | 43, 50 | 20, 51 | ); 52 | PBXFileTableDataSourceColumnsKey = ( 53 | PBXFileDataSource_FiletypeID, 54 | PBXFileDataSource_Filename_ColumnID, 55 | PBXFileDataSource_Built_ColumnID, 56 | PBXFileDataSource_ObjectSize_ColumnID, 57 | PBXFileDataSource_Errors_ColumnID, 58 | PBXFileDataSource_Warnings_ColumnID, 59 | PBXFileDataSource_Target_ColumnID, 60 | ); 61 | }; 62 | PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = { 63 | PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; 64 | PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; 65 | PBXFileTableDataSourceColumnWidthsKey = ( 66 | 20, 67 | 301, 68 | 60, 69 | 20, 70 | 48, 71 | 43, 72 | 43, 73 | ); 74 | PBXFileTableDataSourceColumnsKey = ( 75 | PBXFileDataSource_FiletypeID, 76 | PBXFileDataSource_Filename_ColumnID, 77 | PBXTargetDataSource_PrimaryAttribute, 78 | PBXFileDataSource_Built_ColumnID, 79 | PBXFileDataSource_ObjectSize_ColumnID, 80 | PBXFileDataSource_Errors_ColumnID, 81 | PBXFileDataSource_Warnings_ColumnID, 82 | ); 83 | }; 84 | PBXPerProjectTemplateStateSaveDate = 271023148; 85 | PBXWorkspaceStateSaveDate = 271023148; 86 | }; 87 | perUserProjectItems = { 88 | 4A04C40F101C7550003D6267 /* PBXTextBookmark */ = 4A04C40F101C7550003D6267 /* PBXTextBookmark */; 89 | 4A04C457101C7F0E003D6267 /* PBXTextBookmark */ = 4A04C457101C7F0E003D6267 /* PBXTextBookmark */; 90 | 4A04C458101C7F0E003D6267 /* PBXTextBookmark */ = 4A04C458101C7F0E003D6267 /* PBXTextBookmark */; 91 | 4A04C46A101C813E003D6267 /* PBXTextBookmark */ = 4A04C46A101C813E003D6267 /* PBXTextBookmark */; 92 | 4A04C46D101C813E003D6267 /* PBXTextBookmark */ = 4A04C46D101C813E003D6267 /* PBXTextBookmark */; 93 | 4A04C46E101C813E003D6267 /* PBXTextBookmark */ = 4A04C46E101C813E003D6267 /* PBXTextBookmark */; 94 | 4A04C4A6101C915B003D6267 /* PBXTextBookmark */ = 4A04C4A6101C915B003D6267 /* PBXTextBookmark */; 95 | 4A04C4AE101C944D003D6267 /* PBXTextBookmark */ = 4A04C4AE101C944D003D6267 /* PBXTextBookmark */; 96 | 4A04C4B0101C944D003D6267 /* PBXTextBookmark */ = 4A04C4B0101C944D003D6267 /* PBXTextBookmark */; 97 | 4A04C4DF101CA3DE003D6267 /* PBXTextBookmark */ = 4A04C4DF101CA3DE003D6267 /* PBXTextBookmark */; 98 | 4A04C4E7101CA7F9003D6267 /* PBXTextBookmark */ = 4A04C4E7101CA7F9003D6267 /* PBXTextBookmark */; 99 | 4A21C52C101CBDAF00C245B5 /* PBXTextBookmark */ = 4A21C52C101CBDAF00C245B5 /* PBXTextBookmark */; 100 | 4A21C555101CE2C500C245B5 /* PBXTextBookmark */ = 4A21C555101CE2C500C245B5 /* PBXTextBookmark */; 101 | 4A21C556101CE2C500C245B5 /* PBXTextBookmark */ = 4A21C556101CE2C500C245B5 /* PBXTextBookmark */; 102 | 4A21C590101D813300C245B5 /* PBXTextBookmark */ = 4A21C590101D813300C245B5 /* PBXTextBookmark */; 103 | 4A21C5DB101DA53500C245B5 /* PBXTextBookmark */ = 4A21C5DB101DA53500C245B5 /* PBXTextBookmark */; 104 | 4A21C5F3101DAA9F00C245B5 /* PBXTextBookmark */ = 4A21C5F3101DAA9F00C245B5 /* PBXTextBookmark */; 105 | 4A5B38DB10278330005DE6A0 /* PBXTextBookmark */ = 4A5B38DB10278330005DE6A0 /* PBXTextBookmark */; 106 | 4A5B38E1102783BE005DE6A0 /* PBXTextBookmark */ = 4A5B38E1102783BE005DE6A0 /* PBXTextBookmark */; 107 | 4A5B38F31028A7C6005DE6A0 /* PBXTextBookmark */ = 4A5B38F31028A7C6005DE6A0 /* PBXTextBookmark */; 108 | 4A5B38F41028A7C6005DE6A0 /* PBXTextBookmark */ = 4A5B38F41028A7C6005DE6A0 /* PBXTextBookmark */; 109 | 4A5B38F61028A7C6005DE6A0 /* PBXTextBookmark */ = 4A5B38F61028A7C6005DE6A0 /* PBXTextBookmark */; 110 | 4A5B38F71028A7C6005DE6A0 /* PBXTextBookmark */ = 4A5B38F71028A7C6005DE6A0 /* PBXTextBookmark */; 111 | 4A5B38F91028A7C6005DE6A0 /* PBXTextBookmark */ = 4A5B38F91028A7C6005DE6A0 /* PBXTextBookmark */; 112 | 4A5B38FA1028A7C6005DE6A0 /* PBXTextBookmark */ = 4A5B38FA1028A7C6005DE6A0 /* PBXTextBookmark */; 113 | 4A5B39031029F0F7005DE6A0 /* PBXTextBookmark */ = 4A5B39031029F0F7005DE6A0 /* PBXTextBookmark */; 114 | 4A5B39221029F6FF005DE6A0 /* PBXTextBookmark */ = 4A5B39221029F6FF005DE6A0 /* PBXTextBookmark */; 115 | 4A5B39261029F6FF005DE6A0 /* PBXTextBookmark */ = 4A5B39261029F6FF005DE6A0 /* PBXTextBookmark */; 116 | 4A5B39281029F6FF005DE6A0 /* PBXTextBookmark */ = 4A5B39281029F6FF005DE6A0 /* PBXTextBookmark */; 117 | 4A5B392A1029F6FF005DE6A0 /* PBXTextBookmark */ = 4A5B392A1029F6FF005DE6A0 /* PBXTextBookmark */; 118 | 4A5B392C1029F6FF005DE6A0 /* PBXTextBookmark */ = 4A5B392C1029F6FF005DE6A0 /* PBXTextBookmark */; 119 | 4A5B392E1029F6FF005DE6A0 /* PBXTextBookmark */ = 4A5B392E1029F6FF005DE6A0 /* PBXTextBookmark */; 120 | 4A5B39361029FAF6005DE6A0 /* PBXTextBookmark */ = 4A5B39361029FAF6005DE6A0 /* PBXTextBookmark */; 121 | 4A5B39D9102A26EA005DE6A0 /* PBXTextBookmark */ = 4A5B39D9102A26EA005DE6A0 /* PBXTextBookmark */; 122 | 4A5B39DA102A26EA005DE6A0 /* PBXTextBookmark */ = 4A5B39DA102A26EA005DE6A0 /* PBXTextBookmark */; 123 | 4A5B39DB102A26EA005DE6A0 /* PBXTextBookmark */ = 4A5B39DB102A26EA005DE6A0 /* PBXTextBookmark */; 124 | 4A5B39DC102A26EA005DE6A0 /* PBXTextBookmark */ = 4A5B39DC102A26EA005DE6A0 /* PBXTextBookmark */; 125 | 4A5B39DD102A26EA005DE6A0 /* PBXTextBookmark */ = 4A5B39DD102A26EA005DE6A0 /* PBXTextBookmark */; 126 | 4A5B39DE102A26EA005DE6A0 /* PBXTextBookmark */ = 4A5B39DE102A26EA005DE6A0 /* PBXTextBookmark */; 127 | 4A5B39DF102A26EA005DE6A0 /* PBXTextBookmark */ = 4A5B39DF102A26EA005DE6A0 /* PBXTextBookmark */; 128 | 4A5B39E0102A26EA005DE6A0 /* PBXTextBookmark */ = 4A5B39E0102A26EA005DE6A0 /* PBXTextBookmark */; 129 | 4A5B39E1102A26EA005DE6A0 /* PBXTextBookmark */ = 4A5B39E1102A26EA005DE6A0 /* PBXTextBookmark */; 130 | 4A5B39E4102B551D005DE6A0 /* PBXTextBookmark */ = 4A5B39E4102B551D005DE6A0 /* PBXTextBookmark */; 131 | 4A673CC51020DE7600B26306 /* PBXTextBookmark */ = 4A673CC51020DE7600B26306 /* PBXTextBookmark */; 132 | 4A673CC71020DE7600B26306 /* PBXTextBookmark */ = 4A673CC71020DE7600B26306 /* PBXTextBookmark */; 133 | 4A673CC91020DE7600B26306 /* PBXTextBookmark */ = 4A673CC91020DE7600B26306 /* PBXTextBookmark */; 134 | 4A69C76F101C4B610092D59D /* PBXTextBookmark */ = 4A69C76F101C4B610092D59D /* PBXTextBookmark */; 135 | 4A69C771101C4B610092D59D /* PBXTextBookmark */ = 4A69C771101C4B610092D59D /* PBXTextBookmark */; 136 | 4AA7195610277852008913AD /* PBXTextBookmark */ = 4AA7195610277852008913AD /* PBXTextBookmark */; 137 | 4AA7195910277852008913AD /* PBXTextBookmark */ = 4AA7195910277852008913AD /* PBXTextBookmark */; 138 | 4AA7196510277927008913AD /* PBXTextBookmark */ = 4AA7196510277927008913AD /* PBXTextBookmark */; 139 | 4ADDC38110245908003C6833 /* PBXTextBookmark */ = 4ADDC38110245908003C6833 /* PBXTextBookmark */; 140 | 4AF422C7101B0D8100CE5B8B /* PBXTextBookmark */ = 4AF422C7101B0D8100CE5B8B /* PBXTextBookmark */; 141 | 4AF422EE101B71D700CE5B8B /* PBXTextBookmark */ = 4AF422EE101B71D700CE5B8B /* PBXTextBookmark */; 142 | }; 143 | sourceControlManager = 4ABB2525101AF9DF00EED49A /* Source Control */; 144 | userBuildSettings = { 145 | }; 146 | }; 147 | 08FB7796FE84155DC02AAC07 /* main.cpp */ = { 148 | uiCtxt = { 149 | sepNavIntBoundsRect = "{{0, 0}, {962, 8652}}"; 150 | sepNavSelRange = "{12189, 0}"; 151 | sepNavVisRange = "{11510, 1582}"; 152 | }; 153 | }; 154 | 4A04C374101C554C003D6267 /* IOReturn.h */ = { 155 | isa = PBXFileReference; 156 | lastKnownFileType = sourcecode.c.h; 157 | name = IOReturn.h; 158 | path = /Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/IOKit.framework/Versions/A/Headers/IOReturn.h; 159 | sourceTree = ""; 160 | }; 161 | 4A04C3E8101C67DC003D6267 /* kern_return.h */ = { 162 | isa = PBXFileReference; 163 | lastKnownFileType = sourcecode.c.h; 164 | name = kern_return.h; 165 | path = /Developer/SDKs/MacOSX10.5.sdk/usr/include/mach/kern_return.h; 166 | sourceTree = ""; 167 | uiCtxt = { 168 | sepNavIntBoundsRect = "{{0, 0}, {833, 4228}}"; 169 | sepNavSelRange = "{3167, 12}"; 170 | sepNavVisRange = "{2407, 1489}"; 171 | }; 172 | }; 173 | 4A04C40F101C7550003D6267 /* PBXTextBookmark */ = { 174 | isa = PBXTextBookmark; 175 | fRef = 4A04C410101C7550003D6267 /* message.h */; 176 | name = "message.h: 324"; 177 | rLen = 21; 178 | rLoc = 10512; 179 | rType = 0; 180 | vrLen = 1250; 181 | vrLoc = 9685; 182 | }; 183 | 4A04C410101C7550003D6267 /* message.h */ = { 184 | isa = PBXFileReference; 185 | lastKnownFileType = sourcecode.c.h; 186 | name = message.h; 187 | path = /Developer/SDKs/MacOSX10.5.sdk/usr/include/mach/message.h; 188 | sourceTree = ""; 189 | }; 190 | 4A04C444101C78F5003D6267 /* IOAudioTypes.h */ = { 191 | isa = PBXFileReference; 192 | lastKnownFileType = sourcecode.c.h; 193 | name = IOAudioTypes.h; 194 | path = /Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/IOKit.framework/Versions/A/Headers/Audio/IOAudioTypes.h; 195 | sourceTree = ""; 196 | }; 197 | 4A04C457101C7F0E003D6267 /* PBXTextBookmark */ = { 198 | isa = PBXTextBookmark; 199 | fRef = 4AF4226A101AFC0300CE5B8B /* IOUSBLib.h */; 200 | name = "IOUSBLib.h: 82"; 201 | rLen = 76; 202 | rLoc = 3493; 203 | rType = 0; 204 | vrLen = 2113; 205 | vrLoc = 2235; 206 | }; 207 | 4A04C458101C7F0E003D6267 /* PBXTextBookmark */ = { 208 | isa = PBXTextBookmark; 209 | fRef = 4AF42274101B00D800CE5B8B /* IOKitLib.h */; 210 | name = "IOKitLib.h: 721"; 211 | rLen = 20; 212 | rLoc = 36157; 213 | rType = 0; 214 | vrLen = 2349; 215 | vrLoc = 35373; 216 | }; 217 | 4A04C462101C7F0E003D6267 /* syscall_sw.c */ = { 218 | isa = PBXFileReference; 219 | lastKnownFileType = sourcecode.c.c; 220 | name = syscall_sw.c; 221 | path = "/Users/drakeironman/Documents/impulses/puredarwin/darwin/xnu-1228.12.14/osfmk/kern/syscall_sw.c"; 222 | sourceTree = ""; 223 | }; 224 | 4A04C467101C7F0E003D6267 /* IOUserClient.cpp */ = { 225 | isa = PBXFileReference; 226 | lastKnownFileType = sourcecode.cpp.cpp; 227 | name = IOUserClient.cpp; 228 | path = "/Users/drakeironman/Documents/impulses/puredarwin/darwin/xnu-1228.12.14/iokit/Kernel/IOUserClient.cpp"; 229 | sourceTree = ""; 230 | }; 231 | 4A04C46A101C813E003D6267 /* PBXTextBookmark */ = { 232 | isa = PBXTextBookmark; 233 | fRef = 4AF422F5101B71D700CE5B8B /* IOKitLib.h */; 234 | name = "IOKitLib.h: 766"; 235 | rLen = 14; 236 | rLoc = 37156; 237 | rType = 0; 238 | vrLen = 1347; 239 | vrLoc = 36421; 240 | }; 241 | 4A04C46D101C813E003D6267 /* PBXTextBookmark */ = { 242 | isa = PBXTextBookmark; 243 | fRef = 4A69C775101C4B610092D59D /* IOKitLib.c */; 244 | name = "IOKitLib.c: 1358"; 245 | rLen = 0; 246 | rLoc = 32523; 247 | rType = 0; 248 | vrLen = 1153; 249 | vrLoc = 33201; 250 | }; 251 | 4A04C46E101C813E003D6267 /* PBXTextBookmark */ = { 252 | isa = PBXTextBookmark; 253 | fRef = 4A04C462101C7F0E003D6267 /* syscall_sw.c */; 254 | name = "syscall_sw.c: 198"; 255 | rLen = 22; 256 | rLoc = 8772; 257 | rType = 0; 258 | vrLen = 2615; 259 | vrLoc = 7603; 260 | }; 261 | 4A04C4A6101C915B003D6267 /* PBXTextBookmark */ = { 262 | isa = PBXTextBookmark; 263 | fRef = 4A04C374101C554C003D6267 /* IOReturn.h */; 264 | name = "IOReturn.h: 102"; 265 | rLen = 16; 266 | rLoc = 5089; 267 | rType = 0; 268 | vrLen = 3695; 269 | vrLoc = 3777; 270 | }; 271 | 4A04C4AE101C944D003D6267 /* PBXTextBookmark */ = { 272 | isa = PBXTextBookmark; 273 | fRef = 4A04C4AF101C944D003D6267 /* IOAudioDebug.h */; 274 | name = "IOAudioDebug.h: 31"; 275 | rLen = 15; 276 | rLoc = 1066; 277 | rType = 0; 278 | vrLen = 1603; 279 | vrLoc = 3; 280 | }; 281 | 4A04C4AF101C944D003D6267 /* IOAudioDebug.h */ = { 282 | isa = PBXFileReference; 283 | lastKnownFileType = sourcecode.c.h; 284 | name = IOAudioDebug.h; 285 | path = "/Users/drakeironman/Documents/impulses/puredarwin/darwin/IOAudioFamily-169.4.3/IOAudioDebug.h"; 286 | sourceTree = ""; 287 | }; 288 | 4A04C4B0101C944D003D6267 /* PBXTextBookmark */ = { 289 | isa = PBXTextBookmark; 290 | fRef = 4AA81945101C52C8001D7D92 /* IOAudioDefines.h */; 291 | name = "IOAudioDefines.h: 28"; 292 | rLen = 49; 293 | rLoc = 1088; 294 | rType = 0; 295 | vrLen = 1472; 296 | vrLoc = 7430; 297 | }; 298 | 4A04C4BE101C9709003D6267 /* MacTypes.h */ = { 299 | isa = PBXFileReference; 300 | lastKnownFileType = sourcecode.c.h; 301 | name = MacTypes.h; 302 | path = /Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/CarbonCore.framework/Versions/A/Headers/MacTypes.h; 303 | sourceTree = ""; 304 | }; 305 | 4A04C4DF101CA3DE003D6267 /* PBXTextBookmark */ = { 306 | isa = PBXTextBookmark; 307 | fRef = 4A04C4E0101CA3DE003D6267 /* vm_types.h */; 308 | name = "vm_types.h: 41"; 309 | rLen = 39; 310 | rLoc = 1538; 311 | rType = 0; 312 | vrLen = 1963; 313 | vrLoc = 0; 314 | }; 315 | 4A04C4E0101CA3DE003D6267 /* vm_types.h */ = { 316 | isa = PBXFileReference; 317 | lastKnownFileType = sourcecode.c.h; 318 | name = vm_types.h; 319 | path = /Developer/SDKs/MacOSX10.5.sdk/usr/include/mach/vm_types.h; 320 | sourceTree = ""; 321 | }; 322 | 4A04C4E7101CA7F9003D6267 /* PBXTextBookmark */ = { 323 | isa = PBXTextBookmark; 324 | fRef = 4A04C467101C7F0E003D6267 /* IOUserClient.cpp */; 325 | name = "IOUserClient.cpp: 3833"; 326 | rLen = 19; 327 | rLoc = 102179; 328 | rType = 0; 329 | vrLen = 1332; 330 | vrLoc = 102140; 331 | }; 332 | 4A21C528101CBCD700C245B5 /* IODataQueueClient.c */ = { 333 | isa = PBXFileReference; 334 | lastKnownFileType = sourcecode.c.c; 335 | name = IODataQueueClient.c; 336 | path = "/Users/drakeironman/Documents/impulses/puredarwin/darwin/IOKitUser-388.53.11/IODataQueueClient.c"; 337 | sourceTree = ""; 338 | }; 339 | 4A21C52C101CBDAF00C245B5 /* PBXTextBookmark */ = { 340 | isa = PBXTextBookmark; 341 | fRef = 4A21C52D101CBDAF00C245B5 /* OSMessageNotification.h */; 342 | name = "OSMessageNotification.h: 115"; 343 | rLen = 30; 344 | rLoc = 3279; 345 | rType = 0; 346 | vrLen = 1166; 347 | vrLoc = 2593; 348 | }; 349 | 4A21C52D101CBDAF00C245B5 /* OSMessageNotification.h */ = { 350 | isa = PBXFileReference; 351 | lastKnownFileType = sourcecode.c.h; 352 | name = OSMessageNotification.h; 353 | path = /Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/IOKit.framework/Versions/A/Headers/OSMessageNotification.h; 354 | sourceTree = ""; 355 | }; 356 | 4A21C555101CE2C500C245B5 /* PBXTextBookmark */ = { 357 | isa = PBXTextBookmark; 358 | fRef = 4A21C528101CBCD700C245B5 /* IODataQueueClient.c */; 359 | name = "IODataQueueClient.c: 37"; 360 | rLen = 9; 361 | rLoc = 1341; 362 | rType = 0; 363 | vrLen = 1847; 364 | vrLoc = 373; 365 | }; 366 | 4A21C556101CE2C500C245B5 /* PBXTextBookmark */ = { 367 | isa = PBXTextBookmark; 368 | fRef = 4A21C557101CE2C500C245B5 /* IOKitLibPrivate.h */; 369 | name = "IOKitLibPrivate.h: 18"; 370 | rLen = 30; 371 | rLoc = 327; 372 | rType = 0; 373 | vrLen = 1133; 374 | vrLoc = 0; 375 | }; 376 | 4A21C557101CE2C500C245B5 /* IOKitLibPrivate.h */ = { 377 | isa = PBXFileReference; 378 | lastKnownFileType = sourcecode.c.h; 379 | name = IOKitLibPrivate.h; 380 | path = "/Users/drakeironman/Documents/impulses/puredarwin/darwin/IOKitUser-388.53.11/IOKitLibPrivate.h"; 381 | sourceTree = ""; 382 | }; 383 | 4A21C58F101D813300C245B5 /* SamplePCIAudioEngine.cpp */ = { 384 | isa = PBXFileReference; 385 | lastKnownFileType = sourcecode.cpp.cpp; 386 | name = SamplePCIAudioEngine.cpp; 387 | path = "/Users/drakeironman/Documents/impulses/puredarwin/darwin/IOAudioFamily-169.4.3/Examples/Templates/SamplePCIAudioDriver/SamplePCIAudioEngine.cpp"; 388 | sourceTree = ""; 389 | }; 390 | 4A21C590101D813300C245B5 /* PBXTextBookmark */ = { 391 | isa = PBXTextBookmark; 392 | fRef = 4A21C591101D813300C245B5 /* IOKitLib.h */; 393 | name = "IOKitLib.h: 577"; 394 | rLen = 9; 395 | rLoc = 30980; 396 | rType = 0; 397 | vrLen = 2350; 398 | vrLoc = 29642; 399 | }; 400 | 4A21C591101D813300C245B5 /* IOKitLib.h */ = { 401 | isa = PBXFileReference; 402 | lastKnownFileType = sourcecode.c.h; 403 | name = IOKitLib.h; 404 | path = /Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/IOKit.framework/Versions/A/Headers/IOKitLib.h; 405 | sourceTree = ""; 406 | uiCtxt = { 407 | sepNavIntBoundsRect = "{{0, 0}, {4302, 19502}}"; 408 | sepNavSelRange = "{48528, 33}"; 409 | sepNavVisRange = "{47498, 3176}"; 410 | }; 411 | }; 412 | 4A21C5C0101D8DD300C245B5 /* AppleSamplePCIUserClient.cpp */ = { 413 | isa = PBXFileReference; 414 | lastKnownFileType = sourcecode.cpp.cpp; 415 | name = AppleSamplePCIUserClient.cpp; 416 | path = /Developer/Examples/Kernel/IOKit/pci/AppleSamplePCI/AppleSamplePCIUserClient.cpp; 417 | sourceTree = ""; 418 | }; 419 | 4A21C5DB101DA53500C245B5 /* PBXTextBookmark */ = { 420 | isa = PBXTextBookmark; 421 | fRef = 4A21C5C0101D8DD300C245B5 /* AppleSamplePCIUserClient.cpp */; 422 | name = "AppleSamplePCIUserClient.cpp: 60"; 423 | rLen = 0; 424 | rLoc = 2090; 425 | rType = 0; 426 | vrLen = 1842; 427 | vrLoc = 448; 428 | }; 429 | 4A21C5F3101DAA9F00C245B5 /* PBXTextBookmark */ = { 430 | isa = PBXTextBookmark; 431 | fRef = 4A04C4BE101C9709003D6267 /* MacTypes.h */; 432 | name = "MacTypes.h: 333"; 433 | rLen = 20; 434 | rLoc = 13001; 435 | rType = 0; 436 | vrLen = 1722; 437 | vrLoc = 12277; 438 | }; 439 | 4A56F860101DC849005F3171 /* main.cpp:503 */ = { 440 | isa = PBXFileBreakpoint; 441 | actions = ( 442 | ); 443 | breakpointStyle = 0; 444 | continueAfterActions = 0; 445 | countType = 0; 446 | delayBeforeContinue = 0; 447 | fileReference = 08FB7796FE84155DC02AAC07 /* main.cpp */; 448 | functionName = "test()"; 449 | hitCount = 0; 450 | ignoreCount = 0; 451 | lineNumber = 503; 452 | location = llaudio; 453 | modificationTime = 271194884.59259; 454 | state = 1; 455 | }; 456 | 4A5B38DB10278330005DE6A0 /* PBXTextBookmark */ = { 457 | isa = PBXTextBookmark; 458 | fRef = 4A5B38DC10278330005DE6A0 /* HP_Stream.h */; 459 | name = "HP_Stream.h: 125"; 460 | rLen = 27; 461 | rLoc = 6839; 462 | rType = 0; 463 | vrLen = 4673; 464 | vrLoc = 4055; 465 | }; 466 | 4A5B38DC10278330005DE6A0 /* HP_Stream.h */ = { 467 | isa = PBXFileReference; 468 | name = HP_Stream.h; 469 | path = "/Users/drakeironman/Documents/impulses/puredarwin/darwinHAL/untitled folder/HP_Stream.h"; 470 | sourceTree = ""; 471 | }; 472 | 4A5B38E1102783BE005DE6A0 /* PBXTextBookmark */ = { 473 | isa = PBXTextBookmark; 474 | fRef = 4A5B38E2102783BE005DE6A0 /* SHP_Device.cpp */; 475 | name = "SHP_Device.cpp: 850"; 476 | rLen = 20; 477 | rLoc = 26164; 478 | rType = 0; 479 | vrLen = 2415; 480 | vrLoc = 24955; 481 | }; 482 | 4A5B38E2102783BE005DE6A0 /* SHP_Device.cpp */ = { 483 | isa = PBXFileReference; 484 | name = SHP_Device.cpp; 485 | path = /Developer/Examples/CoreAudio/HAL/SampleHardwarePlugIn/Source/SHP_Device.cpp; 486 | sourceTree = ""; 487 | }; 488 | 4A5B38F31028A7C6005DE6A0 /* PBXTextBookmark */ = { 489 | isa = PBXTextBookmark; 490 | fRef = 4AA71940102776C3008913AD /* CAHostTimeBase.cpp */; 491 | name = "CAHostTimeBase.cpp: 1"; 492 | rLen = 0; 493 | rLoc = 0; 494 | rType = 0; 495 | vrLen = 2365; 496 | vrLoc = 2446; 497 | }; 498 | 4A5B38F41028A7C6005DE6A0 /* PBXTextBookmark */ = { 499 | isa = PBXTextBookmark; 500 | fRef = 4AA71941102776C3008913AD /* CAHostTimeBase.h */; 501 | name = "CAHostTimeBase.h: 34"; 502 | rLen = 0; 503 | rLoc = 2069; 504 | rType = 0; 505 | vrLen = 1570; 506 | vrLoc = 3693; 507 | }; 508 | 4A5B38F61028A7C6005DE6A0 /* PBXTextBookmark */ = { 509 | isa = PBXTextBookmark; 510 | fRef = 4AA71940102776C3008913AD /* CAHostTimeBase.cpp */; 511 | name = "CAHostTimeBase.cpp: 1"; 512 | rLen = 0; 513 | rLoc = 0; 514 | rType = 0; 515 | vrLen = 2365; 516 | vrLoc = 2446; 517 | }; 518 | 4A5B38F71028A7C6005DE6A0 /* PBXTextBookmark */ = { 519 | isa = PBXTextBookmark; 520 | fRef = 4AA71941102776C3008913AD /* CAHostTimeBase.h */; 521 | name = "CAHostTimeBase.h: 34"; 522 | rLen = 0; 523 | rLoc = 2069; 524 | rType = 0; 525 | vrLen = 1941; 526 | vrLoc = 4461; 527 | }; 528 | 4A5B38F91028A7C6005DE6A0 /* PBXTextBookmark */ = { 529 | isa = PBXTextBookmark; 530 | fRef = 4AA71941102776C3008913AD /* CAHostTimeBase.h */; 531 | name = "CAHostTimeBase.h: 34"; 532 | rLen = 0; 533 | rLoc = 2069; 534 | rType = 0; 535 | vrLen = 1939; 536 | vrLoc = 4461; 537 | }; 538 | 4A5B38FA1028A7C6005DE6A0 /* PBXTextBookmark */ = { 539 | isa = PBXTextBookmark; 540 | fRef = 4AA71940102776C3008913AD /* CAHostTimeBase.cpp */; 541 | name = "CAHostTimeBase.cpp: 1"; 542 | rLen = 0; 543 | rLoc = 0; 544 | rType = 0; 545 | vrLen = 2365; 546 | vrLoc = 2446; 547 | }; 548 | 4A5B39031029F0F7005DE6A0 /* PBXTextBookmark */ = { 549 | isa = PBXTextBookmark; 550 | fRef = 4AA71941102776C3008913AD /* CAHostTimeBase.h */; 551 | name = "CAHostTimeBase.h: 70"; 552 | rLen = 14; 553 | rLoc = 3226; 554 | rType = 0; 555 | vrLen = 1673; 556 | vrLoc = 2603; 557 | }; 558 | 4A5B39211029F6FF005DE6A0 /* mach_time.h */ = { 559 | isa = PBXFileReference; 560 | lastKnownFileType = sourcecode.c.h; 561 | name = mach_time.h; 562 | path = /Developer/SDKs/MacOSX10.5.sdk/usr/include/mach/mach_time.h; 563 | sourceTree = ""; 564 | uiCtxt = { 565 | sepNavIntBoundsRect = "{{0, 0}, {833, 895}}"; 566 | sepNavSelRange = "{1780, 37}"; 567 | sepNavVisRange = "{0, 1862}"; 568 | }; 569 | }; 570 | 4A5B39221029F6FF005DE6A0 /* PBXTextBookmark */ = { 571 | isa = PBXTextBookmark; 572 | fRef = 4A04C3E8101C67DC003D6267 /* kern_return.h */; 573 | name = "kern_return.h: 94"; 574 | rLen = 12; 575 | rLoc = 3167; 576 | rType = 0; 577 | vrLen = 1489; 578 | vrLoc = 2407; 579 | }; 580 | 4A5B39261029F6FF005DE6A0 /* PBXTextBookmark */ = { 581 | isa = PBXTextBookmark; 582 | fRef = 4AA71941102776C3008913AD /* CAHostTimeBase.h */; 583 | name = "CAHostTimeBase.h: 77"; 584 | rLen = 17; 585 | rLoc = 3367; 586 | rType = 0; 587 | vrLen = 1684; 588 | vrLoc = 2591; 589 | }; 590 | 4A5B39281029F6FF005DE6A0 /* PBXTextBookmark */ = { 591 | isa = PBXTextBookmark; 592 | fRef = 4AA71941102776C3008913AD /* CAHostTimeBase.h */; 593 | name = "CAHostTimeBase.h: 70"; 594 | rLen = 14; 595 | rLoc = 3226; 596 | rType = 0; 597 | vrLen = 1684; 598 | vrLoc = 2591; 599 | }; 600 | 4A5B392A1029F6FF005DE6A0 /* PBXTextBookmark */ = { 601 | isa = PBXTextBookmark; 602 | fRef = 4A04C3E8101C67DC003D6267 /* kern_return.h */; 603 | name = "kern_return.h: 94"; 604 | rLen = 12; 605 | rLoc = 3167; 606 | rType = 0; 607 | vrLen = 1489; 608 | vrLoc = 2407; 609 | }; 610 | 4A5B392C1029F6FF005DE6A0 /* PBXTextBookmark */ = { 611 | isa = PBXTextBookmark; 612 | fRef = 4AA71941102776C3008913AD /* CAHostTimeBase.h */; 613 | name = "CAHostTimeBase.h: 74"; 614 | rLen = 14; 615 | rLoc = 3267; 616 | rType = 0; 617 | vrLen = 1684; 618 | vrLoc = 2591; 619 | }; 620 | 4A5B392E1029F6FF005DE6A0 /* PBXTextBookmark */ = { 621 | isa = PBXTextBookmark; 622 | fRef = 4AA71941102776C3008913AD /* CAHostTimeBase.h */; 623 | name = "CAHostTimeBase.h: 70"; 624 | rLen = 14; 625 | rLoc = 3226; 626 | rType = 0; 627 | vrLen = 1684; 628 | vrLoc = 2591; 629 | }; 630 | 4A5B39361029FAF6005DE6A0 /* PBXTextBookmark */ = { 631 | isa = PBXTextBookmark; 632 | fRef = 4AA71941102776C3008913AD /* CAHostTimeBase.h */; 633 | name = "CAHostTimeBase.h: 74"; 634 | rLen = 14; 635 | rLoc = 3267; 636 | rType = 0; 637 | vrLen = 1684; 638 | vrLoc = 2591; 639 | }; 640 | 4A5B39AC102A1500005DE6A0 /* main.cpp:463 */ = { 641 | isa = PBXFileBreakpoint; 642 | actions = ( 643 | ); 644 | breakpointStyle = 0; 645 | continueAfterActions = 0; 646 | countType = 0; 647 | delayBeforeContinue = 0; 648 | fileReference = 08FB7796FE84155DC02AAC07 /* main.cpp */; 649 | functionName = "test( AudioEngineInterface *dst )"; 650 | hitCount = 0; 651 | ignoreCount = 0; 652 | lineNumber = 463; 653 | location = llaudio; 654 | modificationTime = 271194884.592838; 655 | state = 1; 656 | }; 657 | 4A5B39D9102A26EA005DE6A0 /* PBXTextBookmark */ = { 658 | isa = PBXTextBookmark; 659 | fRef = 4AA71940102776C3008913AD /* CAHostTimeBase.cpp */; 660 | name = "CAHostTimeBase.cpp: 56"; 661 | rLen = 0; 662 | rLoc = 3058; 663 | rType = 0; 664 | vrLen = 2368; 665 | vrLoc = 2443; 666 | }; 667 | 4A5B39DA102A26EA005DE6A0 /* PBXTextBookmark */ = { 668 | isa = PBXTextBookmark; 669 | fRef = 4AA71941102776C3008913AD /* CAHostTimeBase.h */; 670 | name = "CAHostTimeBase.h: 136"; 671 | rLen = 14; 672 | rLoc = 4821; 673 | rType = 0; 674 | vrLen = 1989; 675 | vrLoc = 4507; 676 | }; 677 | 4A5B39DB102A26EA005DE6A0 /* PBXTextBookmark */ = { 678 | isa = PBXTextBookmark; 679 | fRef = 4A5B39211029F6FF005DE6A0 /* mach_time.h */; 680 | name = "mach_time.h: 53"; 681 | rLen = 37; 682 | rLoc = 1780; 683 | rType = 0; 684 | vrLen = 1862; 685 | vrLoc = 0; 686 | }; 687 | 4A5B39DC102A26EA005DE6A0 /* PBXTextBookmark */ = { 688 | isa = PBXTextBookmark; 689 | fRef = 08FB7796FE84155DC02AAC07 /* main.cpp */; 690 | name = "main.cpp: 475"; 691 | rLen = 18; 692 | rLoc = 17589; 693 | rType = 0; 694 | vrLen = 2619; 695 | vrLoc = 15510; 696 | }; 697 | 4A5B39DD102A26EA005DE6A0 /* PBXTextBookmark */ = { 698 | isa = PBXTextBookmark; 699 | fRef = 4AA71941102776C3008913AD /* CAHostTimeBase.h */; 700 | name = "CAHostTimeBase.h: 74"; 701 | rLen = 14; 702 | rLoc = 3267; 703 | rType = 0; 704 | vrLen = 1668; 705 | vrLoc = 2684; 706 | }; 707 | 4A5B39DE102A26EA005DE6A0 /* PBXTextBookmark */ = { 708 | isa = PBXTextBookmark; 709 | fRef = 4AA71941102776C3008913AD /* CAHostTimeBase.h */; 710 | name = "CAHostTimeBase.h: 64"; 711 | rLen = 0; 712 | rLoc = 3112; 713 | rType = 0; 714 | vrLen = 1645; 715 | vrLoc = 2684; 716 | }; 717 | 4A5B39DF102A26EA005DE6A0 /* PBXTextBookmark */ = { 718 | isa = PBXTextBookmark; 719 | fRef = 4AA71940102776C3008913AD /* CAHostTimeBase.cpp */; 720 | name = "CAHostTimeBase.cpp: 56"; 721 | rLen = 0; 722 | rLoc = 3058; 723 | rType = 0; 724 | vrLen = 2368; 725 | vrLoc = 2443; 726 | }; 727 | 4A5B39E0102A26EA005DE6A0 /* PBXTextBookmark */ = { 728 | isa = PBXTextBookmark; 729 | fRef = 4AA71941102776C3008913AD /* CAHostTimeBase.h */; 730 | name = "CAHostTimeBase.h: 136"; 731 | rLen = 14; 732 | rLoc = 4821; 733 | rType = 0; 734 | vrLen = 1989; 735 | vrLoc = 4507; 736 | }; 737 | 4A5B39E1102A26EA005DE6A0 /* PBXTextBookmark */ = { 738 | isa = PBXTextBookmark; 739 | fRef = 4A5B39211029F6FF005DE6A0 /* mach_time.h */; 740 | name = "mach_time.h: 53"; 741 | rLen = 37; 742 | rLoc = 1780; 743 | rType = 0; 744 | vrLen = 1862; 745 | vrLoc = 0; 746 | }; 747 | 4A5B39E4102B551D005DE6A0 /* PBXTextBookmark */ = { 748 | isa = PBXTextBookmark; 749 | fRef = 08FB7796FE84155DC02AAC07 /* main.cpp */; 750 | name = "main.cpp: 578"; 751 | rLen = 0; 752 | rLoc = 21133; 753 | rType = 0; 754 | vrLen = 2427; 755 | vrLoc = 12041; 756 | }; 757 | 4A673CC51020DE7600B26306 /* PBXTextBookmark */ = { 758 | isa = PBXTextBookmark; 759 | fRef = 4A673CC61020DE7600B26306 /* SampleAudioEngine.cpp */; 760 | name = "SampleAudioEngine.cpp: 175"; 761 | rLen = 0; 762 | rLoc = 6112; 763 | rType = 0; 764 | vrLen = 2665; 765 | vrLoc = 5683; 766 | }; 767 | 4A673CC61020DE7600B26306 /* SampleAudioEngine.cpp */ = { 768 | isa = PBXFileReference; 769 | lastKnownFileType = sourcecode.cpp.cpp; 770 | name = SampleAudioEngine.cpp; 771 | path = /Developer/Examples/Kernel/IOKit/Audio/Templates/SampleAudioDriver/SampleAudioEngine.cpp; 772 | sourceTree = ""; 773 | }; 774 | 4A673CC71020DE7600B26306 /* PBXTextBookmark */ = { 775 | isa = PBXTextBookmark; 776 | fRef = 4A673CC81020DE7600B26306 /* AppleDBDMAAudio.cpp */; 777 | name = "AppleDBDMAAudio.cpp: 452"; 778 | rLen = 18; 779 | rLoc = 14822; 780 | rType = 0; 781 | vrLen = 2860; 782 | vrLoc = 13204; 783 | }; 784 | 4A673CC81020DE7600B26306 /* AppleDBDMAAudio.cpp */ = { 785 | isa = PBXFileReference; 786 | lastKnownFileType = sourcecode.cpp.cpp; 787 | name = AppleDBDMAAudio.cpp; 788 | path = "/Users/drakeironman/Documents/impulses/puredarwin/darwin/AppleOnboardAudio-258.3.1/AppleOnboardAudio/AppleDBDMAAudio.cpp"; 789 | sourceTree = ""; 790 | }; 791 | 4A673CC91020DE7600B26306 /* PBXTextBookmark */ = { 792 | isa = PBXTextBookmark; 793 | fRef = 4A21C58F101D813300C245B5 /* SamplePCIAudioEngine.cpp */; 794 | name = "SamplePCIAudioEngine.cpp: 227"; 795 | rLen = 18; 796 | rLoc = 8490; 797 | rType = 0; 798 | vrLen = 2171; 799 | vrLoc = 7466; 800 | }; 801 | 4A69C76F101C4B610092D59D /* PBXTextBookmark */ = { 802 | isa = PBXTextBookmark; 803 | fRef = 4AF422F3101B71D700CE5B8B /* IOAudioDefines.h */; 804 | name = "IOAudioDefines.h: 120"; 805 | rLen = 10; 806 | rLoc = 4316; 807 | rType = 0; 808 | vrLen = 2282; 809 | vrLoc = 2537; 810 | }; 811 | 4A69C771101C4B610092D59D /* PBXTextBookmark */ = { 812 | isa = PBXTextBookmark; 813 | fRef = 4A69C772101C4B610092D59D /* IOFireWireAVCLib.h */; 814 | name = "IOFireWireAVCLib.h: 394"; 815 | rLen = 0; 816 | rLoc = 19068; 817 | rType = 0; 818 | vrLen = 2388; 819 | vrLoc = 18497; 820 | }; 821 | 4A69C772101C4B610092D59D /* IOFireWireAVCLib.h */ = { 822 | isa = PBXFileReference; 823 | lastKnownFileType = sourcecode.c.h; 824 | name = IOFireWireAVCLib.h; 825 | path = "/Users/drakeironman/Documents/impulses/puredarwin/darwin/IOFireWireAVC-223.4.1/IOFireWireAVCLib/IOFireWireAVCLib.h"; 826 | sourceTree = ""; 827 | }; 828 | 4A69C775101C4B610092D59D /* IOKitLib.c */ = { 829 | isa = PBXFileReference; 830 | lastKnownFileType = sourcecode.c.c; 831 | name = IOKitLib.c; 832 | path = "/Users/drakeironman/Documents/impulses/puredarwin/darwin/IOKitUser-388.53.11/IOKitLib.c"; 833 | sourceTree = ""; 834 | }; 835 | 4AA71940102776C3008913AD /* CAHostTimeBase.cpp */ = { 836 | uiCtxt = { 837 | sepNavIntBoundsRect = "{{0, 0}, {833, 1456}}"; 838 | sepNavSelRange = "{3058, 0}"; 839 | sepNavVisRange = "{2443, 2368}"; 840 | }; 841 | }; 842 | 4AA71941102776C3008913AD /* CAHostTimeBase.h */ = { 843 | uiCtxt = { 844 | sepNavIntBoundsRect = "{{0, 0}, {954, 2842}}"; 845 | sepNavSelRange = "{4821, 14}"; 846 | sepNavVisRange = "{4507, 1989}"; 847 | }; 848 | }; 849 | 4AA719471027775E008913AD /* CADebugMacros.h */ = { 850 | uiCtxt = { 851 | sepNavIntBoundsRect = "{{0, 0}, {1560, 5194}}"; 852 | sepNavSelRange = "{2508, 0}"; 853 | sepNavVisRange = "{1336, 3127}"; 854 | }; 855 | }; 856 | 4AA7195610277852008913AD /* PBXTextBookmark */ = { 857 | isa = PBXTextBookmark; 858 | fRef = 4AA71941102776C3008913AD /* CAHostTimeBase.h */; 859 | name = "CAHostTimeBase.h: 48"; 860 | rLen = 0; 861 | rLoc = 2684; 862 | rType = 0; 863 | vrLen = 2434; 864 | vrLoc = 1260; 865 | }; 866 | 4AA7195910277852008913AD /* PBXTextBookmark */ = { 867 | isa = PBXTextBookmark; 868 | fRef = 4AA719471027775E008913AD /* CADebugMacros.h */; 869 | name = "CADebugMacros.h: 48"; 870 | rLen = 0; 871 | rLoc = 2725; 872 | rType = 0; 873 | vrLen = 2033; 874 | vrLoc = 10834; 875 | }; 876 | 4AA7196510277927008913AD /* PBXTextBookmark */ = { 877 | isa = PBXTextBookmark; 878 | fRef = 4AA719471027775E008913AD /* CADebugMacros.h */; 879 | name = "CADebugMacros.h: 43"; 880 | rLen = 0; 881 | rLoc = 2508; 882 | rType = 0; 883 | vrLen = 3127; 884 | vrLoc = 1336; 885 | }; 886 | 4AA81945101C52C8001D7D92 /* IOAudioDefines.h */ = { 887 | isa = PBXFileReference; 888 | lastKnownFileType = sourcecode.c.h; 889 | name = IOAudioDefines.h; 890 | path = /Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/IOKit.framework/Versions/A/Headers/Audio/IOAudioDefines.h; 891 | sourceTree = ""; 892 | }; 893 | 4ABB2517101AF9C400EED49A /* llaudio */ = { 894 | isa = PBXExecutable; 895 | activeArgIndices = ( 896 | ); 897 | argumentStrings = ( 898 | ); 899 | autoAttachOnCrash = 1; 900 | breakpointsEnabled = 0; 901 | configStateDict = { 902 | }; 903 | customDataFormattersEnabled = 1; 904 | debuggerPlugin = GDBDebugging; 905 | disassemblyDisplayState = 0; 906 | dylibVariantSuffix = ""; 907 | enableDebugStr = 1; 908 | environmentEntries = ( 909 | ); 910 | executableSystemSymbolLevel = 0; 911 | executableUserSymbolLevel = 0; 912 | libgmallocEnabled = 0; 913 | name = llaudio; 914 | savedGlobals = { 915 | }; 916 | sourceDirectories = ( 917 | ); 918 | variableFormatDictionary = { 919 | "0-uint64_t-playsnd" = 1; 920 | "1-uint64_t-playsnd" = 1; 921 | "3-uint64_t-playsnd" = 1; 922 | }; 923 | }; 924 | 4ABB2525101AF9DF00EED49A /* Source Control */ = { 925 | isa = PBXSourceControlManager; 926 | fallbackIsa = XCSourceControlManager; 927 | isSCMEnabled = 0; 928 | scmConfiguration = { 929 | }; 930 | }; 931 | 4ABB2526101AF9DF00EED49A /* Code sense */ = { 932 | isa = PBXCodeSenseManager; 933 | indexTemplatePath = ""; 934 | }; 935 | 4ADDC36F10245855003C6833 /* main.cpp:482 */ = { 936 | isa = PBXFileBreakpoint; 937 | actions = ( 938 | ); 939 | breakpointStyle = 0; 940 | continueAfterActions = 0; 941 | countType = 0; 942 | delayBeforeContinue = 0; 943 | fileReference = 08FB7796FE84155DC02AAC07 /* main.cpp */; 944 | functionName = "test()"; 945 | hitCount = 0; 946 | ignoreCount = 0; 947 | lineNumber = 482; 948 | location = llaudio; 949 | modificationTime = 271194884.592753; 950 | state = 1; 951 | }; 952 | 4ADDC38110245908003C6833 /* PBXTextBookmark */ = { 953 | isa = PBXTextBookmark; 954 | fRef = 4A04C444101C78F5003D6267 /* IOAudioTypes.h */; 955 | name = "IOAudioTypes.h: 140"; 956 | rLen = 20; 957 | rLoc = 5091; 958 | rType = 0; 959 | vrLen = 1842; 960 | vrLoc = 4086; 961 | }; 962 | 4AF4226A101AFC0300CE5B8B /* IOUSBLib.h */ = { 963 | isa = PBXFileReference; 964 | lastKnownFileType = sourcecode.c.h; 965 | name = IOUSBLib.h; 966 | path = /Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks/IOKit.framework/Versions/A/Headers/usb/IOUSBLib.h; 967 | sourceTree = ""; 968 | }; 969 | 4AF42274101B00D800CE5B8B /* IOKitLib.h */ = { 970 | isa = PBXFileReference; 971 | lastKnownFileType = sourcecode.c.h; 972 | name = IOKitLib.h; 973 | path = /Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks/IOKit.framework/Versions/A/Headers/IOKitLib.h; 974 | sourceTree = ""; 975 | }; 976 | 4AF4228D101B065B00CE5B8B /* device_types.h */ = { 977 | isa = PBXFileReference; 978 | lastKnownFileType = sourcecode.c.h; 979 | name = device_types.h; 980 | path = /Developer/SDKs/MacOSX10.4u.sdk/usr/include/device/device_types.h; 981 | sourceTree = ""; 982 | }; 983 | 4AF422C7101B0D8100CE5B8B /* PBXTextBookmark */ = { 984 | isa = PBXTextBookmark; 985 | fRef = 4AF4228D101B065B00CE5B8B /* device_types.h */; 986 | name = "device_types.h: 80"; 987 | rLen = 30; 988 | rLoc = 2445; 989 | rType = 0; 990 | vrLen = 1135; 991 | vrLoc = 1703; 992 | }; 993 | 4AF422CF101B0F6200CE5B8B /* IOAudioDefines.h */ = { 994 | isa = PBXFileReference; 995 | lastKnownFileType = sourcecode.c.h; 996 | name = IOAudioDefines.h; 997 | path = /Developer/SDKs/MacOSX10.5.sdk/System/Library/Frameworks/IOKit.framework/Versions/A/Headers/audio/IOAudioDefines.h; 998 | sourceTree = ""; 999 | }; 1000 | 4AF422EE101B71D700CE5B8B /* PBXTextBookmark */ = { 1001 | isa = PBXTextBookmark; 1002 | fRef = 4AF422CF101B0F6200CE5B8B /* IOAudioDefines.h */; 1003 | name = "IOAudioDefines.h: 133"; 1004 | rLen = 13; 1005 | rLoc = 4659; 1006 | rType = 0; 1007 | vrLen = 2095; 1008 | vrLoc = 10694; 1009 | }; 1010 | 4AF422F3101B71D700CE5B8B /* IOAudioDefines.h */ = { 1011 | isa = PBXFileReference; 1012 | lastKnownFileType = sourcecode.c.h; 1013 | name = IOAudioDefines.h; 1014 | path = /Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks/IOKit.framework/Versions/A/Headers/Audio/IOAudioDefines.h; 1015 | sourceTree = ""; 1016 | }; 1017 | 4AF422F5101B71D700CE5B8B /* IOKitLib.h */ = { 1018 | isa = PBXFileReference; 1019 | lastKnownFileType = sourcecode.c.h; 1020 | name = IOKitLib.h; 1021 | path = /System/Library/Frameworks/IOKit.framework/Versions/A/Headers/IOKitLib.h; 1022 | sourceTree = ""; 1023 | }; 1024 | EE19EED407B2C7BF0083E1AA /* llaudio */ = { 1025 | activeExec = 0; 1026 | executables = ( 1027 | 4ABB2517101AF9C400EED49A /* llaudio */, 1028 | ); 1029 | }; 1030 | } 1031 | -------------------------------------------------------------------------------- /llaudio.xcodeproj/drakeironman.mode1v3: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ActivePerspectiveName 6 | Project 7 | AllowedModules 8 | 9 | 10 | BundleLoadPath 11 | 12 | MaxInstances 13 | n 14 | Module 15 | PBXSmartGroupTreeModule 16 | Name 17 | Groups and Files Outline View 18 | 19 | 20 | BundleLoadPath 21 | 22 | MaxInstances 23 | n 24 | Module 25 | PBXNavigatorGroup 26 | Name 27 | Editor 28 | 29 | 30 | BundleLoadPath 31 | 32 | MaxInstances 33 | n 34 | Module 35 | XCTaskListModule 36 | Name 37 | Task List 38 | 39 | 40 | BundleLoadPath 41 | 42 | MaxInstances 43 | n 44 | Module 45 | XCDetailModule 46 | Name 47 | File and Smart Group Detail Viewer 48 | 49 | 50 | BundleLoadPath 51 | 52 | MaxInstances 53 | 1 54 | Module 55 | PBXBuildResultsModule 56 | Name 57 | Detailed Build Results Viewer 58 | 59 | 60 | BundleLoadPath 61 | 62 | MaxInstances 63 | 1 64 | Module 65 | PBXProjectFindModule 66 | Name 67 | Project Batch Find Tool 68 | 69 | 70 | BundleLoadPath 71 | 72 | MaxInstances 73 | n 74 | Module 75 | XCProjectFormatConflictsModule 76 | Name 77 | Project Format Conflicts List 78 | 79 | 80 | BundleLoadPath 81 | 82 | MaxInstances 83 | n 84 | Module 85 | PBXBookmarksModule 86 | Name 87 | Bookmarks Tool 88 | 89 | 90 | BundleLoadPath 91 | 92 | MaxInstances 93 | n 94 | Module 95 | PBXClassBrowserModule 96 | Name 97 | Class Browser 98 | 99 | 100 | BundleLoadPath 101 | 102 | MaxInstances 103 | n 104 | Module 105 | PBXCVSModule 106 | Name 107 | Source Code Control Tool 108 | 109 | 110 | BundleLoadPath 111 | 112 | MaxInstances 113 | n 114 | Module 115 | PBXDebugBreakpointsModule 116 | Name 117 | Debug Breakpoints Tool 118 | 119 | 120 | BundleLoadPath 121 | 122 | MaxInstances 123 | n 124 | Module 125 | XCDockableInspector 126 | Name 127 | Inspector 128 | 129 | 130 | BundleLoadPath 131 | 132 | MaxInstances 133 | n 134 | Module 135 | PBXOpenQuicklyModule 136 | Name 137 | Open Quickly Tool 138 | 139 | 140 | BundleLoadPath 141 | 142 | MaxInstances 143 | 1 144 | Module 145 | PBXDebugSessionModule 146 | Name 147 | Debugger 148 | 149 | 150 | BundleLoadPath 151 | 152 | MaxInstances 153 | 1 154 | Module 155 | PBXDebugCLIModule 156 | Name 157 | Debug Console 158 | 159 | 160 | BundleLoadPath 161 | 162 | MaxInstances 163 | n 164 | Module 165 | XCSnapshotModule 166 | Name 167 | Snapshots Tool 168 | 169 | 170 | BundlePath 171 | /Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources 172 | Description 173 | DefaultDescriptionKey 174 | DockingSystemVisible 175 | 176 | Extension 177 | mode1v3 178 | FavBarConfig 179 | 180 | PBXProjectModuleGUID 181 | 4ABB2522101AF9DF00EED49A 182 | XCBarModuleItemNames 183 | 184 | XCBarModuleItems 185 | 186 | 187 | FirstTimeWindowDisplayed 188 | 189 | Identifier 190 | com.apple.perspectives.project.mode1v3 191 | MajorVersion 192 | 33 193 | MinorVersion 194 | 0 195 | Name 196 | Default 197 | Notifications 198 | 199 | OpenEditors 200 | 201 | PerspectiveWidths 202 | 203 | -1 204 | -1 205 | 206 | Perspectives 207 | 208 | 209 | ChosenToolbarItems 210 | 211 | active-combo-popup 212 | action 213 | NSToolbarFlexibleSpaceItem 214 | build-and-go 215 | com.apple.ide.PBXToolbarStopButton 216 | get-info 217 | NSToolbarFlexibleSpaceItem 218 | com.apple.pbx.toolbar.searchfield 219 | 220 | ControllerClassBaseName 221 | 222 | IconName 223 | WindowOfProjectWithEditor 224 | Identifier 225 | perspective.project 226 | IsVertical 227 | 228 | Layout 229 | 230 | 231 | ContentConfiguration 232 | 233 | PBXBottomSmartGroupGIDs 234 | 235 | 1C37FBAC04509CD000000102 236 | 1C37FAAC04509CD000000102 237 | 1C08E77C0454961000C914BD 238 | 1C37FABC05509CD000000102 239 | 1C37FABC05539CD112110102 240 | E2644B35053B69B200211256 241 | 1C37FABC04509CD000100104 242 | 1CC0EA4004350EF90044410B 243 | 1CC0EA4004350EF90041110B 244 | 245 | PBXProjectModuleGUID 246 | 1CE0B1FE06471DED0097A5F4 247 | PBXProjectModuleLabel 248 | Files 249 | PBXProjectStructureProvided 250 | yes 251 | PBXSmartGroupTreeModuleColumnData 252 | 253 | PBXSmartGroupTreeModuleColumnWidthsKey 254 | 255 | 242 256 | 257 | PBXSmartGroupTreeModuleColumnsKey_v4 258 | 259 | MainColumn 260 | 261 | 262 | PBXSmartGroupTreeModuleOutlineStateKey_v7 263 | 264 | PBXSmartGroupTreeModuleOutlineStateExpansionKey 265 | 266 | 08FB7794FE84155DC02AAC07 267 | 4AA7193F102776B5008913AD 268 | 08FB7795FE84155DC02AAC07 269 | 08FB779DFE84155DC02AAC07 270 | 19C28FBDFE9D53C911CA2CBB 271 | 1C37FBAC04509CD000000102 272 | 1C37FAAC04509CD000000102 273 | 1C37FABC05509CD000000102 274 | 275 | PBXSmartGroupTreeModuleOutlineStateSelectionKey 276 | 277 | 278 | 6 279 | 0 280 | 281 | 282 | PBXSmartGroupTreeModuleOutlineStateVisibleRectKey 283 | {{0, 0}, {242, 914}} 284 | 285 | PBXTopSmartGroupGIDs 286 | 287 | XCIncludePerspectivesSwitch 288 | 289 | XCSharingToken 290 | com.apple.Xcode.GFSharingToken 291 | 292 | GeometryConfiguration 293 | 294 | Frame 295 | {{0, 0}, {259, 932}} 296 | GroupTreeTableConfiguration 297 | 298 | MainColumn 299 | 242 300 | 301 | RubberWindowFrame 302 | 521 55 1158 973 0 0 1680 1028 303 | 304 | Module 305 | PBXSmartGroupTreeModule 306 | Proportion 307 | 259pt 308 | 309 | 310 | Dock 311 | 312 | 313 | BecomeActive 314 | 315 | ContentConfiguration 316 | 317 | PBXProjectModuleGUID 318 | 1CE0B20306471E060097A5F4 319 | PBXProjectModuleLabel 320 | main.cpp 321 | PBXSplitModuleInNavigatorKey 322 | 323 | Split0 324 | 325 | PBXProjectModuleGUID 326 | 1CE0B20406471E060097A5F4 327 | PBXProjectModuleLabel 328 | main.cpp 329 | _historyCapacity 330 | 0 331 | bookmark 332 | 4A5B39E4102B551D005DE6A0 333 | history 334 | 335 | 4AF422C7101B0D8100CE5B8B 336 | 4AF422EE101B71D700CE5B8B 337 | 4A69C76F101C4B610092D59D 338 | 4A69C771101C4B610092D59D 339 | 4A04C40F101C7550003D6267 340 | 4A04C457101C7F0E003D6267 341 | 4A04C458101C7F0E003D6267 342 | 4A04C46A101C813E003D6267 343 | 4A04C46D101C813E003D6267 344 | 4A04C46E101C813E003D6267 345 | 4A04C4A6101C915B003D6267 346 | 4A04C4AE101C944D003D6267 347 | 4A04C4B0101C944D003D6267 348 | 4A04C4DF101CA3DE003D6267 349 | 4A04C4E7101CA7F9003D6267 350 | 4A21C52C101CBDAF00C245B5 351 | 4A21C555101CE2C500C245B5 352 | 4A21C556101CE2C500C245B5 353 | 4A21C590101D813300C245B5 354 | 4A21C5DB101DA53500C245B5 355 | 4A21C5F3101DAA9F00C245B5 356 | 4A673CC51020DE7600B26306 357 | 4A673CC71020DE7600B26306 358 | 4A673CC91020DE7600B26306 359 | 4ADDC38110245908003C6833 360 | 4AA7196510277927008913AD 361 | 4A5B38DB10278330005DE6A0 362 | 4A5B38E1102783BE005DE6A0 363 | 4A5B39221029F6FF005DE6A0 364 | 4A5B39D9102A26EA005DE6A0 365 | 4A5B39DA102A26EA005DE6A0 366 | 4A5B39DB102A26EA005DE6A0 367 | 4A5B39DC102A26EA005DE6A0 368 | 369 | nextStack 370 | 371 | 4A5B39E1102A26EA005DE6A0 372 | 373 | prevStack 374 | 375 | 4AA7195610277852008913AD 376 | 4AA7195910277852008913AD 377 | 4A5B38F31028A7C6005DE6A0 378 | 4A5B38F41028A7C6005DE6A0 379 | 4A5B38F61028A7C6005DE6A0 380 | 4A5B38F71028A7C6005DE6A0 381 | 4A5B38F91028A7C6005DE6A0 382 | 4A5B38FA1028A7C6005DE6A0 383 | 4A5B39031029F0F7005DE6A0 384 | 4A5B39261029F6FF005DE6A0 385 | 4A5B39281029F6FF005DE6A0 386 | 4A5B392A1029F6FF005DE6A0 387 | 4A5B392C1029F6FF005DE6A0 388 | 4A5B392E1029F6FF005DE6A0 389 | 4A5B39361029FAF6005DE6A0 390 | 4A5B39DD102A26EA005DE6A0 391 | 4A5B39DE102A26EA005DE6A0 392 | 4A5B39DF102A26EA005DE6A0 393 | 4A5B39E0102A26EA005DE6A0 394 | 395 | 396 | SplitCount 397 | 1 398 | 399 | StatusBarVisibility 400 | 401 | 402 | GeometryConfiguration 403 | 404 | Frame 405 | {{0, 0}, {894, 927}} 406 | RubberWindowFrame 407 | 521 55 1158 973 0 0 1680 1028 408 | 409 | Module 410 | PBXNavigatorGroup 411 | Proportion 412 | 927pt 413 | 414 | 415 | ContentConfiguration 416 | 417 | PBXProjectModuleGUID 418 | 1CE0B20506471E060097A5F4 419 | PBXProjectModuleLabel 420 | Detail 421 | 422 | GeometryConfiguration 423 | 424 | Frame 425 | {{0, 932}, {894, 0}} 426 | RubberWindowFrame 427 | 521 55 1158 973 0 0 1680 1028 428 | 429 | Module 430 | XCDetailModule 431 | Proportion 432 | 0pt 433 | 434 | 435 | Proportion 436 | 894pt 437 | 438 | 439 | Name 440 | Project 441 | ServiceClasses 442 | 443 | XCModuleDock 444 | PBXSmartGroupTreeModule 445 | XCModuleDock 446 | PBXNavigatorGroup 447 | XCDetailModule 448 | 449 | TableOfContents 450 | 451 | 4A5B38B510277C5D005DE6A0 452 | 1CE0B1FE06471DED0097A5F4 453 | 4A5B38B610277C5D005DE6A0 454 | 1CE0B20306471E060097A5F4 455 | 1CE0B20506471E060097A5F4 456 | 457 | ToolbarConfiguration 458 | xcode.toolbar.config.defaultV3 459 | 460 | 461 | ControllerClassBaseName 462 | 463 | IconName 464 | WindowOfProject 465 | Identifier 466 | perspective.morph 467 | IsVertical 468 | 0 469 | Layout 470 | 471 | 472 | BecomeActive 473 | 1 474 | ContentConfiguration 475 | 476 | PBXBottomSmartGroupGIDs 477 | 478 | 1C37FBAC04509CD000000102 479 | 1C37FAAC04509CD000000102 480 | 1C08E77C0454961000C914BD 481 | 1C37FABC05509CD000000102 482 | 1C37FABC05539CD112110102 483 | E2644B35053B69B200211256 484 | 1C37FABC04509CD000100104 485 | 1CC0EA4004350EF90044410B 486 | 1CC0EA4004350EF90041110B 487 | 488 | PBXProjectModuleGUID 489 | 11E0B1FE06471DED0097A5F4 490 | PBXProjectModuleLabel 491 | Files 492 | PBXProjectStructureProvided 493 | yes 494 | PBXSmartGroupTreeModuleColumnData 495 | 496 | PBXSmartGroupTreeModuleColumnWidthsKey 497 | 498 | 186 499 | 500 | PBXSmartGroupTreeModuleColumnsKey_v4 501 | 502 | MainColumn 503 | 504 | 505 | PBXSmartGroupTreeModuleOutlineStateKey_v7 506 | 507 | PBXSmartGroupTreeModuleOutlineStateExpansionKey 508 | 509 | 29B97314FDCFA39411CA2CEA 510 | 1C37FABC05509CD000000102 511 | 512 | PBXSmartGroupTreeModuleOutlineStateSelectionKey 513 | 514 | 515 | 0 516 | 517 | 518 | PBXSmartGroupTreeModuleOutlineStateVisibleRectKey 519 | {{0, 0}, {186, 337}} 520 | 521 | PBXTopSmartGroupGIDs 522 | 523 | XCIncludePerspectivesSwitch 524 | 1 525 | XCSharingToken 526 | com.apple.Xcode.GFSharingToken 527 | 528 | GeometryConfiguration 529 | 530 | Frame 531 | {{0, 0}, {203, 355}} 532 | GroupTreeTableConfiguration 533 | 534 | MainColumn 535 | 186 536 | 537 | RubberWindowFrame 538 | 373 269 690 397 0 0 1440 878 539 | 540 | Module 541 | PBXSmartGroupTreeModule 542 | Proportion 543 | 100% 544 | 545 | 546 | Name 547 | Morph 548 | PreferredWidth 549 | 300 550 | ServiceClasses 551 | 552 | XCModuleDock 553 | PBXSmartGroupTreeModule 554 | 555 | TableOfContents 556 | 557 | 11E0B1FE06471DED0097A5F4 558 | 559 | ToolbarConfiguration 560 | xcode.toolbar.config.default.shortV3 561 | 562 | 563 | PerspectivesBarVisible 564 | 565 | ShelfIsVisible 566 | 567 | SourceDescription 568 | file at '/Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources/XCPerspectivesSpecificationMode1.xcperspec' 569 | StatusbarIsVisible 570 | 571 | TimeStamp 572 | 0.0 573 | ToolbarDisplayMode 574 | 1 575 | ToolbarIsVisible 576 | 577 | ToolbarSizeMode 578 | 1 579 | Type 580 | Perspectives 581 | UpdateMessage 582 | The Default Workspace in this version of Xcode now includes support to hide and show the detail view (what has been referred to as the "Metro-Morph" feature). You must discard your current Default Workspace settings and update to the latest Default Workspace in order to gain this feature. Do you wish to update to the latest Workspace defaults for project '%@'? 583 | WindowJustification 584 | 5 585 | WindowOrderList 586 | 587 | 4A5B39B1102A1515005DE6A0 588 | 4A5B395A102A0146005DE6A0 589 | 4A5B395B102A0146005DE6A0 590 | 4ABB2523101AF9DF00EED49A 591 | 1CD10A99069EF8BA00B06720 592 | 1C78EAAD065D492600B07095 593 | /Users/drakeironman/Documents/impulses/puredarwin/llaudio/llaudio/llaudio.xcodeproj 594 | 595 | WindowString 596 | 521 55 1158 973 0 0 1680 1028 597 | WindowToolsV3 598 | 599 | 600 | FirstTimeWindowDisplayed 601 | 602 | Identifier 603 | windowTool.build 604 | IsVertical 605 | 606 | Layout 607 | 608 | 609 | Dock 610 | 611 | 612 | BecomeActive 613 | 614 | ContentConfiguration 615 | 616 | PBXProjectModuleGUID 617 | 1CD0528F0623707200166675 618 | PBXProjectModuleLabel 619 | main.cpp 620 | StatusBarVisibility 621 | 622 | 623 | GeometryConfiguration 624 | 625 | Frame 626 | {{0, 0}, {1023, 690}} 627 | RubberWindowFrame 628 | 5 56 1023 972 0 0 1680 1028 629 | 630 | Module 631 | PBXNavigatorGroup 632 | Proportion 633 | 690pt 634 | 635 | 636 | ContentConfiguration 637 | 638 | PBXProjectModuleGUID 639 | XCMainBuildResultsModuleGUID 640 | PBXProjectModuleLabel 641 | Build 642 | XCBuildResultsTrigger_Collapse 643 | 1021 644 | XCBuildResultsTrigger_Open 645 | 1011 646 | 647 | GeometryConfiguration 648 | 649 | Frame 650 | {{0, 695}, {1023, 236}} 651 | RubberWindowFrame 652 | 5 56 1023 972 0 0 1680 1028 653 | 654 | Module 655 | PBXBuildResultsModule 656 | Proportion 657 | 236pt 658 | 659 | 660 | Proportion 661 | 931pt 662 | 663 | 664 | Name 665 | Build Results 666 | ServiceClasses 667 | 668 | PBXBuildResultsModule 669 | 670 | StatusbarIsVisible 671 | 672 | TableOfContents 673 | 674 | 4ABB2523101AF9DF00EED49A 675 | 4A5B38B710277C5D005DE6A0 676 | 1CD0528F0623707200166675 677 | XCMainBuildResultsModuleGUID 678 | 679 | ToolbarConfiguration 680 | xcode.toolbar.config.buildV3 681 | WindowString 682 | 5 56 1023 972 0 0 1680 1028 683 | WindowToolGUID 684 | 4ABB2523101AF9DF00EED49A 685 | WindowToolIsVisible 686 | 687 | 688 | 689 | FirstTimeWindowDisplayed 690 | 691 | Identifier 692 | windowTool.debugger 693 | IsVertical 694 | 695 | Layout 696 | 697 | 698 | Dock 699 | 700 | 701 | ContentConfiguration 702 | 703 | Debugger 704 | 705 | HorizontalSplitView 706 | 707 | _collapsingFrameDimension 708 | 0.0 709 | _indexOfCollapsedView 710 | 0 711 | _percentageOfCollapsedView 712 | 0.0 713 | isCollapsed 714 | yes 715 | sizes 716 | 717 | {{0, 0}, {423, 365}} 718 | {{423, 0}, {504, 365}} 719 | 720 | 721 | VerticalSplitView 722 | 723 | _collapsingFrameDimension 724 | 0.0 725 | _indexOfCollapsedView 726 | 0 727 | _percentageOfCollapsedView 728 | 0.0 729 | isCollapsed 730 | yes 731 | sizes 732 | 733 | {{0, 0}, {927, 365}} 734 | {{0, 365}, {927, 324}} 735 | 736 | 737 | 738 | LauncherConfigVersion 739 | 8 740 | PBXProjectModuleGUID 741 | 1C162984064C10D400B95A72 742 | PBXProjectModuleLabel 743 | Debug - GLUTExamples (Underwater) 744 | 745 | GeometryConfiguration 746 | 747 | DebugConsoleVisible 748 | None 749 | DebugConsoleWindowFrame 750 | {{200, 200}, {500, 300}} 751 | DebugSTDIOWindowFrame 752 | {{200, 200}, {500, 300}} 753 | Frame 754 | {{0, 0}, {927, 689}} 755 | PBXDebugSessionStackFrameViewKey 756 | 757 | DebugVariablesTableConfiguration 758 | 759 | Name 760 | 209 761 | Value 762 | 85 763 | Summary 764 | 185 765 | 766 | Frame 767 | {{423, 0}, {504, 365}} 768 | RubberWindowFrame 769 | 2 84 927 730 0 0 1680 1028 770 | 771 | RubberWindowFrame 772 | 2 84 927 730 0 0 1680 1028 773 | 774 | Module 775 | PBXDebugSessionModule 776 | Proportion 777 | 689pt 778 | 779 | 780 | Proportion 781 | 689pt 782 | 783 | 784 | Name 785 | Debugger 786 | ServiceClasses 787 | 788 | PBXDebugSessionModule 789 | 790 | StatusbarIsVisible 791 | 792 | TableOfContents 793 | 794 | 1CD10A99069EF8BA00B06720 795 | 4A5B38B810277C5D005DE6A0 796 | 1C162984064C10D400B95A72 797 | 4A5B38B910277C5D005DE6A0 798 | 4A5B38BA10277C5D005DE6A0 799 | 4A5B38BB10277C5D005DE6A0 800 | 4A5B38BC10277C5D005DE6A0 801 | 4A5B38BD10277C5D005DE6A0 802 | 803 | ToolbarConfiguration 804 | xcode.toolbar.config.debugV3 805 | WindowString 806 | 2 84 927 730 0 0 1680 1028 807 | WindowToolGUID 808 | 1CD10A99069EF8BA00B06720 809 | WindowToolIsVisible 810 | 811 | 812 | 813 | Identifier 814 | windowTool.find 815 | Layout 816 | 817 | 818 | Dock 819 | 820 | 821 | Dock 822 | 823 | 824 | ContentConfiguration 825 | 826 | PBXProjectModuleGUID 827 | 1CDD528C0622207200134675 828 | PBXProjectModuleLabel 829 | <No Editor> 830 | PBXSplitModuleInNavigatorKey 831 | 832 | Split0 833 | 834 | PBXProjectModuleGUID 835 | 1CD0528D0623707200166675 836 | 837 | SplitCount 838 | 1 839 | 840 | StatusBarVisibility 841 | 1 842 | 843 | GeometryConfiguration 844 | 845 | Frame 846 | {{0, 0}, {781, 167}} 847 | RubberWindowFrame 848 | 62 385 781 470 0 0 1440 878 849 | 850 | Module 851 | PBXNavigatorGroup 852 | Proportion 853 | 781pt 854 | 855 | 856 | Proportion 857 | 50% 858 | 859 | 860 | BecomeActive 861 | 1 862 | ContentConfiguration 863 | 864 | PBXProjectModuleGUID 865 | 1CD0528E0623707200166675 866 | PBXProjectModuleLabel 867 | Project Find 868 | 869 | GeometryConfiguration 870 | 871 | Frame 872 | {{8, 0}, {773, 254}} 873 | RubberWindowFrame 874 | 62 385 781 470 0 0 1440 878 875 | 876 | Module 877 | PBXProjectFindModule 878 | Proportion 879 | 50% 880 | 881 | 882 | Proportion 883 | 428pt 884 | 885 | 886 | Name 887 | Project Find 888 | ServiceClasses 889 | 890 | PBXProjectFindModule 891 | 892 | StatusbarIsVisible 893 | 1 894 | TableOfContents 895 | 896 | 1C530D57069F1CE1000CFCEE 897 | 1C530D58069F1CE1000CFCEE 898 | 1C530D59069F1CE1000CFCEE 899 | 1CDD528C0622207200134675 900 | 1C530D5A069F1CE1000CFCEE 901 | 1CE0B1FE06471DED0097A5F4 902 | 1CD0528E0623707200166675 903 | 904 | WindowString 905 | 62 385 781 470 0 0 1440 878 906 | WindowToolGUID 907 | 1C530D57069F1CE1000CFCEE 908 | WindowToolIsVisible 909 | 0 910 | 911 | 912 | Identifier 913 | MENUSEPARATOR 914 | 915 | 916 | FirstTimeWindowDisplayed 917 | 918 | Identifier 919 | windowTool.debuggerConsole 920 | IsVertical 921 | 922 | Layout 923 | 924 | 925 | Dock 926 | 927 | 928 | BecomeActive 929 | 930 | ContentConfiguration 931 | 932 | PBXProjectModuleGUID 933 | 1C78EAAC065D492600B07095 934 | PBXProjectModuleLabel 935 | Debugger Console 936 | 937 | GeometryConfiguration 938 | 939 | Frame 940 | {{0, 0}, {1673, 401}} 941 | RubberWindowFrame 942 | 3 -1 1673 442 0 0 1680 1028 943 | 944 | Module 945 | PBXDebugCLIModule 946 | Proportion 947 | 401pt 948 | 949 | 950 | Proportion 951 | 401pt 952 | 953 | 954 | Name 955 | Debugger Console 956 | ServiceClasses 957 | 958 | PBXDebugCLIModule 959 | 960 | StatusbarIsVisible 961 | 962 | TableOfContents 963 | 964 | 1C78EAAD065D492600B07095 965 | 4A5B39301029F6FF005DE6A0 966 | 1C78EAAC065D492600B07095 967 | 968 | ToolbarConfiguration 969 | xcode.toolbar.config.consoleV3 970 | WindowString 971 | 3 -1 1673 442 0 0 1680 1028 972 | WindowToolGUID 973 | 1C78EAAD065D492600B07095 974 | WindowToolIsVisible 975 | 976 | 977 | 978 | Identifier 979 | windowTool.snapshots 980 | Layout 981 | 982 | 983 | Dock 984 | 985 | 986 | Module 987 | XCSnapshotModule 988 | Proportion 989 | 100% 990 | 991 | 992 | Proportion 993 | 100% 994 | 995 | 996 | Name 997 | Snapshots 998 | ServiceClasses 999 | 1000 | XCSnapshotModule 1001 | 1002 | StatusbarIsVisible 1003 | Yes 1004 | ToolbarConfiguration 1005 | xcode.toolbar.config.snapshots 1006 | WindowString 1007 | 315 824 300 550 0 0 1440 878 1008 | WindowToolIsVisible 1009 | Yes 1010 | 1011 | 1012 | Identifier 1013 | windowTool.scm 1014 | Layout 1015 | 1016 | 1017 | Dock 1018 | 1019 | 1020 | ContentConfiguration 1021 | 1022 | PBXProjectModuleGUID 1023 | 1C78EAB2065D492600B07095 1024 | PBXProjectModuleLabel 1025 | <No Editor> 1026 | PBXSplitModuleInNavigatorKey 1027 | 1028 | Split0 1029 | 1030 | PBXProjectModuleGUID 1031 | 1C78EAB3065D492600B07095 1032 | 1033 | SplitCount 1034 | 1 1035 | 1036 | StatusBarVisibility 1037 | 1 1038 | 1039 | GeometryConfiguration 1040 | 1041 | Frame 1042 | {{0, 0}, {452, 0}} 1043 | RubberWindowFrame 1044 | 743 379 452 308 0 0 1280 1002 1045 | 1046 | Module 1047 | PBXNavigatorGroup 1048 | Proportion 1049 | 0pt 1050 | 1051 | 1052 | BecomeActive 1053 | 1 1054 | ContentConfiguration 1055 | 1056 | PBXProjectModuleGUID 1057 | 1CD052920623707200166675 1058 | PBXProjectModuleLabel 1059 | SCM 1060 | 1061 | GeometryConfiguration 1062 | 1063 | ConsoleFrame 1064 | {{0, 259}, {452, 0}} 1065 | Frame 1066 | {{0, 7}, {452, 259}} 1067 | RubberWindowFrame 1068 | 743 379 452 308 0 0 1280 1002 1069 | TableConfiguration 1070 | 1071 | Status 1072 | 30 1073 | FileName 1074 | 199 1075 | Path 1076 | 197.0950012207031 1077 | 1078 | TableFrame 1079 | {{0, 0}, {452, 250}} 1080 | 1081 | Module 1082 | PBXCVSModule 1083 | Proportion 1084 | 262pt 1085 | 1086 | 1087 | Proportion 1088 | 266pt 1089 | 1090 | 1091 | Name 1092 | SCM 1093 | ServiceClasses 1094 | 1095 | PBXCVSModule 1096 | 1097 | StatusbarIsVisible 1098 | 1 1099 | TableOfContents 1100 | 1101 | 1C78EAB4065D492600B07095 1102 | 1C78EAB5065D492600B07095 1103 | 1C78EAB2065D492600B07095 1104 | 1CD052920623707200166675 1105 | 1106 | ToolbarConfiguration 1107 | xcode.toolbar.config.scm 1108 | WindowString 1109 | 743 379 452 308 0 0 1280 1002 1110 | 1111 | 1112 | Identifier 1113 | windowTool.breakpoints 1114 | IsVertical 1115 | 0 1116 | Layout 1117 | 1118 | 1119 | Dock 1120 | 1121 | 1122 | BecomeActive 1123 | 1 1124 | ContentConfiguration 1125 | 1126 | PBXBottomSmartGroupGIDs 1127 | 1128 | 1C77FABC04509CD000000102 1129 | 1130 | PBXProjectModuleGUID 1131 | 1CE0B1FE06471DED0097A5F4 1132 | PBXProjectModuleLabel 1133 | Files 1134 | PBXProjectStructureProvided 1135 | no 1136 | PBXSmartGroupTreeModuleColumnData 1137 | 1138 | PBXSmartGroupTreeModuleColumnWidthsKey 1139 | 1140 | 168 1141 | 1142 | PBXSmartGroupTreeModuleColumnsKey_v4 1143 | 1144 | MainColumn 1145 | 1146 | 1147 | PBXSmartGroupTreeModuleOutlineStateKey_v7 1148 | 1149 | PBXSmartGroupTreeModuleOutlineStateExpansionKey 1150 | 1151 | 1C77FABC04509CD000000102 1152 | 1153 | PBXSmartGroupTreeModuleOutlineStateSelectionKey 1154 | 1155 | 1156 | 0 1157 | 1158 | 1159 | PBXSmartGroupTreeModuleOutlineStateVisibleRectKey 1160 | {{0, 0}, {168, 350}} 1161 | 1162 | PBXTopSmartGroupGIDs 1163 | 1164 | XCIncludePerspectivesSwitch 1165 | 0 1166 | 1167 | GeometryConfiguration 1168 | 1169 | Frame 1170 | {{0, 0}, {185, 368}} 1171 | GroupTreeTableConfiguration 1172 | 1173 | MainColumn 1174 | 168 1175 | 1176 | RubberWindowFrame 1177 | 315 424 744 409 0 0 1440 878 1178 | 1179 | Module 1180 | PBXSmartGroupTreeModule 1181 | Proportion 1182 | 185pt 1183 | 1184 | 1185 | ContentConfiguration 1186 | 1187 | PBXProjectModuleGUID 1188 | 1CA1AED706398EBD00589147 1189 | PBXProjectModuleLabel 1190 | Detail 1191 | 1192 | GeometryConfiguration 1193 | 1194 | Frame 1195 | {{190, 0}, {554, 368}} 1196 | RubberWindowFrame 1197 | 315 424 744 409 0 0 1440 878 1198 | 1199 | Module 1200 | XCDetailModule 1201 | Proportion 1202 | 554pt 1203 | 1204 | 1205 | Proportion 1206 | 368pt 1207 | 1208 | 1209 | MajorVersion 1210 | 3 1211 | MinorVersion 1212 | 0 1213 | Name 1214 | Breakpoints 1215 | ServiceClasses 1216 | 1217 | PBXSmartGroupTreeModule 1218 | XCDetailModule 1219 | 1220 | StatusbarIsVisible 1221 | 1 1222 | TableOfContents 1223 | 1224 | 1CDDB66807F98D9800BB5817 1225 | 1CDDB66907F98D9800BB5817 1226 | 1CE0B1FE06471DED0097A5F4 1227 | 1CA1AED706398EBD00589147 1228 | 1229 | ToolbarConfiguration 1230 | xcode.toolbar.config.breakpointsV3 1231 | WindowString 1232 | 315 424 744 409 0 0 1440 878 1233 | WindowToolGUID 1234 | 1CDDB66807F98D9800BB5817 1235 | WindowToolIsVisible 1236 | 1 1237 | 1238 | 1239 | Identifier 1240 | windowTool.debugAnimator 1241 | Layout 1242 | 1243 | 1244 | Dock 1245 | 1246 | 1247 | Module 1248 | PBXNavigatorGroup 1249 | Proportion 1250 | 100% 1251 | 1252 | 1253 | Proportion 1254 | 100% 1255 | 1256 | 1257 | Name 1258 | Debug Visualizer 1259 | ServiceClasses 1260 | 1261 | PBXNavigatorGroup 1262 | 1263 | StatusbarIsVisible 1264 | 1 1265 | ToolbarConfiguration 1266 | xcode.toolbar.config.debugAnimatorV3 1267 | WindowString 1268 | 100 100 700 500 0 0 1280 1002 1269 | 1270 | 1271 | Identifier 1272 | windowTool.bookmarks 1273 | Layout 1274 | 1275 | 1276 | Dock 1277 | 1278 | 1279 | Module 1280 | PBXBookmarksModule 1281 | Proportion 1282 | 100% 1283 | 1284 | 1285 | Proportion 1286 | 100% 1287 | 1288 | 1289 | Name 1290 | Bookmarks 1291 | ServiceClasses 1292 | 1293 | PBXBookmarksModule 1294 | 1295 | StatusbarIsVisible 1296 | 0 1297 | WindowString 1298 | 538 42 401 187 0 0 1280 1002 1299 | 1300 | 1301 | Identifier 1302 | windowTool.projectFormatConflicts 1303 | Layout 1304 | 1305 | 1306 | Dock 1307 | 1308 | 1309 | Module 1310 | XCProjectFormatConflictsModule 1311 | Proportion 1312 | 100% 1313 | 1314 | 1315 | Proportion 1316 | 100% 1317 | 1318 | 1319 | Name 1320 | Project Format Conflicts 1321 | ServiceClasses 1322 | 1323 | XCProjectFormatConflictsModule 1324 | 1325 | StatusbarIsVisible 1326 | 0 1327 | WindowContentMinSize 1328 | 450 300 1329 | WindowString 1330 | 50 850 472 307 0 0 1440 877 1331 | 1332 | 1333 | Identifier 1334 | windowTool.classBrowser 1335 | Layout 1336 | 1337 | 1338 | Dock 1339 | 1340 | 1341 | BecomeActive 1342 | 1 1343 | ContentConfiguration 1344 | 1345 | OptionsSetName 1346 | Hierarchy, all classes 1347 | PBXProjectModuleGUID 1348 | 1CA6456E063B45B4001379D8 1349 | PBXProjectModuleLabel 1350 | Class Browser - NSObject 1351 | 1352 | GeometryConfiguration 1353 | 1354 | ClassesFrame 1355 | {{0, 0}, {374, 96}} 1356 | ClassesTreeTableConfiguration 1357 | 1358 | PBXClassNameColumnIdentifier 1359 | 208 1360 | PBXClassBookColumnIdentifier 1361 | 22 1362 | 1363 | Frame 1364 | {{0, 0}, {630, 331}} 1365 | MembersFrame 1366 | {{0, 105}, {374, 395}} 1367 | MembersTreeTableConfiguration 1368 | 1369 | PBXMemberTypeIconColumnIdentifier 1370 | 22 1371 | PBXMemberNameColumnIdentifier 1372 | 216 1373 | PBXMemberTypeColumnIdentifier 1374 | 97 1375 | PBXMemberBookColumnIdentifier 1376 | 22 1377 | 1378 | PBXModuleWindowStatusBarHidden2 1379 | 1 1380 | RubberWindowFrame 1381 | 385 179 630 352 0 0 1440 878 1382 | 1383 | Module 1384 | PBXClassBrowserModule 1385 | Proportion 1386 | 332pt 1387 | 1388 | 1389 | Proportion 1390 | 332pt 1391 | 1392 | 1393 | Name 1394 | Class Browser 1395 | ServiceClasses 1396 | 1397 | PBXClassBrowserModule 1398 | 1399 | StatusbarIsVisible 1400 | 0 1401 | TableOfContents 1402 | 1403 | 1C0AD2AF069F1E9B00FABCE6 1404 | 1C0AD2B0069F1E9B00FABCE6 1405 | 1CA6456E063B45B4001379D8 1406 | 1407 | ToolbarConfiguration 1408 | xcode.toolbar.config.classbrowser 1409 | WindowString 1410 | 385 179 630 352 0 0 1440 878 1411 | WindowToolGUID 1412 | 1C0AD2AF069F1E9B00FABCE6 1413 | WindowToolIsVisible 1414 | 0 1415 | 1416 | 1417 | Identifier 1418 | windowTool.refactoring 1419 | IncludeInToolsMenu 1420 | 0 1421 | Layout 1422 | 1423 | 1424 | Dock 1425 | 1426 | 1427 | BecomeActive 1428 | 1 1429 | GeometryConfiguration 1430 | 1431 | Frame 1432 | {0, 0}, {500, 335} 1433 | RubberWindowFrame 1434 | {0, 0}, {500, 335} 1435 | 1436 | Module 1437 | XCRefactoringModule 1438 | Proportion 1439 | 100% 1440 | 1441 | 1442 | Proportion 1443 | 100% 1444 | 1445 | 1446 | Name 1447 | Refactoring 1448 | ServiceClasses 1449 | 1450 | XCRefactoringModule 1451 | 1452 | WindowString 1453 | 200 200 500 356 0 0 1920 1200 1454 | 1455 | 1456 | 1457 | 1458 | --------------------------------------------------------------------------------