
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3

  \‚6  ã               @   sÞ   d Z ddlZddlZddlZddlZdddgZG dd„ deƒZdZdZ	dZ
d	Zd
ZG dd„ dƒZdd„ ZG dd„ dƒZG dd„ dƒZG dd„ dƒZG dd„ dƒZdd„ ZG dd„ dƒZG dd„ dƒZG dd„ dƒZdd„ ZdS )z‰Macintosh 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   ú/usr/lib64/python3.6/binhex.pyr      s   é   i €  é@   ó   �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   st   t ƒ }tj| dƒ�2}|jdƒ}d|kr,d|_|jddƒ |jƒ }W d Q R X t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               @   s0   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   sh   | j | | _ t| j ƒ}|d d }| j d |… }| j |d … | _ |sHd 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   sv   d}xF|t | jƒ| j krJ|| j }| jj| j||… d ƒ t| _|}qW | j|d … | _|rr| jj| jd ƒ d S )Nr   ó   
s   :
)r2   r.   r0   r-   r*   r/   )r   ZforceÚfirstZlastr   r   r	   r5   c   s    
z_Hqxcoderengine._flushc             C   s6   | j r| jtj| j ƒ | _| jdƒ | jjƒ  | `d S )Nr
   )r#   r.   r3   r4   r5   r-   r+   )r   r   r   r	   r+   n   s
    

z_Hqxcoderengine.closeN)r   r   r   Ú__doc__r   r*   r5   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   s@   | j | | _ t| j ƒtk rd S tj| j ƒ}| jj|ƒ d| _ d S )Nr)   )r#   r2   ÚREASONABLY_LARGEr3   Úrlecode_hqxr-   r*   )r   r#   Úrledatar   r   r	   r*   |   s    z_Rlecoderengine.writec             C   s0   | j rtj| j ƒ}| jj|ƒ | jjƒ  | `d S )N)r#   r3   r;   r-   r*   r+   )r   r<   r   r   r	   r+   „   s
    
z_Rlecoderengine.closeN)r   r   r   r8   r   r*   r+   r   r   r   r	   r9   u   s   r9   c               @   sL   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ƒr.|}tj|dƒ}d}yR|jdƒ t|ƒ}	t|	ƒ| _d| _|d kr`t	ƒ }|| _
|| _| j||ƒ t| _W n   |r”|jƒ  ‚ Y nX d S )NFÚwbTs0   (This file must be converted with BinHex 4.0):r   )Ú
isinstanceÚstrr   r   r*   r,   r9   r-   Úcrcr   ÚdlenÚrlenÚ
_writeinfoÚ_DID_HEADERÚstater+   )
r   Zname_finfo_dlen_rlenr-   r    r!   rB   rC   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ƒrR|jdƒ}t|tƒrf|jdƒ}|| }tj	d|j
ƒ}tj	d| j| jƒ}	|| | |	 }
| j|
ƒ | jƒ  d S )Né?   zFilename too longzlatin-1ó    z>hz>ii)r2   r   ÚbytesÚencoder   r   r?   r@   ÚstructÚpackr   rB   rC   Ú_writeÚ	_writecrc)r   r    r!   ÚnlÚdÚtpZcrZd2Zd3Zd4Úinfor   r   r	   rD   £   s    




zBinHex._writeinfoc             C   s    t j|| jƒ| _| jj|ƒ d S )N)r3   Úcrc_hqxrA   r-   r*   )r   r#   r   r   r	   rM   ¶   s    zBinHex._writec             C   s4   | j dk rd}nd}| jjtj|| j ƒƒ d| _ d S )Nr   z>hz>H)rA   r-   r*   rK   rL   )r   Zfmtr   r   r	   rN   º   s
    
zBinHex._writecrcc             C   s0   | j tkrtdƒ‚| jt|ƒ | _| j|ƒ d S )NzWriting data at the wrong time)rF   rE   r   rB   r2   rM   )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)rB   r   rC   rN   Ú	_DID_DATArF   )r   r   r   r	   Ú
close_dataÊ   s    
zBinHex.close_datac             C   sB   | j tk r| jƒ  | j tkr$tdƒ‚| jt|ƒ | _| j|ƒ d S )Nz'Writing resource data at the wrong time)rF   rT   rU   r   rC   r2   rM   )r   r#   r   r   r	   Ú
write_rsrcÐ   s    

zBinHex.write_rsrcc             C   sx   | j d krd S zJ| j tk r"| jƒ  | j tkr4tdƒ‚| jdkrNtd| jf ƒ‚| jƒ  W d d | _ | j}| `|jƒ  X d S )NzClose at the wrong timer   z$Incorrect resource-datasize, diff=%r)rF   rT   rU   r   rC   rN   r-   r+   )r   r-   r   r   r	   r+   Ø   s    



zBinHex.closeN)r   r   r   r   rD   rM   rN   r*   rU   rV   r+   r   r   r   r	   r=   ‹   s   
r=   c          
   C   s�   t | ƒ}t||ƒ}tj| dƒ�.}x|jdƒ}|s2P |j|ƒ q"W |jƒ  W dQ R X t| dƒ}x|jdƒ}|snP |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*   rU   r'   rV   r+   )ÚinpÚoutr!   r-   ÚifprP   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   )rY   Úeof)r   rY   r   r   r	   r     s    z_Hqxdecoderengine.__init__c             C   s¾   d}|}x°|dkr¸| j r|S |d d d }| jj|ƒ}xRytj|ƒ\}| _ P W n tjk
