Ńň
ßŮaKc           @   s#  d  d k  l Z l Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d	 d
 d  Z
 d   Z d   Z e d j od Ge d  GHd Ge	 d  GHd Ge d  GHd Ge	 d  GHd Z d e Gd Ge	 e  GHd Z d e Gd Ge	 e  GHd Z d e Gd Ge	 e  GHd Z d e Gd Ge	 e  GHd Z d e Gd Ge	 e  GHd Z d e Gd  Ge	 e  GHd! Z d e Gd" Ge	 e  GHd# Z d e Gd$ Ge	 e  GHd% Z d e Gd& Ge	 e  GHd' Z d e Gd( Ge	 e  GHd) Z d e Gd* Ge	 e  GHd+ Z d e Gd, Ge	 e  GHn d- S(.   i˙˙˙˙(   t   packt   unpackc         C   sH   d |  j o
 d j n p t  d |    n |  d ?d @|  d @f S(   s  
    Returns hi and lo bits in a byte as a tuple
    >>> getNibbles(142)
    (8, 14)
    
    Asserts byte value in byte range
    >>> getNibbles(256)
    Traceback (most recent call last):
        ...
    ValueError: Byte value out of range 0-255: 256
    i    i˙   s!   Byte value out of range 0-255: %si   i   (   t
   ValueError(   t   byte(    (    s`   C:\Documents and Settings\Samuel Benveniste\workspace\MINWiiV7\src\mxmMidi\DataTypeConverters.pyt
   getNibbles   s    c         C   sd   d |  j o
 d j n p d | j o
 d j n o t  d |  | f   n |  d >| S(   s  
    Returns byte with value set according to hi and lo bits
    Asserts hiNibble and loNibble in range(16)
    >>> setNibbles(8, 14)
    142
    
    >>> setNibbles(8, 16)
    Traceback (most recent call last):
        ...
    ValueError: Nible value out of range 0-15: (8, 16)
    i    i   s'   Nible value out of range 0-15: (%s, %s)i   (   R   (   t   hiNibblet   loNibble(    (    s`   C:\Documents and Settings\Samuel Benveniste\workspace\MINWiiV7\src\mxmMidi\DataTypeConverters.pyt
   setNibbles#   s    >c         C   s4   t  d h d d 6d d 6d d 6t |   |   d S(	   s   
    Reads string as big endian word, (asserts len(value) in [1,2,4])
    >>> readBew('aáâă')
    1642193635L
    >>> readBew('aá')
    25057
    s   >%st   Bi   t   Hi   t   Li   i    (   R   t   len(   t   value(    (    s`   C:\Documents and Settings\Samuel Benveniste\workspace\MINWiiV7\src\mxmMidi\DataTypeConverters.pyt   readBew5   s    c         C   s*   t  d h d d 6d d 6d d 6| |   S(   s  
    Write int as big endian formatted string, (asserts length in [1,2,4])
    Difficult to print the result in doctest, so I do a simple roundabout test.
    >>> readBew(writeBew(25057, 2))
    25057
    >>> readBew(writeBew(1642193635L, 4))
    1642193635L
    s   >%sR   i   R	   i   R
   i   (   R    (   R   t   length(    (    s`   C:\Documents and Settings\Samuel Benveniste\workspace\MINWiiV7\src\mxmMidi\DataTypeConverters.pyt   writeBew@   s    	c         C   sP   d } xC t  d t |   |   D]( } | d >| d @} d | @p Pq  q  W| S(   s=  
    Converts varlength format to integer. Just pass it 0 or more chars that
    might be a varlen and it will only use the relevant chars.
    use varLen(readVar(value)) to see how many bytes the integer value takes.
    asserts len(value) >= 0
    >>> readVar('@')
    64
    >>> readVar('áâăa')
    205042145
    i    s   %sBi   i   i   (   R   R   (   R   t   sumR   (    (    s`   C:\Documents and Settings\Samuel Benveniste\workspace\MINWiiV7\src\mxmMidi\DataTypeConverters.pyt   readVarU   s      	c         C   s>   |  d j o d S|  d j o d S|  d j o d Sd Sd S(	   s\   
    Returns the the number of bytes an integer will be when
    converted to varlength
    i   i   i˙?  i   i˙˙ i   i   N(    (   R   (    (    s`   C:\Documents and Settings\Samuel Benveniste\workspace\MINWiiV7\src\mxmMidi\DataTypeConverters.pyt   varLenh   s    c         C   sR   t  |  t |    } x0 t t |  d  D] } | | d B| | <q, Wt |  S(   s'   Converts an integer to varlength formati   i   (   t	   to_n_bitsR   t   rangeR   t	   fromBytes(   R   t   sevenst   i(    (    s`   C:\Documents and Settings\Samuel Benveniste\workspace\MINWiiV7\src\mxmMidi\DataTypeConverters.pyt   writeVarw   s
     i   i   c         C   sA   g  } t  |  D] } | |  | | ?d @q ~ } | i   | S(   s6   returns the integer value as a sequence of nbits bytesi   (   R   t   reverse(   R   R   t   nbitst   _[1]R   t   bytes(    (    s`   C:\Documents and Settings\Samuel Benveniste\workspace\MINWiiV7\src\mxmMidi\DataTypeConverters.pyR      s    3
c         C   s   t  d t |   |   S(   s)   Turns a string into a list of byte valuess   %sB(   R   R   (   R   (    (    s`   C:\Documents and Settings\Samuel Benveniste\workspace\MINWiiV7\src\mxmMidi\DataTypeConverters.pyt   toBytes   s    c         C   s#   |  p d St  d t |   |   S(   s#   Turns a list of bytes into a stringt    s   %sB(   R    R   (   R   (    (    s`   C:\Documents and Settings\Samuel Benveniste\workspace\MINWiiV7\src\mxmMidi\DataTypeConverters.pyR      s    t   __main__R   s   @R   i    s   áâăaiań8i    s   %08X -t   00i@   t   40i   t   7Fi   s   81 00s   C0 00i˙?  s   FF 7Fi @  s   81 80 00i   s   C0 80 00i˙˙ s   FF FF 7Fi    s   81 80 80 00i   s   C0 80 80 00i˙˙˙s   FF FF FF 7FN(   t   structR    R   R   R   R   R   R   R   R   R   R   R   t   __name__t   s1t   s2t   s3t   s4t   s5t   s6t   s7t   s8t   s9t   s10t   s11t   s12(    (    (    s`   C:\Documents and Settings\Samuel Benveniste\workspace\MINWiiV7\src\mxmMidi\DataTypeConverters.pyt   <module>   sN   									