???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................
e fh6                 @   s9  d  Z  d d l Z d d l Z d d l Z d d l Z d d d g Z Gd d   d e  Z d Z d Z	 d Z
 d	 Z d
 Z Gd d   d  Z d d   Z Gd d   d  Z Gd d   d  Z Gd d   d  Z Gd d   d  Z d d   Z Gd d   d  Z Gd d   d  Z Gd d   d  Z d d   Z d S)zMacintosh binhex compression/decompression.

easy interface:
binhex(inputfilename, outputfilename)
hexbin(inputfilename, outputfilename)
    NbinhexhexbinErrorc               @   s   e  Z d  Z d S)r   N)__name__
__module____qualname__ r   r   +/opt/alt/python34/lib64/python3.4/binhex.pyr      s      i   @   s   c               @   s   e  Z d  Z d d   Z d S)FInfoc             C   s   d |  _  d |  _ d |  _ d  S)Nz????r   )TypeCreatorFlags)selfr   r   r	   __init__0   s    		zFInfo.__init__N)r   r   r   r   r   r   r   r	   r   /   s   r   c          
   C   s   t    } t j |  d  J } | j d  } d | k rE d | _ n  | j d d  | j   } Wd  QXt j j	 |   \ } } | j
 d d d  } | | | d f S)	Nrbi   r   ZTEXT   :-r
   )r   ioopenreadr   seektellospathsplitreplace)namefinfofpdataZdsizedirfiler   r   r	   getfileinfo5   s    	r%   c               @   s@   e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 S)
openrsrcc             G   s   d  S)Nr   )r   argsr   r   r	   r   C   s    zopenrsrc.__init__c             G   s   d S)N    r   )r   r'   r   r   r	   r   F   s    zopenrsrc.readc             G   s   d  S)Nr   )r   r'   r   r   r	   writeI   s    zopenrsrc.writec             C   s   d  S)Nr   )r   r   r   r	   closeL   s    zopenrsrc.closeN)r   r   r   r   r   r)   r*   r   r   r   r	   r&   B   s   r&   c               @   sF   e  Z d  Z d Z d d   Z d d   Z d d   Z d d	   Z d
 S)_Hqxcoderenginez(Write data to the coder in 3-byte chunksc             C   s,   | |  _  d |  _ d |  _ t d |  _ d  S)Nr(   r
   )ofpr"   hqxdataLINELENlinelen)r   r,   r   r   r	   r   R   s    			z_Hqxcoderengine.__init__c             C   s   |  j  | |  _  t |  j   } | d d } |  j  d  |  } |  j  | d   |  _  | s` d  S|  j t j |  |  _ |  j d  d  S)N   r   )r"   lenr-   binasciib2a_hqx_flush)r   r"   ZdatalenZtodor   r   r	   r)   X   s    z_Hqxcoderengine.writec             C   s   d } x] | t  |  j  |  j k re | |  j } |  j j |  j | |  d  t |  _ | } q	 W|  j | d   |  _ | r |  j j |  j d  n  d  S)Nr   s   
s   :
)r1   r-   r/   r,   r)   r.   )r   Zforcefirstlastr   r   r	   r4   c   s    !	
z_Hqxcoderengine._flushc             C   sL   |  j  r( |  j t j |  j   |  _ n  |  j d  |  j j   |  ` d  S)Nr
   )r"   r-   r2   r3   r4   r,   r*   )r   r   r   r	   r*   n   s
    	z_Hqxcoderengine.closeN)r   r   r   __doc__r   r)   r4   r*   r   r   r   r	   r+   O   s
   r+   c               @   s:   e  Z d  Z d Z d d   Z d d   Z d d   Z d S)	_Rlecoderenginez4Write data to the RLE-coder in suitably large chunksc             C   s   | |  _  d |  _ d  S)Nr(   )r,   r"   )r   r,   r   r   r	   r   x   s    	z_Rlecoderengine.__init__c             C   sX   |  j  | |  _  t |  j   t k  r) d  St j |  j   } |  j j |  d |  _  d  S)Nr(   )r"   r1   REASONABLY_LARGEr2   rlecode_hqxr,   r)   )r   r"   rledatar   r   r	   r)   |   s    z_Rlecoderengine.writec             C   sE   |  j  r. t j |  j   } |  j j |  n  |  j j   |  ` d  S)N)r"   r2   r:   r,   r)   r*   )r   r;   r   r   r	   r*      s
    	z_Rlecoderengine.closeN)r   r   r   r7   r   r)   r*   r   r   r   r	   r8   u   s   r8   c               @   sp   e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z d d   Z d d   Z	 d d   Z
 d S)BinHexc       
   	   C   s   | \ } } } } d } t  | t  rH | } t j | d  } d } n  yx | j d  t |  }	 t |	  |  _ d |  _ | d  k r t	   } n  | |  _
 | |  _ |  j | |  t |  _ Wn | r | j   n    Yn Xd  S)NFwbTs0   (This file must be converted with BinHex 4.0):r   )