rf   Y nX | jjdƒ}|s€tdƒ‚|| }q:W || }|t|ƒ }| r
| j  r
tdƒ‚q
W |S )z&Read at least wtd bytes (or until EOF)r)   r   r   r1   é   r
   zPremature EOF on binhex file)r[   rY   r   r3   Za2b_hqxZ
Incompleter   r2   )r   ZtotalwtdZdecdataÚwtdr#   Z
decdatacurÚnewdatar   r   r	   r     s,    
 z_Hqxdecoderengine.readc             C   s   | j jƒ  d S )N)rY   r+   )r   r   r   r	   r+   %  s    z_Hqxdecoderengine.closeN)r   r   r   r8   r   r   r+   r   r   r   r	   rZ   þ   s    rZ   c               @   s0   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   )rY   Ú
pre_bufferÚpost_bufferr[   )r   rY   r   r   r	   r   +  s    z_Rledecoderengine.__init__c             C   sD   |t | jƒkr"| j|t | jƒ ƒ | jd |… }| j|d … | _|S )N)r2   ra   Ú_fill)r   r]   Úrvr   r   r	   r   1  s
    z_Rledecoderengine.readc             C   sô   | j | jj|d ƒ | _ | jjr>| jtj| j ƒ | _d| _ d S t| j ƒ}| j dd … td t krl|d }nX| j dd … tkrˆ|d }n<| 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 )Nr\   r)   r1   rH   r
   r   éýÿÿÿéÿÿÿÿéþÿÿÿrf   re   )	r`   rY   r   r[   ra   r3   Zrledecode_hqxr2   ÚRUNCHAR)r   r]   Zmarkr   r   r	   rb   8  s&    



z_Rledecoderengine._fillc             C   s   | j jƒ  d S )N)rY   r+   )r   r   r   r	   r+   [  s    z_Rledecoderengine.closeN)r   r   r   r8   r   r   rb   r+   r   r   r   r	   r_   (  s
   #r_   c               @   sL   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   sj   t |tƒrtj|dƒ}x.|jdƒ}|s.tdƒ‚|dkr8q|dkrP qW t|ƒ}t|ƒ| _d| _	| j
ƒ  d S )Nr   r
   zNo binhex data foundó   ó   :r   )r?   r@   r   r   r   r   rZ   r_   rY   rA   Ú_readheader)r   rY   ZchZhqxifpr   r   r	   r   _  s    


zHexBin.__init__c             C   s    | j j|ƒ}tj|| jƒ| _|S )N)rY   r   r3   rS   rA   )r   r2   r#   r   r   r	   Ú_readu  s    zHexBin._readc             C   sN   t jd| jjdƒƒd d@ }| jd@ | _|| jkrDtd| j|f ƒ‚d| _d S )Nz>hr   r   iÿÿ  zCRC error, computed %x, read %x)rK   ÚunpackrY   r   rA   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
   r\   r   é   é	   z>hé   r   z>lé   é   ro   rp   rq   rr   rs   )rl   Úordrn   rK   rm   rB   rC   ÚFNamer   r   r   r   rE   rF   )r   r2   ZfnameÚrestÚtypeZcreatorÚflagsr   r   r	   rk   „  s    

zHexBin._readheaderc             G   sn   | j tkrtdƒ‚|r,|d }t|| jƒ}n| j}d}x&t|ƒ|k r\|| j|t|ƒ ƒ }q8W | j| | _|S )NzRead data at wrong timer   r)   )rF   rE   r   ÚminrB   r2   rl   )r   Únrc   r   r   r	   r   ˜  s    
zHexBin.readc             C   s6   | j tkrtdƒ‚| jr$| j| jƒ}| jƒ  t| _ d S )Nzclose_data at wrong time)rF   rE   r   rB   rl   rn   rT   )r   Údummyr   r   r	   rU   ¦  s    
zHexBin.close_datac             G   sZ   | j tkr| jƒ  | j tkr$tdƒ‚|r>|d }t|| jƒ}n| j}| j| | _| j|ƒS )Nz Read resource data at wrong timer   )rF   rE   rU   rT   r   ry   rC   rl   )r   rz   r   r   r	   Ú	read_rsrc®  s    

zHexBin.read_rsrcc             C   sD   | j d krd S z| jr"| j| jƒ}| jƒ  W d d | _ | jjƒ  X d S )N)rF   rC   r|   rn   rY   r+   )r   r{   r   r   r	   r+   »  s    
zHexBin.closeN)r   r   r   r   rl   rn   rk   r   rU   r|   r+   r   r   r   r	   rh   ^  s   
rh   c          
   C   s®   t | ƒ}|j}|s|j}tj|dƒ�&}x|jdƒ}|s8P |j|ƒ q(W W dQ R X |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)rh   r   ru   r   r   r   r*   rU   r|   r'   r+   )rW   rX   rY   r!   r-   rP   r   r   r	   r   Æ  s,    
 



 )r8   r   r   rK   r3   Ú__all__Ú	Exceptionr   rE   rT   r:   r/   rg   r   r&   r'   r,   r9   r=   r   rZ   r_   rh   r   r   r   r   r	   Ú<module>   s,   
&^*6h