;ò
.‹Ú>c           @   s  d  k  Z  d  k Z d  k Z d  k Z d  k Z d „  Z d f  d „  ƒ  YZ d „  Z d „  Z d „  Z	 d „  Z
 d „  Z d	 „  Z d
 „  Z d „  Z d „  Z d f  d „  ƒ  YZ e d j oVe d ƒ He ƒ  Z e i d ƒ e i d ƒ e i d ƒ e i d ƒ e i d ƒ e e i ƒ  ƒ d GHe ƒ  Z e i d ƒ e i d ƒ e i d ƒ e i d ƒ e i d ƒ e i d ƒ e i d ƒ e i ƒ  Z e e ƒ d GHe Z x+ e d ƒ D] Z e e ƒ \ Z Z e GHq¶We e ƒ \ Z Z e GHe e ƒ \ Z Z e GHe	 e ƒ \ Z Z e GHe e ƒ e e ƒ GHe e i ƒ  ƒ GHd GHe ƒ  Z e i d  d! ƒ e i d! d! ƒ e i d" d! ƒ e i d# d! ƒ e i d$ d! ƒ e i d% d! ƒ e i d& ƒ e e i ƒ  ƒ e e i ƒ  ƒ GHd' „  Z d( GHe ƒ  Z e i  e d) ƒ e i! e i ƒ  ƒ e i d) ƒ e i! e i ƒ  ƒ e ƒ  Z" e" i d) ƒ e" i d* ƒ e" i d& ƒ e" i d+ ƒ e i! e" i ƒ  ƒ e ƒ  Z# e# i d  ƒ e# i d, ƒ e# i d- ƒ e# i d- ƒ e# i e" i ƒ  d! ƒ e# i e" i ƒ  d! ƒ e# i Z$ d. GHe i! e$ ƒ n d  S(/   Nc         C   s·   xk t  t |  ƒ ƒ D]W } t i i d t |  | ƒ ƒ | d d d j o t |  | d | d !ƒ GHq q Wt |  ƒ d d j o. t	 i
 d d ƒ Gt |  | d | d !ƒ GHn d S(	   s0   Useful utility; prints the string in hexadecimals   %2x i   i   i    i   s    i   N(   s   ranges   lens   bytess   is   syss   stdouts   writes   ords   reprs   strings   rjust(   s   bytess   i(    (    s*   /home/delire/devel/python/pyKit-OSC/OSC.pys   hexDump'   s      "s
   OSCMessagec           B   sk   t  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z e	 d „ Z
 d „  Z d	 „  Z d
 „  Z RS(   s   Builds typetagged OSC messages.c         C   s   d |  _ d |  _ d |  _ d  S(   Ns    s   ,(   s   selfs   addresss   typetagss   message(   s   self(    (    s*   /home/delire/devel/python/pyKit-OSC/OSC.pys   __init__4   s    		c         C   s   | |  _  d  S(   N(   s   addresss   self(   s   selfs   address(    (    s*   /home/delire/devel/python/pyKit-OSC/OSC.pys
   setAddress9   s    c         C   s   | |  _  d  S(   N(   s   messages   self(   s   selfs   message(    (    s*   /home/delire/devel/python/pyKit-OSC/OSC.pys
   setMessage<   s    c         C   s   | |  _  d  S(   N(   s   typetagss   self(   s   selfs   typetags(    (    s*   /home/delire/devel/python/pyKit-OSC/OSC.pys   setTypetags?   s    c         C   s   d |  _ |  i ƒ  d  S(   Ns    (   s   selfs   addresss	   clearData(   s   self(    (    s*   /home/delire/devel/python/pyKit-OSC/OSC.pys   clearB   s    	c         C   s   d |  _ d |  _ d  S(   Ns   ,s    (   s   selfs   typetagss   message(   s   self(    (    s*   /home/delire/devel/python/pyKit-OSC/OSC.pys	   clearDataF   s    	c         C   sR   | d j o t | ƒ } n t | ƒ } |  i | d |  _ |  i | d ƒ d S(   s´   Appends data to the message,
        updating the typetags based on
        the argument's type.
        If the argument is a blob (counted string)
        pass in 'b' as typehint.s   bi    i   N(   s   typehints   OSCBlobs   arguments   binarys   OSCArguments   selfs   typetagss	   rawAppend(   s   selfs   arguments   typehints   binary(    (    s*   /home/delire/devel/python/pyKit-OSC/OSC.pys   appendJ   s     c         C   s   |  i | |  _ d S(   s/   Appends raw data to the message.  Use append().N(   s   selfs   messages   data(   s   selfs   data(    (    s*   /home/delire/devel/python/pyKit-OSC/OSC.pys	   rawAppendY   s     c         C   s9   t  |  i ƒ d } t  |  i ƒ d } | | |  i Sd S(   s2   Returns the binary message (so far) with typetags.i   N(   s   OSCArguments   selfs   addresss   typetagss   message(   s   selfs   typetagss   address(    (    s*   /home/delire/devel/python/pyKit-OSC/OSC.pys	   getBinary]   s     c         C   s   |  i ƒ  Sd  S(   N(   s   selfs	   getBinary(   s   self(    (    s*   /home/delire/devel/python/pyKit-OSC/OSC.pys   __repr__c   s    (   s   __name__s
   __module__s   __doc__s   __init__s
   setAddresss
   setMessages   setTypetagss   clears	   clearDatas   Nones   appends	   rawAppends	   getBinarys   __repr__(    (    (    s*   /home/delire/devel/python/pyKit-OSC/OSC.pys
   OSCMessage2   s    								c         C   sL   t  i |  d ƒ } t t i | d d ƒ d ƒ } |  d | !|  | f Sd  S(   Ns    i   f4.0i   i    (   s   strings   finds   datas   lengths   ints   maths   ceils   nextData(   s   datas   lengths   nextData(    (    s*   /home/delire/devel/python/pyKit-OSC/OSC.pys
   readStringf   s    !c         C   s[   t  i d |  d d !ƒ d } t t i | d ƒ d ƒ d } |  d | d !|  | f Sd  S(   Ns   >ii    i   f4.0(   s   structs   unpacks   datas   lengths   ints   maths   ceils   nextData(   s   datas   lengths   nextData(    (    s*   /home/delire/devel/python/pyKit-OSC/OSC.pys   readBlobl   s    !c         C   sk   t  |  ƒ d j  o# d G|  Gt  |  ƒ GH|  } d } n( t i d |  d d !ƒ d } |  d } | | f Sd  S(   Ni   s   Error: too few bytes for inti    s   >i(   s   lens   datas   rests   integers   structs   unpack(   s   datas   integers   rest(    (    s*   /home/delire/devel/python/pyKit-OSC/OSC.pys   readIntr   s    

c         C   sK   t  i d |  d d !ƒ \ } } t | ƒ d >| } |  d } | | f Sd S(   sO   Tries to interpret the next 8 bytes of the data
    as a 64-bit signed integer.s   >lli    i   i    N(   s   structs   unpacks   datas   highs   lows   longs   bigs   rest(   s   datas   bigs   highs   lows   rest(    (    s*   /home/delire/devel/python/pyKit-OSC/OSC.pys   readLong   s
     
c         C   sk   t  |  ƒ d j  o# d G|  Gt  |  ƒ GH|  } d } n( t i d |  d d !ƒ d } |  d } | | f Sd  S(   Ni   s   Error: too few bytes for floati    s   >f(   s   lens   datas   rests   floats   structs   unpack(   s   datas   floats   rest(    (    s*   /home/delire/devel/python/pyKit-OSC/OSC.pys	   readFloat‰   s    

c         C   s   t  |  ƒ t  d ƒ j oL t |  ƒ } t i t |  ƒ d ƒ d } t i d | | |  ƒ } d } n d } d } | | f Sd S(   sI   Convert a string into an OSC Blob,
    returning a (typetag, data) tuple.s    f4.0i   s   >i%dss   bN(   s   types   nexts   lens   lengths   maths   ceils   paddeds   structs   packs   binarys   tag(   s   nexts   binarys   paddeds   lengths   tag(    (    s*   /home/delire/devel/python/pyKit-OSC/OSC.pys   OSCBlob•   s     
c         C   sÞ   t  |  ƒ t  d ƒ j oA t i t |  ƒ d d ƒ d } t i d | |  ƒ } d } nw t  |  ƒ t  d ƒ j o t i d |  ƒ } d	 } nB t  |  ƒ t  d
 ƒ j o t i d |  ƒ } d } n d } d } | | f Sd S(   si   Convert some Python types to their
    OSC binary representations, returning a
    (typetag, data) tuple.s    i   f4.0i   s   >%dss   sf42.5s   >fs   fi   s   >is   iN(
   s   types   nexts   maths   ceils   lens   OSCstringLengths   structs   packs   binarys   tag(   s   nexts   binarys   OSCstringLengths   tag(    (    s*   /home/delire/devel/python/pyKit-OSC/OSC.pys   OSCArgument¥   s     !


c         C   sŒ   g  } x{ |  D]s } | GH| i ƒ  } t } y9 t | ƒ } t i | d ƒ d j o t	 | ƒ } n Wn | } n X| i
 | ƒ q W| Sd S(   s}   Given a list of strings, produces a list
    where those strings have been parsed (where
    possible) as floats or integers.s   .iÿÿÿÿN(   s   parseds   argss   args   strips   Nones   interpretations   floats   strings   finds   ints   append(   s   argss   interpretations   args   parsed(    (    s*   /home/delire/devel/python/pyKit-OSC/OSC.pys	   parseArgs»   s       c   
      C   st  h  d t  <d t <d t <d t <} g  } t |  ƒ \ } } d } | d j o~ t
 | ƒ \ } } | i | ƒ | i | ƒ xä t | ƒ d j o7 t  | ƒ \ } } | i t | |  ƒ ƒ | | } q„ Wn– t | ƒ d j o‚ t | ƒ \ } } | i | ƒ | i | ƒ | d d j o< x> | d	 D]) } | | | ƒ \ }	 } | i |	 ƒ q.Wqhd
 GHn | d Sd S(   s3   Converts a typetagged OSC message to a Python list.s   is   fs   ss   bs    s   #bundlei    s   ,i   s   Oops, typetag lacks the magic ,i   N(   s   readInts	   readFloats
   readStrings   readBlobs   tables   decodeds   datas   addresss   rests   typetagss   readLongs   times   appends   lens   lengths	   decodeOSCs   tags   value(
   s   datas   decodeds   times   tags   rests   lengths   typetagss   addresss   tables   value(    (    s*   /home/delire/devel/python/pyKit-OSC/OSC.pys	   decodeOSCÑ   s2     *  	s   CallbackManagerc           B   s>   t  Z d  Z d „  Z e d „ Z d „  Z d „  Z d „  Z RS(   sÑ   This utility class maps OSC addresses to callables.

    The CallbackManager calls its callbacks with a list
    of decoded OSC arguments, including the address and
    the typetags as the first two arguments.c         C   s    h  |  _ |  i |  i d ƒ d  S(   Ns   #bundle(   s   selfs	   callbackss   adds	   unbundler(   s   self(    (    s*   /home/delire/devel/python/pyKit-OSC/OSC.pys   __init__÷   s    	c         C   s   t  | ƒ } |  i | ƒ d S(   sJ   Given OSC data, tries to call the callback with the
        right address.N(   s	   decodeOSCs   datas   decodeds   selfs   dispatch(   s   selfs   datas   sources   decoded(    (    s*   /home/delire/devel/python/pyKit-OSC/OSC.pys   handleû   s     c         C   si   y | d } |  i | | ƒ Wn? t j
 o } d GHn' t j
 o } d G| Gd G| GHn Xd Sd S(   s0   Sends decoded OSC data to an appropriate calbacki    s   foos   Exception ins
   callback :N(   s   messages   addresss   selfs	   callbackss   KeyErrors   es   None(   s   selfs   messages   es   address(    (    s*   /home/delire/devel/python/pyKit-OSC/OSC.pys   dispatch  s     
c         C   s,   | t j o |  i | =n | |  i | <d S(   so   Adds a callback to our set of callbacks,
        or removes the callback with name if callback
        is None.N(   s   callbacks   Nones   selfs	   callbackss   name(   s   selfs   callbacks   name(    (    s*   /home/delire/devel/python/pyKit-OSC/OSC.pys   add  s     c         C   s&   x | d D] } |  i | ƒ q Wd S(   s*   Dispatch the messages in a decoded bundle.i   N(   s   messagess   messages   selfs   dispatch(   s   selfs   messagess   message(    (    s*   /home/delire/devel/python/pyKit-OSC/OSC.pys	   unbundler  s      (	   s   __name__s
   __module__s   __doc__s   __init__s   Nones   handles   dispatchs   adds	   unbundler(    (    (    s*   /home/delire/devel/python/pyKit-OSC/OSC.pys   CallbackManagerð   s    				s   __main__s#   Welcome to the OSC testing program.s	   /foo/playi,   i   f4.5s   the white cliffs of dovers   Making and unmaking a message..s   Mary had a little lambs   its fleece was white as snows   and everywhere that Mary went,s   the lamb was sure to go.f14.5ipþÿÿs   Retrieving arguments...i   s   Testing Blob types.s    s   bs   bls   blos   blobs   blobsi*   c         C   sO   t  i i d ƒ x( |  D]  } t  i i t | ƒ d ƒ q Wt  i i d ƒ d  S(   Ns   Got: s    s   
(   s   syss   stdouts   writes   stuffs   is   str(   s   stuffs   i(    (    s*   /home/delire/devel/python/pyKit-OSC/OSC.pys   printingCallback[  s
     s   Testing the callback manager.s   /prints   Hey man, that's cool.f3.1415926000000001s   #bundlei    s(   sending a bundle to the callback manager(%   s   sockets   structs   maths   syss   strings   hexDumps
   OSCMessages
   readStrings   readBlobs   readInts   readLongs	   readFloats   OSCBlobs   OSCArguments	   parseArgss	   decodeOSCs   CallbackManagers   __name__s   messages
   setAddresss   appends	   getBinarys   stringss   raws   datas   ranges   is   texts   numbers   blobs   printingCallbacks   cs   adds   handles   print1s   bundles   bundlebinary(   s   hexDumps	   parseArgss   texts   numbers   raws   OSCArguments   messages   OSCBlobs   structs
   OSCMessages	   readFloats   readBlobs	   decodeOSCs   maths   blobs   print1s   strings   printingCallbacks   readInts   bundles   syss   datas
   readStrings   cs   sockets   CallbackManagers   is   readLongs   bundlebinarys   strings(    (    s*   /home/delire/devel/python/pyKit-OSC/OSC.pys   ?    s¬   						4				
					/
		
 	
						