???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................
Yf6                 @   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/python35/lib64/python3.5/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  G } | j d  } d | k rB d | _ | j d d  | j   } Wd  QRXt 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  d  S)Nr   s   
s   :
)r1   r-   r/   r,   r)   r.   )r   ZforcefirstZlastr   r   r	   r4   c   s    !	
z_Hqxcoderengine._flushc             C   sI   |  j  r% |  j t j |  j   |  _ |  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   sB   |  j  r+ t j |  j   } |  j j |  |  j j   |  ` d  S)N)r"   r2   r9   r,   r)   r*   )r   r:   r   r   r	   r*      s
    	z_Rlecoderengine.closeN)r   r   r   r6   r   r)   r*   r   r   r   r	   r7   u   s   r7   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  rE | } t j | d  } d } yu | j d  t |  }	 t |	  |  _ d |  _ | d  k r t	   } | |  _
 | |  _ |  j | |  t |  _ Wn | r | j     Yn Xd  S)NFwbTs0   (This file must be converted with BinHex 4.0):r   )
isinstancestrr   r   r)   r+   r7   r,   crcr   dlenrlen
_writeinfo_DID_HEADERstater*   )
r   Zname_finfo_dlen_rlenr,   r   r    r@   rA   Zclose_on_errorZofnameZhqxerr   r   r	   r      s*    				
zBinHex.__init__c             C   s   t  |  } | d k r$ t d   t | g  | j d  d } | j | j } } t | t  ru | j d  } t | t  r | j d  } | | } 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   r@   rA   _write	_writecrc)r   r   r    nldtpZcrZd2Zd3Zd4infor   r   r	   rB      s     
zBinHex._writeinfoc             C   s,   t  j | |  j  |  _ |  j j |  d  S)N)r2   crc_hqxr?   r,   r)   )r   r"   r   r   r	   rJ      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)   rH   rI   )r   Zfmtr   r   r	   rK      s
    	zBinHex._writecrcc             C   sB   |  j  t k r t d   |  j t |  |  _ |  j |  d  S)NzWriting data at the wrong time)rD   rC   r   r@   r1   rJ   )r   r"   r   r   r	   r)      s    zBinHex.writec             C   s<   |  j  d k r% t d |  j f   |  j   t |  _ d  S)Nr   zIncorrect data size, diff=%r)r@   r   rA   rK   	_DID_DATArD   )r   r   r   r	   
close_data   s    
zBinHex.close_datac             C   s[   |  j  t k  r |  j   |  j  t k r4 t d   |  j t |  |  _ |  j |  d  S)Nz'Writing resource data at the wrong time)rD   rQ   rR   r   rA   r1   rJ   )r   r"   r   r   r	   
write_rsrc   s    
zBinHex.write_rsrcc             C   s   |  j  d  k r d  Szg |  j  t k  r/ |  j   |  j  t k rJ t d   |  j d k ro t d |  j f   |  j   Wd  d  |  _  |  j } |  ` | j   Xd  S)NzClose at the wrong timer   z$Incorrect resource-datasize, diff=%r)rD   rQ   rR   r   rA   rK   r,   r*   )r   r,   r   r   r	   r*      s    
		zBinHex.closeN)r   r   r   r   rB   rJ   rK   r)   rR   rS   r*   r   r   r   r	   r;      s   
r;   c          
   C   s   t  |   } t | |  } t j |  d  ; } x' | j d  } | sI P| j |  q3 W| j   Wd QRXt |  d  } x' | j d  } | s P| 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&   rS   r*   )inpoutr    r,   ifprM   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 |  } xg y t j |  \ } |  _  PWn t j k
 r Yn X|  j j d  } | s t d   | | } qO W| | } | t |  } | r |  j  r t d   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   r6   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 r/ |  j | t  |  j   |  j d  |  } |  j | d   |  _ | S)N)r1   r^   _fill)r   rZ   rvr   r   r	   r   1  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   Zmarkr   r   r	   r_   8  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   r6   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  } xA | j d  } | sE t d   | d k rT q$ | d k r$ Pq$ 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	   _readu  s    zHexBin._readc             C   sk   t  j d |  j j d   d d @} |  j d @|  _ | |  j k r^ t d |  j | f   d |  _ d  S)Nz>hr   r   i  zCRC error, computed %x, read %x)rH   unpackrV   r   r?   r   )r   Zfilecrcr   r   r	   	_checkcrcz  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      rk   rl   rm   rn   ro   )rh   ordrj   rH   ri   r@   rA   FNamer   r   r   r   rC   rD   )r   r1   ZfnameresttypeZcreatorflagsr   r   r	   rg     s    
 ##	zHexBin._readheaderc             G   s   |  j  t k r t d   | r@ | d } t | |  j  } n	 |  j } d } x3 t |  | k  r | |  j | t |   } qR W|  j | |  _ | S)NzRead data at wrong timer   r(   )rD   rC   r   minr@   r1   rh   )r   nr`   r   r   r	   r     s    
	!zHexBin.readc             C   sM   |  j  t k r t d   |  j r6 |  j |  j  } |  j   t |  _  d  S)Nzclose_data at wrong time)rD   rC   r   r@   rh   rj   rQ   )r   dummyr   r   r	   rR     s    	
zHexBin.close_datac             G   s   |  j  t k r |  j   |  j  t k r4 t d   | rY | d } t | |  j  } n	 |  j } |  j | |  _ |  j |  S)Nz Read resource data at wrong timer   )rD   rC   rR   rQ   r   ru   rA   rh   )r   rv   r   r   r	   	read_rsrc  s    

	zHexBin.read_rsrcc             C   sZ   |  j  d  k r d  Sz) |  j r1 |  j |  j  } |  j   Wd  d  |  _  |  j j   Xd  S)N)rD   rA   rx   rj   rV   r*   )r   rw   r   r   r	   r*     s    		zHexBin.closeN)r   r   r   r   rh   rj   rg   r   rR   rx   r*   r   r   r   r	   re   ^  s   
re   c          
   C   s   t  |   } | j } | s$ | j } t j | d  1 } x' | j d  } | sR P| j |  q< WWd QRX| j   | j d  } | r t	 | d  } | j |  x' | j d  } | s P| j |  q W| j
   | j
   d S)z6hexbin(infilename, outfilename) - Decode binhexed filer<   i  N)re   r   rq   r   r   r   r)   rR   rx   r&   r*   )rT   rU   rV   r    r,   rM   r   r   r	   r     s,    		 
 
)r6   r   r   rH   r2   __all__	Exceptionr   rC   rQ   r8   r.   rd   r   r%   r&   r+   r7   r;   r   rW   r\   re   r   r   r   r   r	   <module>   s,   &^*6h