isinstancestrr   r   r)   r+   r8   r,   crcr   dlenrlen
_writeinfo_DID_HEADERstater*   )
r   Zname_finfo_dlen_rlenr,   r   r    rA   rB   Zclose_on_errorZofnameZhqxerr   r   r	   r      s*    				zBinHex.__init__c             C   s  t  |  } | d k r' t d   n  t | g  | j d  d } | j | j } } t | t  r{ | j d  } n  t | t  r | j d  } n  | | } t j	 d | j
  } t j	 d |  j |  j  }	 | | | |	 }
 |  j |
  |  j   d  S)N?   zFilename too longzlatin-1s    z>hz>ii)r1   r   bytesencoder   r   r>   r?   structpackr   rA   rB   _write	_writecrc)r   r   r    nldZtpZcrZd2Zd3Zd4infor   r   r	   rC      s     
zBinHex._writeinfoc             C   s,   t  j | |  j  |  _ |  j j |  d  S)N)r2   crc_hqxr@   r,   r)   )r   r"   r   r   r	   rK      s    zBinHex._writec             C   sJ   |  j  d k  r d } n d } |  j j t j | |  j    d |  _  d  S)Nr   z>hz>H)r@   r,   r)   rI   rJ   )r   Zfmtr   r   r	   rL      s
    	zBinHex._writecrcc             C   sE   |  j  t k r t d   n  |  j t |  |  _ |  j |  d  S)NzWriting data at the wrong time)rE   rD   r   rA   r1   rK   )r   r"   r   r   r	   r)      s    zBinHex.writec             C   s?   |  j  d k r( t d |  j f   n  |  j   t |  _ d  S)Nr   zIncorrect data size, diff=%r)rA   r   rB   rL   	_DID_DATArE   )r   r   r   r	   
