From d6b6b48f7ecd11726f22ba538bcd6020217e68b2 Mon Sep 17 00:00:00 2001 From: rob Date: Mon, 22 Dec 2008 11:10:40 +0000 Subject: [PATCH] updated embedded frameworks to link to 10.4 SDK --- SuperCollider.tmbundle/Support/sc3ctrl/README | 69 --------- .../Support/sc3ctrl/SC3Controller.sc | 140 +++++++++++++++++ .../Support/sc3ctrl/VVOSC.framework/Headers | 1 - .../VVOSC.framework/Headers/AddressValPair.h | 28 ++++ .../VVOSC.framework/Headers/OSCBundle.h | 34 +++++ .../VVOSC.framework/Headers/OSCInPort.h | 93 +++++++++++ .../VVOSC.framework/Headers/OSCManager.h | 144 ++++++++++++++++++ .../VVOSC.framework/Headers/OSCMessage.h | 43 ++++++ .../VVOSC.framework/Headers/OSCOutPort.h | 58 +++++++ .../VVOSC.framework/Headers/OSCPacket.h | 37 +++++ .../Headers/OSCZeroConfDomain.h | 44 ++++++ .../Headers/OSCZeroConfManager.h | 39 +++++ .../sc3ctrl/VVOSC.framework/Headers/VVOSC.h | 9 ++ .../Support/sc3ctrl/VVOSC.framework/Resources | 1 - .../Resources/English.lproj/InfoPlist.strings | Bin 0 -> 92 bytes .../VVOSC.framework/Resources/Info.plist | 24 +++ .../Support/sc3ctrl/VVOSC.framework/VVOSC | Bin 22 -> 117044 bytes .../sc3ctrl/VVOSC.framework/Versions/A/VVOSC | Bin 117664 -> 117044 bytes .../sc3ctrl/VVOSC.framework/Versions/Current | 1 - .../Versions/Current/Headers/AddressValPair.h | 28 ++++ .../Versions/Current/Headers/OSCBundle.h | 34 +++++ .../Versions/Current/Headers/OSCInPort.h | 93 +++++++++++ .../Versions/Current/Headers/OSCManager.h | 144 ++++++++++++++++++ .../Versions/Current/Headers/OSCMessage.h | 43 ++++++ .../Versions/Current/Headers/OSCOutPort.h | 58 +++++++ .../Versions/Current/Headers/OSCPacket.h | 37 +++++ .../Current/Headers/OSCZeroConfDomain.h | 44 ++++++ .../Current/Headers/OSCZeroConfManager.h | 39 +++++ .../Versions/Current/Headers/VVOSC.h | 9 ++ .../Resources/English.lproj/InfoPlist.strings | Bin 0 -> 92 bytes .../Versions/Current/Resources/Info.plist | 24 +++ .../VVOSC.framework/Versions/Current/VVOSC | Bin 0 -> 117044 bytes 32 files changed, 1246 insertions(+), 72 deletions(-) delete mode 100644 SuperCollider.tmbundle/Support/sc3ctrl/README create mode 100644 SuperCollider.tmbundle/Support/sc3ctrl/SC3Controller.sc delete mode 120000 SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Headers create mode 100644 SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Headers/AddressValPair.h create mode 100644 SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Headers/OSCBundle.h create mode 100644 SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Headers/OSCInPort.h create mode 100644 SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Headers/OSCManager.h create mode 100644 SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Headers/OSCMessage.h create mode 100644 SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Headers/OSCOutPort.h create mode 100644 SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Headers/OSCPacket.h create mode 100644 SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Headers/OSCZeroConfDomain.h create mode 100644 SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Headers/OSCZeroConfManager.h create mode 100644 SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Headers/VVOSC.h delete mode 120000 SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Resources create mode 100644 SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Resources/English.lproj/InfoPlist.strings create mode 100644 SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Resources/Info.plist mode change 120000 => 100755 SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/VVOSC delete mode 120000 SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current create mode 100644 SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Headers/AddressValPair.h create mode 100644 SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Headers/OSCBundle.h create mode 100644 SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Headers/OSCInPort.h create mode 100644 SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Headers/OSCManager.h create mode 100644 SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Headers/OSCMessage.h create mode 100644 SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Headers/OSCOutPort.h create mode 100644 SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Headers/OSCPacket.h create mode 100644 SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Headers/OSCZeroConfDomain.h create mode 100644 SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Headers/OSCZeroConfManager.h create mode 100644 SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Headers/VVOSC.h create mode 100644 SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Resources/English.lproj/InfoPlist.strings create mode 100644 SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Resources/Info.plist create mode 100755 SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/VVOSC diff --git a/SuperCollider.tmbundle/Support/sc3ctrl/README b/SuperCollider.tmbundle/Support/sc3ctrl/README deleted file mode 100644 index 6900d4e..0000000 --- a/SuperCollider.tmbundle/Support/sc3ctrl/README +++ /dev/null @@ -1,69 +0,0 @@ -************************************************************************** -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -************************************************************************** - - -Introduction -============ - -sc3ctrl is a command line utility which uses OpenSoundControl to control -SuperCollider3.app in OSX. - -Consists of a small CoreFoundation bundle written in Objective-C and a -single SuperCollider class. - -Binary: http://www.trapdoor1.net/sc3/sc3ctrl.tar.gz -(as yet untested on anything other than 10.5) - -Source code: http://github.com/rfwatson/sc3ctrl - - -Installation -============ - -1) Drag the bundle into a suitable location on your machine - (e.g. /Application/Utilities/) - -2) cd /Application/Utilities/sc3ctrl/ - -3) sudo install.rb - -4) Start SuperCollider.app - - -Usage -===== - -sc3ctrl -x Execute the SC code in environment variable SC_INTERPRET_TEXT - -sc3ctrl -x VARIABLE_NAME Execute the SC code in environment variable VARIABLE_NAME - -sc3ctrl -d classname Open help file for classname - -sc3ctrl -j classname Open class definition for classname - -sc3ctrl -y methodname Examine implementations of methodname - -sc3ctrl -Y methodname Examine references to methodname - -sc3ctrl -s Stop server (CMD-PERIOD) - -sc3ctrl -c Clear post window - -sc3ctrl -p Post window to front - -sc3ctrl -k Recompile class library (requires recent build) - diff --git a/SuperCollider.tmbundle/Support/sc3ctrl/SC3Controller.sc b/SuperCollider.tmbundle/Support/sc3ctrl/SC3Controller.sc new file mode 100644 index 0000000..e435bb0 --- /dev/null +++ b/SuperCollider.tmbundle/Support/sc3ctrl/SC3Controller.sc @@ -0,0 +1,140 @@ +// http://github.com/rfwatson/sc3ctrl + +SC3Controller { + classvar nodes; + + *initClass { + nodes = List[]; + + Platform.case(\osx) { + StartUp.add { + this.addListeners; + } + } + } + + *addListeners { + var node, postToFront; + + postToFront = { + Document.listener.front; + }; + + if(nodes.isEmpty) { + node = OSCresponderNode(nil, '/sc3ctrl/cmd') { |t, r, msg| + msg[1].asString.interpretPrint; + { postToFront.() }.defer; + }.add; + nodes.add(node); + + node = OSCresponderNode(nil, '/sc3ctrl/help') { |t, r, msg| + { msg[1].asString.openHelpFile }.defer + }.add; + nodes.add(node); + + node = OSCresponderNode(nil, '/sc3ctrl/class') { |t, r, msg| + { msg[1].asString.interpret.openCodeFile }.defer + }.add; + nodes.add(node); + + node = OSCresponderNode(nil, '/sc3ctrl/implementations') { |t, r, msg| + { SC3Controller.methodTemplates(msg[1]) }.defer + }.add; + nodes.add(node); + + node = OSCresponderNode(nil, '/sc3ctrl/references') { |t, r, msg| + { SC3Controller.methodReferences(msg[1]) }.defer + }.add; + nodes.add(node); + + node = OSCresponderNode(nil, '/sc3ctrl/stop') { |t, r, msg| + thisProcess.stop; + }.add; + nodes.add(node); + + node = OSCresponderNode(nil, '/sc3ctrl/clear') { |t, r, msg| + { + Document.listener.string = ""; ""; + postToFront.(); + }.defer; + }.add; + nodes.add(node); + + node = OSCresponderNode(nil, '/sc3ctrl/postfront') { |t, r, msg| + { postToFront.() }.defer; + }.add; + nodes.add(node); + + node = OSCresponderNode(nil, '/sc3ctrl/recompile') { |t, r, msg| + { + thisProcess.recompile; + postToFront.(); + }.defer; + }.add; + nodes.add(node); + } + } + + *removeAllListeners { + nodes.do(_.remove); + } + + // adapated from Kernel.sc + *methodTemplates { |name| + var out, found = 0, namestring; + out = CollStream.new; + out << "Implementations of '" << name << "' :\n"; + Class.allClasses.do({ arg class; + class.methods.do({ arg method; + if (method.name == name, { + found = found + 1; + namestring = class.name ++ ":" ++ name; + out << " " << namestring << " : "; + if (method.argNames.isNil or: { method.argNames.size == 1 }, { + out << "this." << name; + if (name.isSetter, { out << "(val)"; }); + },{ + out << method.argNames.at(0); + if (name.asString.at(0).isAlpha, { + out << "." << name << "("; + method.argNames.do({ arg argName, i; + if (i > 0, { + if (i != 1, { out << ", " }); + out << argName; + }); + }); + out << ")"; + },{ + out << " " << name << " "; + out << method.argNames.at(1); + }); + }); + out.nl; + }); + }); + }); + if(found == 0) + { + Post << "\nNo implementations of '" << name << "'.\n"; + } + { + out.collection.newTextWindow(name.asString); + }; + } + + // adapted from Kernel.sc + *methodReferences { |name| + var out, references; + name = name.asSymbol; + out = CollStream.new; + references = Class.findAllReferences(name); + + if (references.notNil, { + out << "References to '" << name << "' :\n"; + references.do({ arg ref; out << " " << ref.asString << "\n"; }); + out.collection.newTextWindow(name.asString); + },{ + Post << "\nNo references to '" << name << "'.\n"; + }); + } +} \ No newline at end of file diff --git a/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Headers b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Headers deleted file mode 120000 index a177d2a..0000000 --- a/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Headers +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Headers \ No newline at end of file diff --git a/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Headers/AddressValPair.h b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Headers/AddressValPair.h new file mode 100644 index 0000000..e8ab9ca --- /dev/null +++ b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Headers/AddressValPair.h @@ -0,0 +1,28 @@ +// +// AddressValPair.h +// VVOSC +// +// Created by bagheera on 12/11/08. +// Copyright 2008 __MyCompanyName__. All rights reserved. +// + +#if IPHONE +#import +#else +#import +#endif + + + +@interface AddressValPair : NSObject { + NSString *address; + id val; +} + ++ (id) createWithAddress:(NSString *)a val:(id)v; +- (id) initWithAddress:(NSString *)a val:(id)v; + +- (NSString *) address; +- (id) val; + +@end diff --git a/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Headers/OSCBundle.h b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Headers/OSCBundle.h new file mode 100644 index 0000000..712f13a --- /dev/null +++ b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Headers/OSCBundle.h @@ -0,0 +1,34 @@ +// +// OSCBundle.h +// OSC +// +// Created by bagheera on 9/20/08. +// Copyright 2008 __MyCompanyName__. All rights reserved. +// + +#if IPHONE +#import +#else +#import +#endif + +#import "OSCMessage.h" + + + + +@interface OSCBundle : NSObject { + NSMutableArray *elementArray; // array of messages or bundles +} + ++ (void) parseRawBuffer:(unsigned char *)b ofMaxLength:(int)l toInPort:(id)p; + ++ (id) create; + +- (void) addElement:(id)n; +- (void) addElementArray:(NSArray *)a; + +- (int) bufferLength; +- (void) writeToBuffer:(unsigned char *)b; + +@end diff --git a/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Headers/OSCInPort.h b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Headers/OSCInPort.h new file mode 100644 index 0000000..3f1fa83 --- /dev/null +++ b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Headers/OSCInPort.h @@ -0,0 +1,93 @@ +// +// OSCInPort.h +// OSC +// +// Created by bagheera on 9/20/08. +// Copyright 2008 __MyCompanyName__. All rights reserved. +// + +#if IPHONE +#import +#else +#import +#endif + + +//#import +//#import +#import + +#import +#import "AddressValPair.h" +#import "OSCPacket.h" +#import "OSCBundle.h" +#import "OSCMessage.h" + + +@protocol OSCInPortDelegateProtocol +- (void) oscMessageReceived:(NSDictionary *)d; +- (void) receivedOSCVal:(id)v forAddress:(NSString *)a; +@end + +@protocol OSCDelegateProtocol +- (void) oscMessageReceived:(NSDictionary *)d; +- (void) receivedOSCVal:(id)v forAddress:(NSString *)a; +@end + + +@interface OSCInPort : NSObject { + BOOL deleted; // whether or not i'm deleted- ensures that socket gets closed + BOOL bound; // whether or not the socket is bound + int sock; // socket file descriptor. remember, everything in unix is files! + struct sockaddr_in addr; // struct that describes *my* address (this is an in port) + unsigned short port; // the port number i'm receiving from + BOOL running; // whether or not i should keep running + BOOL busy; + unsigned char buf[8192]; // the socket gets data and dumps it here immediately + + pthread_mutex_t lock; + NSTimer *threadTimer; + int threadTimerCount; + NSAutoreleasePool *threadPool; + + NSString *portLabel; // the "name" of the port (added to distinguish multiple osc input ports for bonjour) + NSNetService *zeroConfDest; // bonjour service for publishing this input's address...only active if there's a portLabel! + + NSMutableDictionary *scratchDict; // key of dict is address port; object at key is a mut. array. coalesced messaging. + NSMutableArray *scratchArray; // array of AddressValPair objects. used for serial messaging. + id delegate; // my delegate gets notified of incoming messages +} + ++ (id) createWithPort:(unsigned short)p; ++ (id) createWithPort:(unsigned short)p labelled:(NSString *)n; +- (id) initWithPort:(unsigned short)p; +- (id) initWithPort:(unsigned short)p labelled:(NSString *)n; + +- (void) prepareToBeDeleted; + +- (NSDictionary *) createSnapshot; + +- (BOOL) createSocket; +- (void) start; +- (void) stop; +- (void) launchOSCLoop:(id)o; +- (void) OSCThreadProc:(NSTimer *)t; +- (void) parseRawBuffer:(unsigned char *)b ofMaxLength:(int)l; + +// if the delegate im +- (void) handleParsedScratchDict:(NSDictionary *)d; +- (void) handleScratchArray:(NSArray *)a; + +- (void) addValue:(id)val toAddressPath:(NSString *)p; + +- (unsigned short) port; +- (void) setPort:(unsigned short)n; +- (NSString *) portLabel; +- (void) setPortLabel:(NSString *)n; +- (NSNetService *) zeroConfDest; +- (BOOL) bound; + +- (id) delegate; +- (void) setDelegate:(id)n; + +@end diff --git a/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Headers/OSCManager.h b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Headers/OSCManager.h new file mode 100644 index 0000000..5673296 --- /dev/null +++ b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Headers/OSCManager.h @@ -0,0 +1,144 @@ +// +// OSCManager.h +// OSC +// +// Created by bagheera on 9/20/08. +// Copyright 2008 __MyCompanyName__. All rights reserved. +// + +#if IPHONE +#import +#else +#import +#endif + +#import "OSCZeroConfManager.h" +#import "OSCInPort.h" +#import "OSCOutPort.h" +#import + +/* + TOP-LEVEL OVERVIEW + + this osc manager class is all you need to add to your app. it has methods for + adding and removing ports. you can have as many osc managers as you like, but + you should really only need one instance. + + input ports have a delegate- delegate methods are called as the port receives data. + it's important to note that the delegate methods must be thread-safe: each input + port is running on its own (non-main) thread. + + data is sent via the output ports (convenience methods for doing this are built + into the osc manager). + + + + + GENERAL OSC STRUCTURE AND OVERVIEW + + this framework was written from the OSC spec found here: + http://opensoundcontrol.org/spec-1_0 + + - an OSC packet is the basic unit of transmitting OSC data. + - an OSC packet consists of: + - contents- contiguous block of binary data (either a bundle or a message), and then the + - size- number of 8-bit bytes that comprise 'contents'- ALWAYS multiple of 4! + - an OSC message consists of: + - an OSC address pattern (starting with '/'), followed by + - an OSC type tag string, followed by + - zero or more 'OSC arguments' + - an OSC bundle consists of: + - the OSC-string "#bundle", followed by + - an OSC time tag, followed by + - zero or more 'OSC bundle elements' + - an OSC bundle element consists of: + - 'size' (int32)- number of 8-bit bytes in the contents- ALWAYS multiple of 4! + - 'contents'- either another OSC bundle, or an OSC message + + + + + PORTS- SENDING AND RECEIVING UDP/TCP DATA + + some basic information, gleaned from: + http://beej.us/guide/bgnet/output/html/multipage/index.html + + struct sockaddr { + unsigned short sa_family; // address family, AF_xxx + char sa_data[14]; // 14 bytes of protocol address + } + struct sockaddr_in { + short int sin_family; // address family + unsigned short int sin_port; // port number + struct in_addr sin_addr; // internet address + unsigned char sin_zero[8]; // exists so sockaddr_in has same length as sockaddr + } + + recv(int sockfd, void *buf, int len, unsigned int flags); + - sockfd is the socket descriptor to read from + - buf is the buffer to read the information into + - len is the max length of the buffer + - flags can be set to 0 + recvfrom(int sockfd, void *buf, int len, unsigned int flags, struct sockaddr *from, int *fromlen); + - from is a pointer to a local struct sockaddr that will be filled with the IP & port of the originating machine + - fromlen is a pointer to a local int that should be initialized to a sizeof(struct sockaddr)- contains length of address actually stored in from on return + ...as well as the 4 params listed above in recv() + + int select(int numfds, fd_set *readrds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); +*/ + +@interface OSCManager : NSObject { + NSMutableArray *inPortArray; + NSMutableArray *outPortArray; + + pthread_rwlock_t inPortLock; + pthread_rwlock_t outPortLock; + + id delegate; + + OSCZeroConfManager *zeroConfManager; // bonjour/zero-configuration manager +} + +- (void) deleteAllInputs; +- (void) deleteAllOutputs; +// methods for creating input ports +- (OSCInPort *) createNewInputFromSnapshot:(NSDictionary *)s; +- (OSCInPort *) createNewInputForPort:(int)p withLabel:(NSString *)l; +- (OSCInPort *) createNewInputForPort:(int)p; +- (OSCInPort *) createNewInput; +// methods for creating output ports +- (OSCOutPort *) createNewOutputFromSnapshot:(NSDictionary *)s; +- (OSCOutPort *) createNewOutputToAddress:(NSString *)a atPort:(int)p withLabel:(NSString *)l; +- (OSCOutPort *) createNewOutputToAddress:(NSString *)a atPort:(int)p; +- (OSCOutPort *) createNewOutput; + +// typically, the manager is the input port's delegate- input ports tell delegates when they receive data +// this method is called and contains coalesced messages (grouped by address path) +- (void) oscMessageReceived:(NSDictionary *)d; +// this method is called every time any osc val is processed +- (void) receivedOSCVal:(id)v forAddress:(NSString *)a; + +// methods for working with ports +- (NSString *) getUniqueInputLabel; +- (NSString *) getUniqueOutputLabel; +- (OSCInPort *) findInputWithLabel:(NSString *)n; +- (OSCOutPort *) findOutputWithLabel:(NSString *)n; +- (OSCOutPort *) findOutputWithAddress:(NSString *)a andPort:(int)p; +- (OSCOutPort *) findOutputForIndex:(int)i; +- (OSCInPort *) findInputWithZeroConfName:(NSString *)n; +- (void) removeInput:(id)p; +- (void) removeOutput:(id)p; +- (NSArray *) outPortLabelArray; + +// subclassable methods for customizing +- (id) inPortClass; +- (NSString *) inPortLabelBase; +- (id) outPortClass; + +// misc +- (id) delegate; +- (void) setDelegate:(id)n; +- (NSMutableArray *) inPortArray; +- (NSMutableArray *) outPortArray; + +@end diff --git a/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Headers/OSCMessage.h b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Headers/OSCMessage.h new file mode 100644 index 0000000..e86444c --- /dev/null +++ b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Headers/OSCMessage.h @@ -0,0 +1,43 @@ +// +// OSCMessage.h +// OSC +// +// Created by bagheera on 9/20/08. +// Copyright 2008 __MyCompanyName__. All rights reserved. +// + +#if IPHONE +#import +#else +#import +#endif + +#import + + + +@interface OSCMessage : NSObject { + NSString *address; + NSMutableArray *typeArray; + NSMutableArray *argArray; + pthread_rwlock_t lock; +} + ++ (void) parseRawBuffer:(unsigned char *)b ofMaxLength:(int)l toInPort:(id)p; ++ (id) createMessageToAddress:(NSString *)a; +- (id) initWithAddress:(NSString *)a; + +- (void) addInt:(int)n; +- (void) addFloat:(float)n; +#if IPHONE +- (void) addColor:(UIColor *)c; +#else +- (void) addColor:(NSColor *)c; +#endif +- (void) addBOOL:(BOOL)n; +- (void) addString:(NSString *)n; + +- (int) bufferLength; +- (void) writeToBuffer:(unsigned char *)b; + +@end diff --git a/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Headers/OSCOutPort.h b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Headers/OSCOutPort.h new file mode 100644 index 0000000..859b046 --- /dev/null +++ b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Headers/OSCOutPort.h @@ -0,0 +1,58 @@ +// +// OSCOutPort.h +// OSC +// +// Created by bagheera on 9/20/08. +// Copyright 2008 __MyCompanyName__. All rights reserved. +// + +#if IPHONE +#import +#else +#import +#endif + + +#include + +#import "OSCPacket.h" +#import "OSCBundle.h" +#import "OSCMessage.h" + + + + +@interface OSCOutPort : NSObject { + BOOL deleted; + int sock; + struct sockaddr_in addr; + unsigned short port; + NSString *addressString; + NSString *portLabel; // used it to distinguish between multiple osc outputs +} + ++ (id) createWithAddress:(NSString *)a andPort:(unsigned short)p; ++ (id) createWithAddress:(NSString *)a andPort:(unsigned short)p labelled:(NSString *)l; +- (id) initWithAddress:(NSString *)a andPort:(unsigned short)p; +- (id) initWithAddress:(NSString *)a andPort:(unsigned short)p labelled:(NSString *)l; +- (void) prepareToBeDeleted; + +- (NSDictionary *) createSnapshot; + +- (BOOL) createSocket; + +- (void) sendThisBundle:(OSCBundle *)b; +- (void) sendThisMessage:(OSCMessage *)m; +- (void) sendThisPacket:(OSCPacket *)p; + +- (void) setAddressString:(NSString *)n; +- (void) setPort:(unsigned short)p; +- (void) setAddressString:(NSString *)n andPort:(unsigned short)p; + +- (NSString *) portLabel; +- (void) setPortLabel:(NSString *)n; + +- (unsigned short) port; +- (NSString *) addressString; + +@end diff --git a/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Headers/OSCPacket.h b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Headers/OSCPacket.h new file mode 100644 index 0000000..4d79674 --- /dev/null +++ b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Headers/OSCPacket.h @@ -0,0 +1,37 @@ +// +// OSCPacket.h +// OSC +// +// Created by bagheera on 9/20/08. +// Copyright 2008 __MyCompanyName__. All rights reserved. +// + +#if IPHONE +#import +#else +#import +#endif + +#include +#import "OSCBundle.h" +#import "OSCMessage.h" + +/* + this class requires a bundle or message on create/init. the buffer/msg + is NOT retained by this class in any way- it's used to immediately create + the buffer which will be sent. +*/ + +@interface OSCPacket : NSObject { + int bufferLength; + unsigned char *payload; +} + ++ (void) parseRawBuffer:(unsigned char *)b ofMaxLength:(int)l toInPort:(id)p; ++ (id) createWithContent:(id)c; +- (id) initWithContent:(id)c; + +- (int) bufferLength; +- (unsigned char *) payload; + +@end diff --git a/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Headers/OSCZeroConfDomain.h b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Headers/OSCZeroConfDomain.h new file mode 100644 index 0000000..22a94bc --- /dev/null +++ b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Headers/OSCZeroConfDomain.h @@ -0,0 +1,44 @@ +// +// OSCZeroConfDomain.h +// VVOSC +// +// Created by bagheera on 12/9/08. +// Copyright 2008 __MyCompanyName__. All rights reserved. +// + +#if IPHONE +#import +#else +#import +#endif + +#import +#import +#include + + + + +@interface OSCZeroConfDomain : NSObject { + NSString *domainString; + NSNetServiceBrowser *serviceBrowser; + + NSMutableArray *servicesArray; + pthread_rwlock_t servicesLock; + + id domainManager; +} + ++ (id) createWithDomain:(NSString *)d andDomainManager:(id)m; +- (id) initWithDomain:(NSString *)d andDomainManager:(id)m; + +// NSNetServiceBrowser delegate methods +- (void)netServiceBrowser:(NSNetServiceBrowser *)n didFindService:(NSNetService *)x moreComing:(BOOL)m; +- (void)netServiceBrowser:(NSNetServiceBrowser *)n didNotSearch:(NSDictionary *)err; +- (void)netServiceBrowser:(NSNetServiceBrowser *)n didRemoveService:(NSNetService *)s moreComing:(BOOL)m; + +// NSNetService delegate methods +- (void)netService:(NSNetService *)n didNotResolve:(NSDictionary *)err; +- (void)netServiceDidResolveAddress:(NSNetService *)n; + +@end diff --git a/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Headers/OSCZeroConfManager.h b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Headers/OSCZeroConfManager.h new file mode 100644 index 0000000..21ddd7f --- /dev/null +++ b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Headers/OSCZeroConfManager.h @@ -0,0 +1,39 @@ +// +// OSCZeroConfManager.h +// VVOSC +// +// Created by bagheera on 12/9/08. +// Copyright 2008 __MyCompanyName__. All rights reserved. +// + +#if IPHONE +#import +#else +#import +#endif + +#import "OSCZeroConfDomain.h" +#import + + + + +@interface OSCZeroConfManager : NSObject { + NSNetServiceBrowser *domainBrowser; + + NSMutableDictionary *domainDict; + pthread_rwlock_t domainLock; + + id oscManager; +} + +- (id) initWithOSCManager:(id)m; + +- (void) serviceRemoved:(NSNetService *)s; +- (void) serviceResolved:(NSNetService *)s; + +// NSNetServiceBrowser delegate methods +- (void)netServiceBrowser:(NSNetServiceBrowser *)n didFindDomain:(NSString *)d moreComing:(BOOL)m; +- (void)netServiceBrowser:(NSNetServiceBrowser *)n didNotSearch:(NSDictionary *)err; + +@end diff --git a/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Headers/VVOSC.h b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Headers/VVOSC.h new file mode 100644 index 0000000..0248ef1 --- /dev/null +++ b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Headers/VVOSC.h @@ -0,0 +1,9 @@ + + +#import "AddressValPair.h" +#import "OSCManager.h" +#import "OSCZeroConfManager.h" +#import "OSCPacket.h" +#import "OSCBundle.h" +#import "OSCMessage.h" + diff --git a/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Resources b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Resources deleted file mode 120000 index 953ee36..0000000 --- a/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Resources +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Resources \ No newline at end of file diff --git a/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Resources/English.lproj/InfoPlist.strings b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Resources/English.lproj/InfoPlist.strings new file mode 100644 index 0000000000000000000000000000000000000000..dea12de4cad936a6204d4da70d2ca96aef900b31 GIT binary patch literal 92 zcmW-Z!3uyN5C!M#S9tbN-x2r|Q3;V~qzLu#)x*oq?lA28G2*azG7B@2orjH8u89{# bCX+-f2F*!V&^~bXzEEWk)pxI)ej3aVcM}l{ literal 0 HcmV?d00001 diff --git a/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Resources/Info.plist b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Resources/Info.plist new file mode 100644 index 0000000..5dfb179 --- /dev/null +++ b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Resources/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + VVOSC + CFBundleGetInfoString + 0.1.2 + CFBundleIdentifier + com.vidvox.VVOSC + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + VVOSC + CFBundlePackageType + FMWK + CFBundleSignature + ???? + CFBundleVersion + 0.1.2 + + diff --git a/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/VVOSC b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/VVOSC deleted file mode 120000 index c6a43b0..0000000 --- a/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/VVOSC +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/VVOSC \ No newline at end of file diff --git a/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/VVOSC b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/VVOSC new file mode 100755 index 0000000000000000000000000000000000000000..8f676a6e16e4de51bcf2be55c3b0e2d55287bf55 GIT binary patch literal 117044 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
)`uX&BRSkuOAqM`z-i22Y>l)sC-7|?t!Cg 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 S(Q{(#DY-1L_wRn!BmF-DtE12W delta 33304 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 D{{*Jx diff --git a/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current deleted file mode 120000 index 8c7e5a6..0000000 --- a/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current +++ /dev/null @@ -1 +0,0 @@ -A \ No newline at end of file diff --git a/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Headers/AddressValPair.h b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Headers/AddressValPair.h new file mode 100644 index 0000000..e8ab9ca --- /dev/null +++ b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Headers/AddressValPair.h @@ -0,0 +1,28 @@ +// +// AddressValPair.h +// VVOSC +// +// Created by bagheera on 12/11/08. +// Copyright 2008 __MyCompanyName__. All rights reserved. +// + +#if IPHONE +#import +#else +#import +#endif + + + +@interface AddressValPair : NSObject { + NSString *address; + id val; +} + ++ (id) createWithAddress:(NSString *)a val:(id)v; +- (id) initWithAddress:(NSString *)a val:(id)v; + +- (NSString *) address; +- (id) val; + +@end diff --git a/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Headers/OSCBundle.h b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Headers/OSCBundle.h new file mode 100644 index 0000000..712f13a --- /dev/null +++ b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Headers/OSCBundle.h @@ -0,0 +1,34 @@ +// +// OSCBundle.h +// OSC +// +// Created by bagheera on 9/20/08. +// Copyright 2008 __MyCompanyName__. All rights reserved. +// + +#if IPHONE +#import +#else +#import +#endif + +#import "OSCMessage.h" + + + + +@interface OSCBundle : NSObject { + NSMutableArray *elementArray; // array of messages or bundles +} + ++ (void) parseRawBuffer:(unsigned char *)b ofMaxLength:(int)l toInPort:(id)p; + ++ (id) create; + +- (void) addElement:(id)n; +- (void) addElementArray:(NSArray *)a; + +- (int) bufferLength; +- (void) writeToBuffer:(unsigned char *)b; + +@end diff --git a/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Headers/OSCInPort.h b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Headers/OSCInPort.h new file mode 100644 index 0000000..3f1fa83 --- /dev/null +++ b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Headers/OSCInPort.h @@ -0,0 +1,93 @@ +// +// OSCInPort.h +// OSC +// +// Created by bagheera on 9/20/08. +// Copyright 2008 __MyCompanyName__. All rights reserved. +// + +#if IPHONE +#import +#else +#import +#endif + + +//#import +//#import +#import + +#import +#import "AddressValPair.h" +#import "OSCPacket.h" +#import "OSCBundle.h" +#import "OSCMessage.h" + + +@protocol OSCInPortDelegateProtocol +- (void) oscMessageReceived:(NSDictionary *)d; +- (void) receivedOSCVal:(id)v forAddress:(NSString *)a; +@end + +@protocol OSCDelegateProtocol +- (void) oscMessageReceived:(NSDictionary *)d; +- (void) receivedOSCVal:(id)v forAddress:(NSString *)a; +@end + + +@interface OSCInPort : NSObject { + BOOL deleted; // whether or not i'm deleted- ensures that socket gets closed + BOOL bound; // whether or not the socket is bound + int sock; // socket file descriptor. remember, everything in unix is files! + struct sockaddr_in addr; // struct that describes *my* address (this is an in port) + unsigned short port; // the port number i'm receiving from + BOOL running; // whether or not i should keep running + BOOL busy; + unsigned char buf[8192]; // the socket gets data and dumps it here immediately + + pthread_mutex_t lock; + NSTimer *threadTimer; + int threadTimerCount; + NSAutoreleasePool *threadPool; + + NSString *portLabel; // the "name" of the port (added to distinguish multiple osc input ports for bonjour) + NSNetService *zeroConfDest; // bonjour service for publishing this input's address...only active if there's a portLabel! + + NSMutableDictionary *scratchDict; // key of dict is address port; object at key is a mut. array. coalesced messaging. + NSMutableArray *scratchArray; // array of AddressValPair objects. used for serial messaging. + id delegate; // my delegate gets notified of incoming messages +} + ++ (id) createWithPort:(unsigned short)p; ++ (id) createWithPort:(unsigned short)p labelled:(NSString *)n; +- (id) initWithPort:(unsigned short)p; +- (id) initWithPort:(unsigned short)p labelled:(NSString *)n; + +- (void) prepareToBeDeleted; + +- (NSDictionary *) createSnapshot; + +- (BOOL) createSocket; +- (void) start; +- (void) stop; +- (void) launchOSCLoop:(id)o; +- (void) OSCThreadProc:(NSTimer *)t; +- (void) parseRawBuffer:(unsigned char *)b ofMaxLength:(int)l; + +// if the delegate im +- (void) handleParsedScratchDict:(NSDictionary *)d; +- (void) handleScratchArray:(NSArray *)a; + +- (void) addValue:(id)val toAddressPath:(NSString *)p; + +- (unsigned short) port; +- (void) setPort:(unsigned short)n; +- (NSString *) portLabel; +- (void) setPortLabel:(NSString *)n; +- (NSNetService *) zeroConfDest; +- (BOOL) bound; + +- (id) delegate; +- (void) setDelegate:(id)n; + +@end diff --git a/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Headers/OSCManager.h b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Headers/OSCManager.h new file mode 100644 index 0000000..5673296 --- /dev/null +++ b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Headers/OSCManager.h @@ -0,0 +1,144 @@ +// +// OSCManager.h +// OSC +// +// Created by bagheera on 9/20/08. +// Copyright 2008 __MyCompanyName__. All rights reserved. +// + +#if IPHONE +#import +#else +#import +#endif + +#import "OSCZeroConfManager.h" +#import "OSCInPort.h" +#import "OSCOutPort.h" +#import + +/* + TOP-LEVEL OVERVIEW + + this osc manager class is all you need to add to your app. it has methods for + adding and removing ports. you can have as many osc managers as you like, but + you should really only need one instance. + + input ports have a delegate- delegate methods are called as the port receives data. + it's important to note that the delegate methods must be thread-safe: each input + port is running on its own (non-main) thread. + + data is sent via the output ports (convenience methods for doing this are built + into the osc manager). + + + + + GENERAL OSC STRUCTURE AND OVERVIEW + + this framework was written from the OSC spec found here: + http://opensoundcontrol.org/spec-1_0 + + - an OSC packet is the basic unit of transmitting OSC data. + - an OSC packet consists of: + - contents- contiguous block of binary data (either a bundle or a message), and then the + - size- number of 8-bit bytes that comprise 'contents'- ALWAYS multiple of 4! + - an OSC message consists of: + - an OSC address pattern (starting with '/'), followed by + - an OSC type tag string, followed by + - zero or more 'OSC arguments' + - an OSC bundle consists of: + - the OSC-string "#bundle", followed by + - an OSC time tag, followed by + - zero or more 'OSC bundle elements' + - an OSC bundle element consists of: + - 'size' (int32)- number of 8-bit bytes in the contents- ALWAYS multiple of 4! + - 'contents'- either another OSC bundle, or an OSC message + + + + + PORTS- SENDING AND RECEIVING UDP/TCP DATA + + some basic information, gleaned from: + http://beej.us/guide/bgnet/output/html/multipage/index.html + + struct sockaddr { + unsigned short sa_family; // address family, AF_xxx + char sa_data[14]; // 14 bytes of protocol address + } + struct sockaddr_in { + short int sin_family; // address family + unsigned short int sin_port; // port number + struct in_addr sin_addr; // internet address + unsigned char sin_zero[8]; // exists so sockaddr_in has same length as sockaddr + } + + recv(int sockfd, void *buf, int len, unsigned int flags); + - sockfd is the socket descriptor to read from + - buf is the buffer to read the information into + - len is the max length of the buffer + - flags can be set to 0 + recvfrom(int sockfd, void *buf, int len, unsigned int flags, struct sockaddr *from, int *fromlen); + - from is a pointer to a local struct sockaddr that will be filled with the IP & port of the originating machine + - fromlen is a pointer to a local int that should be initialized to a sizeof(struct sockaddr)- contains length of address actually stored in from on return + ...as well as the 4 params listed above in recv() + + int select(int numfds, fd_set *readrds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); +*/ + +@interface OSCManager : NSObject { + NSMutableArray *inPortArray; + NSMutableArray *outPortArray; + + pthread_rwlock_t inPortLock; + pthread_rwlock_t outPortLock; + + id delegate; + + OSCZeroConfManager *zeroConfManager; // bonjour/zero-configuration manager +} + +- (void) deleteAllInputs; +- (void) deleteAllOutputs; +// methods for creating input ports +- (OSCInPort *) createNewInputFromSnapshot:(NSDictionary *)s; +- (OSCInPort *) createNewInputForPort:(int)p withLabel:(NSString *)l; +- (OSCInPort *) createNewInputForPort:(int)p; +- (OSCInPort *) createNewInput; +// methods for creating output ports +- (OSCOutPort *) createNewOutputFromSnapshot:(NSDictionary *)s; +- (OSCOutPort *) createNewOutputToAddress:(NSString *)a atPort:(int)p withLabel:(NSString *)l; +- (OSCOutPort *) createNewOutputToAddress:(NSString *)a atPort:(int)p; +- (OSCOutPort *) createNewOutput; + +// typically, the manager is the input port's delegate- input ports tell delegates when they receive data +// this method is called and contains coalesced messages (grouped by address path) +- (void) oscMessageReceived:(NSDictionary *)d; +// this method is called every time any osc val is processed +- (void) receivedOSCVal:(id)v forAddress:(NSString *)a; + +// methods for working with ports +- (NSString *) getUniqueInputLabel; +- (NSString *) getUniqueOutputLabel; +- (OSCInPort *) findInputWithLabel:(NSString *)n; +- (OSCOutPort *) findOutputWithLabel:(NSString *)n; +- (OSCOutPort *) findOutputWithAddress:(NSString *)a andPort:(int)p; +- (OSCOutPort *) findOutputForIndex:(int)i; +- (OSCInPort *) findInputWithZeroConfName:(NSString *)n; +- (void) removeInput:(id)p; +- (void) removeOutput:(id)p; +- (NSArray *) outPortLabelArray; + +// subclassable methods for customizing +- (id) inPortClass; +- (NSString *) inPortLabelBase; +- (id) outPortClass; + +// misc +- (id) delegate; +- (void) setDelegate:(id)n; +- (NSMutableArray *) inPortArray; +- (NSMutableArray *) outPortArray; + +@end diff --git a/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Headers/OSCMessage.h b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Headers/OSCMessage.h new file mode 100644 index 0000000..e86444c --- /dev/null +++ b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Headers/OSCMessage.h @@ -0,0 +1,43 @@ +// +// OSCMessage.h +// OSC +// +// Created by bagheera on 9/20/08. +// Copyright 2008 __MyCompanyName__. All rights reserved. +// + +#if IPHONE +#import +#else +#import +#endif + +#import + + + +@interface OSCMessage : NSObject { + NSString *address; + NSMutableArray *typeArray; + NSMutableArray *argArray; + pthread_rwlock_t lock; +} + ++ (void) parseRawBuffer:(unsigned char *)b ofMaxLength:(int)l toInPort:(id)p; ++ (id) createMessageToAddress:(NSString *)a; +- (id) initWithAddress:(NSString *)a; + +- (void) addInt:(int)n; +- (void) addFloat:(float)n; +#if IPHONE +- (void) addColor:(UIColor *)c; +#else +- (void) addColor:(NSColor *)c; +#endif +- (void) addBOOL:(BOOL)n; +- (void) addString:(NSString *)n; + +- (int) bufferLength; +- (void) writeToBuffer:(unsigned char *)b; + +@end diff --git a/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Headers/OSCOutPort.h b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Headers/OSCOutPort.h new file mode 100644 index 0000000..859b046 --- /dev/null +++ b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Headers/OSCOutPort.h @@ -0,0 +1,58 @@ +// +// OSCOutPort.h +// OSC +// +// Created by bagheera on 9/20/08. +// Copyright 2008 __MyCompanyName__. All rights reserved. +// + +#if IPHONE +#import +#else +#import +#endif + + +#include + +#import "OSCPacket.h" +#import "OSCBundle.h" +#import "OSCMessage.h" + + + + +@interface OSCOutPort : NSObject { + BOOL deleted; + int sock; + struct sockaddr_in addr; + unsigned short port; + NSString *addressString; + NSString *portLabel; // used it to distinguish between multiple osc outputs +} + ++ (id) createWithAddress:(NSString *)a andPort:(unsigned short)p; ++ (id) createWithAddress:(NSString *)a andPort:(unsigned short)p labelled:(NSString *)l; +- (id) initWithAddress:(NSString *)a andPort:(unsigned short)p; +- (id) initWithAddress:(NSString *)a andPort:(unsigned short)p labelled:(NSString *)l; +- (void) prepareToBeDeleted; + +- (NSDictionary *) createSnapshot; + +- (BOOL) createSocket; + +- (void) sendThisBundle:(OSCBundle *)b; +- (void) sendThisMessage:(OSCMessage *)m; +- (void) sendThisPacket:(OSCPacket *)p; + +- (void) setAddressString:(NSString *)n; +- (void) setPort:(unsigned short)p; +- (void) setAddressString:(NSString *)n andPort:(unsigned short)p; + +- (NSString *) portLabel; +- (void) setPortLabel:(NSString *)n; + +- (unsigned short) port; +- (NSString *) addressString; + +@end diff --git a/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Headers/OSCPacket.h b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Headers/OSCPacket.h new file mode 100644 index 0000000..4d79674 --- /dev/null +++ b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Headers/OSCPacket.h @@ -0,0 +1,37 @@ +// +// OSCPacket.h +// OSC +// +// Created by bagheera on 9/20/08. +// Copyright 2008 __MyCompanyName__. All rights reserved. +// + +#if IPHONE +#import +#else +#import +#endif + +#include +#import "OSCBundle.h" +#import "OSCMessage.h" + +/* + this class requires a bundle or message on create/init. the buffer/msg + is NOT retained by this class in any way- it's used to immediately create + the buffer which will be sent. +*/ + +@interface OSCPacket : NSObject { + int bufferLength; + unsigned char *payload; +} + ++ (void) parseRawBuffer:(unsigned char *)b ofMaxLength:(int)l toInPort:(id)p; ++ (id) createWithContent:(id)c; +- (id) initWithContent:(id)c; + +- (int) bufferLength; +- (unsigned char *) payload; + +@end diff --git a/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Headers/OSCZeroConfDomain.h b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Headers/OSCZeroConfDomain.h new file mode 100644 index 0000000..22a94bc --- /dev/null +++ b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Headers/OSCZeroConfDomain.h @@ -0,0 +1,44 @@ +// +// OSCZeroConfDomain.h +// VVOSC +// +// Created by bagheera on 12/9/08. +// Copyright 2008 __MyCompanyName__. All rights reserved. +// + +#if IPHONE +#import +#else +#import +#endif + +#import +#import +#include + + + + +@interface OSCZeroConfDomain : NSObject { + NSString *domainString; + NSNetServiceBrowser *serviceBrowser; + + NSMutableArray *servicesArray; + pthread_rwlock_t servicesLock; + + id domainManager; +} + ++ (id) createWithDomain:(NSString *)d andDomainManager:(id)m; +- (id) initWithDomain:(NSString *)d andDomainManager:(id)m; + +// NSNetServiceBrowser delegate methods +- (void)netServiceBrowser:(NSNetServiceBrowser *)n didFindService:(NSNetService *)x moreComing:(BOOL)m; +- (void)netServiceBrowser:(NSNetServiceBrowser *)n didNotSearch:(NSDictionary *)err; +- (void)netServiceBrowser:(NSNetServiceBrowser *)n didRemoveService:(NSNetService *)s moreComing:(BOOL)m; + +// NSNetService delegate methods +- (void)netService:(NSNetService *)n didNotResolve:(NSDictionary *)err; +- (void)netServiceDidResolveAddress:(NSNetService *)n; + +@end diff --git a/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Headers/OSCZeroConfManager.h b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Headers/OSCZeroConfManager.h new file mode 100644 index 0000000..21ddd7f --- /dev/null +++ b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Headers/OSCZeroConfManager.h @@ -0,0 +1,39 @@ +// +// OSCZeroConfManager.h +// VVOSC +// +// Created by bagheera on 12/9/08. +// Copyright 2008 __MyCompanyName__. All rights reserved. +// + +#if IPHONE +#import +#else +#import +#endif + +#import "OSCZeroConfDomain.h" +#import + + + + +@interface OSCZeroConfManager : NSObject { + NSNetServiceBrowser *domainBrowser; + + NSMutableDictionary *domainDict; + pthread_rwlock_t domainLock; + + id oscManager; +} + +- (id) initWithOSCManager:(id)m; + +- (void) serviceRemoved:(NSNetService *)s; +- (void) serviceResolved:(NSNetService *)s; + +// NSNetServiceBrowser delegate methods +- (void)netServiceBrowser:(NSNetServiceBrowser *)n didFindDomain:(NSString *)d moreComing:(BOOL)m; +- (void)netServiceBrowser:(NSNetServiceBrowser *)n didNotSearch:(NSDictionary *)err; + +@end diff --git a/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Headers/VVOSC.h b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Headers/VVOSC.h new file mode 100644 index 0000000..0248ef1 --- /dev/null +++ b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Headers/VVOSC.h @@ -0,0 +1,9 @@ + + +#import "AddressValPair.h" +#import "OSCManager.h" +#import "OSCZeroConfManager.h" +#import "OSCPacket.h" +#import "OSCBundle.h" +#import "OSCMessage.h" + diff --git a/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Resources/English.lproj/InfoPlist.strings b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Resources/English.lproj/InfoPlist.strings new file mode 100644 index 0000000000000000000000000000000000000000..dea12de4cad936a6204d4da70d2ca96aef900b31 GIT binary patch literal 92 zcmW-Z!3uyN5C!M#S9tbN-x2r|Q3;V~qzLu#)x*oq?lA28G2*azG7B@2orjH8u89{# bCX+-f2F*!V&^~bXzEEWk)pxI)ej3aVcM}l{ literal 0 HcmV?d00001 diff --git a/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Resources/Info.plist b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Resources/Info.plist new file mode 100644 index 0000000..5dfb179 --- /dev/null +++ b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/Resources/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + VVOSC + CFBundleGetInfoString + 0.1.2 + CFBundleIdentifier + com.vidvox.VVOSC + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + VVOSC + CFBundlePackageType + FMWK + CFBundleSignature + ???? + CFBundleVersion + 0.1.2 + + diff --git a/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/VVOSC b/SuperCollider.tmbundle/Support/sc3ctrl/VVOSC.framework/Versions/Current/VVOSC new file mode 100755 index 0000000000000000000000000000000000000000..8f676a6e16e4de51bcf2be55c3b0e2d55287bf55 GIT binary patch literal 117044 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
)`uX&BRSkuOAqM`z-i22Y>l)sC-7|?t!Cg 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 b>L?|pMzj1$6E#wN+$`a-2NP