close_data   s    
zBinHex.close_datac             C   sa   |  j  t k  r |  j   n  |  j  t k r: t d   n  |  j t |  |  _ |  j |  d  S)Nz'Writing resource data at the wrong time)rE   rQ   rR   r   rB   r1   rK   )r   r"   r   r   r	   
write_rsrc   s    zBinHex.write_rsrcc             C   s   |  j  d  k r d  Szp |  j  t k  r2 |  j   n  |  j  t k rP t d   n  |  j d k rx t d |  j f   n  |  j   Wd  d  |  _  |  j } |  ` | j   Xd  S)NzClose at the wrong timer   z$Incorrect resource-datasize, diff=%r)rE   rQ   rR   r   rB   rL   r,   r*   )r   r,   r   r   r	   r*      s    		zBinHex.closeN)r   r   r   r   rC   rK   rL   r)   rR   rS   r*   r   r   r   r	   r<      s   
r<   c             C   s   t  |   } t | |  } t j |  d  } x* | j d  } | sI Pn  | j |  q0 W| j   | j   t |  d  } x* | j d  } | s Pn  | j	 |  q W| j   | j   d S)zEbinhex(infilename, outfilename): create binhex-encoded copy of a filer   i  N)
r%   r<   r   r   r   r)   rR   r*   r&   rS   )inpoutr    r,   ifprN   r   r   r	   r      s$     

 
c               @   s:   e  Z d  Z d Z d d   Z d d   Z d d   Z d S)	_Hqxdecoderenginez*Read data via the decoder in 4-byte chunksc             C   s   | |  _  d |  _ d  S)Nr   )rV   eof)r   rV   r   r   r	   r     s    	z_Hqxdecoderengine.__init__c             C   s   d } | } x | d k r |  j  r( | S| d d d } |  j j |  } xj y t j |  \ } |  _  PWn t j k
 r Yn X|  j j d  } | s t d   n  | | } qO W| | } | t |  } | r |  j  r t d   q q W| S)z&Read at least wtd bytes (or until EOF)r(   r   r   r0      r
   zPremature EOF on binhex file)rX   rV   r   r2   Za2b_hqxZ
Incompleter   r1   )r   ZtotalwtdZdecdatawtdr"   Z
decdatacurnewdatar   r   r	   r     s,    	 
z_Hqxdecoderengine.readc             C   s   |  j  j   d  S)N)rV   r*   )r   r   r   r	   r*   &  s    z_Hqxdecoderengine.closeN)r   r   r   r7   r   r   r*   r   r   r   r	   rW      s    rW   c               @   sF   e  Z d  Z d Z d d   Z d d   Z d d   Z d d	   Z d
 S)_RledecoderenginezRead data via the RLE-coderc             C   s(   | |  _  d |  _ d |  _ d |  _ d  S)Nr(   r   )rV   
pre_bufferpost_bufferrX   )r   rV   r   r   r	   r   ,  s    			z_Rledecoderengine.__init__c             C   s_   | t  |  j  k r2 |  j | t  |  j   n  |  j d  |  } |  j | d   |  _ | S)N)r1   r^   _fill)r   rZ   rvr   r   r	   r   2  s
    z_Rledecoderengine.readc             C   sH  |  j  |  j j | d  |  _  |  j j rU |  j t j |  j   |  _ d |  _  d  St |  j   } |  j  d d   t d t k r | d } nv |  j  d d   t k r | d } nP |  j  d	 d   t d k r | d } n& |  j  d
 d  t k r n
 | d } |  j t j |  j  d  |   |  _ |  j  | d   |  _  d  S)NrY   r(   r0   s    r
   r   rc   rb   )	r]   rV   r   rX   r^   r2   Zrledecode_hqxr1   RUNCHAR)r   rZ   markr   r   r	   r_   9  s&     	!
 z_Rledecoderengine._fillc             C   s   |  j  j   d  S)N)rV   r*   )r   r   r   r	   r*   \  s    z_Rledecoderengine.closeN)r   r   r   r7   r   r   r_   r*   r   r   r   r	   r\   )  s
   #r\   c               @   sp   e  Z d  Z d d   Z d d   Z d d   Z d d   Z d	 d
   Z d d   Z d d   Z	 d d   Z
 d S)HexBinc             C   s   t  | t  r$ t j | d  } n  xJ | j d  } | sK t d   n  | d k r] q' n  | d k r' Pq' q' Wt |  } t |  |  _ d |  _	 |  j
   d  S)Nr   r
   zNo binhex data founds      :r   )r>   r?   r   r   r   r   rW   r\   rV   r@   _readheader)r   rV   ZchZhqxifpr   r   r	   r   `  s    	zHexBin.__init__c             C   s.   |  j  j |  } t j | |  j  |  _ | S)N)rV   r   r2   rP   r@   )r   r1   r"   r   r   r	   _readv  s    zHexBin._readc             C   sn   t  j d |  j j d   d d @} |  j d @|  _ | |  j k ra t d |  j | f   n  d |  _ d  S)Nz>hr   r   i  zCRC error, computed %x, read %x)rI   unpackrV   r   r@   r   )r   Zfilecrcr   r   r	   	_checkcrc{  s    &zHexBin._checkcrcc             C   s	  |  j  d  } |  j  t |   } |  j  d  } |  j   | d d  } | d d  } t j d | d d   d } t j d	 | d d
   d |  _ t j d	 | d
 d   d |  _ | |  _ t   |  _ | |  j _	 | |  j _
 | |  j _ t |  _ d  S)Nr
   rY   r      	   z>h   r   z>l      rl   rm   rn   ro   rp   )ri   ordrk   rI   rj   rA   rB   FNamer   r   r   r   rD   rE   )r   r1   ZfnameresttypeZcreatorflagsr   r   r	   rh     s    
 ##	zHexBin._readheaderc             G   s   |  j  t k r t d   n  | rC | d } t | |  j  } n	 |  j } d } x3 t |  | k  r | |  j | t |   } qU W|  j | |  _ | S)NzRead data at wrong timer   r(   )rE   rD   r   minrA   r1   ri   )r   nr`   r   r   r	   r     s    
	!zHexBin.readc             C   sS   |  j  t k r t d   n  |  j r< |  j |  j  } n  |  j   t |  _  d  S)Nzclose_data at wrong time)rE   rD   r   rA   ri   rk   rQ   )r   dummyr   r   r	   rR     s    	
zHexBin.close_datac             G   s   |  j  t k r |  j   n  |  j  t k r: t d   n  | r_ | d } t | |  j  } n	 |  j } |  j | |  _ |  j |  S)Nz Read resource data at wrong timer   )rE   rD   rR   rQ   r   rv   rB   ri   )r   rw   r   r   r	   	read_rsrc  s    
	zHexBin.read_rsrcc             C   s]   |  j  d  k r d  Sz, |  j r4 |  j |  j  } n  |  j   Wd  d  |  _  |  j j   Xd  S)N)rE   rB   ry   rk   rV   r*   )r   rx   r   r   r	   r*     s    		zHexBin.closeN)r   r   r   r   ri   rk   rh   r   rR   ry   r*   r   r   r   r	   rf   _  s   
rf   c             C   s   t  |   } | j } | s' | j } n  t j | d  } x* | j d  } | sU Pn  | j |  q< W| j   | j   | j	 d  } | r t
 | d  } | j |  x* | j	 d  } | s Pn  | j |  q W| j   n  | j   d S)z6hexbin(infilename, outfilename) - Decode binhexed filer=   i  N)rf   r   rr   r   r   r   r)   r*   rR   ry   r&   )rT   rU   rV   r    r,   rN   r   r   r	   r     s.    	 

 )r7   r   r   rI   r2   __all__	Exceptionr   rD   rQ   r9   r.   rd   r   r%   r&   r+   r8   r<   r   rW   r\   rf   r   r   r   r   r	   <module>   s,   &^*6h