Your IP : 3.135.200.168
3
� f�6�@s�dZddlZddlZddlZddlZdddgZGdd�de�ZdZdZ dZ
d Zd
ZGdd�d�Z
d
d�ZGdd�d�ZGdd�d�ZGdd�d�ZGdd�d�Zdd�ZGdd�d�ZGdd�d�ZGdd�d�Zdd�ZdS)z�Macintosh binhex compression/decompression.
easy interface:
binhex(inputfilename, outputfilename)
hexbin(inputfilename, outputfilename)
�N�binhex�hexbin�Errorc@seZdZdS)rN)�__name__�
__module__�__qualname__�rr�+/opt/alt/python36/lib64/python3.6/binhex.pyrs�i��@��c@seZdZdd�ZdS)�FInfocCsd|_d|_d|_dS)Nz????r)�Type�Creator�Flags)�selfrrr �__init__0szFInfo.__init__N)rrrrrrrr r
/sr
cCstt�}tj|d��2}|jd�}d|kr,d|_|jdd�|j�}WdQRXtjj |�\}}|j
ddd�}|||dfS) N�rbirZTEXT��:�-r
)r
�io�open�readr�seek�tell�os�path�split�replace)�name�finfo�fp�dataZdsize�dir�filerrr �getfileinfo5s
r&c@s,eZdZdd�Zdd�Zdd�Zdd�Zd S)
�openrsrccGsdS)Nr)r�argsrrr rCszopenrsrc.__init__cGsdS)N�r)rr(rrr rFsz
openrsrc.readcGsdS)Nr)rr(rrr �writeIszopenrsrc.writecCsdS)Nr)rrrr �closeLszopenrsrc.closeN)rrrrrr*r+rrrr r'Bsr'c@s0eZdZdZdd�Zdd�Zdd�Zdd �Zd
S)�_Hqxcoderenginez(Write data to the coder in 3-byte chunkscCs ||_d|_d|_td|_dS)Nr)r
)�ofpr#�hqxdata�LINELEN�linelen)rr-rrr rRsz_Hqxcoderengine.__init__cCsh|j||_t|j�}|dd}|jd|�}|j|d�|_|sHdS|jtj|�|_|jd�dS)N�r)r#�lenr.�binascii�b2a_hqx�_flush)rr#ZdatalenZtodorrr r*Xs
z_Hqxcoderengine.writecCsvd}xF|t|j�|jkrJ||j}|jj|j||�d�t|_|}qW|j|d�|_|rr|jj|jd�dS)Nr�
s:
)r2r.r0r-r*r/)rZforce�firstZlastrrr r5cs
z_Hqxcoderengine._flushcCs6|jr|jtj|j�|_|jd�|jj�|`dS)Nr
)r#r.r3r4r5r-r+)rrrr r+ns
z_Hqxcoderengine.closeN)rrr�__doc__rr*r5r+rrrr r,Os
r,c@s(eZdZdZdd�Zdd�Zdd�ZdS) �_Rlecoderenginez4Write data to the RLE-coder in suitably large chunkscCs||_d|_dS)Nr))r-r#)rr-rrr rxsz_Rlecoderengine.__init__cCs@|j||_t|j�tkrdStj|j�}|jj|�d|_dS)Nr))r#r2�REASONABLY_LARGEr3�rlecode_hqxr-r*)rr#�rledatarrr r*|sz_Rlecoderengine.writecCs0|jrtj|j�}|jj|�|jj�|`dS)N)r#r3r;r-r*r+)rr<rrr r+�s
z_Rlecoderengine.closeN)rrrr8rr*r+rrrr r9usr9c@sLeZdZdd�Zdd�Zdd�Zdd�Zd d
�Zdd�Zd
d�Z dd�Z
dS)�BinHexc
Cs�|\}}}}d}t|t�r.|}tj|d�}d}yR|jd�t|�} t| �|_d|_|dkr`t �}||_
||_|j||�t
|_Wn|r�|j��YnXdS)NF�wbTs0(This file must be converted with BinHex 4.0)
:r)�
isinstance�strrrr*r,r9r-�crcr
�dlen�rlen�
_writeinfo�_DID_HEADER�stater+)
rZname_finfo_dlen_rlenr-r r!rBrCZclose_on_errorZofnameZhqxerrrr r�s*
zBinHex.__init__cCs�t|�}|dkrtd��t|g�|jd�d}|j|j}}t|t�rR|jd�}t|t�rf|jd�}||}tj d|j
�}tj d|j|j�} |||| }
|j
|
�|j�dS)N�?zFilename too longzlatin-1�z>hz>ii)r2r�bytes�encoderrr?r@�struct�packrrBrC�_write� _writecrc)rr r!�nl�d�tpZcrZd2Zd3Zd4�inforrr rD�s
zBinHex._writeinfocCs tj||j�|_|jj|�dS)N)r3�crc_hqxrAr-r*)rr#rrr rM�sz
BinHex._writecCs4|jdkrd}nd}|jjtj||j��d|_dS)Nrz>hz>H)rAr-r*rKrL)rZfmtrrr rN�s
zBinHex._writecrccCs0|jtkrtd��|jt|�|_|j|�dS)NzWriting data at the wrong time)rFrErrBr2rM)rr#rrr r*�s
zBinHex.writecCs,|jdkrtd|jf��|j�t|_dS)NrzIncorrect data size, diff=%r)rBrrCrN� _DID_DATArF)rrrr �
close_data�s
zBinHex.close_datacCsB|jtkr|j�|jtkr$td��|jt|�|_|j|�dS)Nz'Writing resource data at the wrong time)rFrTrUrrCr2rM)rr#rrr �
write_rsrc�s
zBinHex.write_rsrccCsx|jdkrdSzJ|jtkr"|j�|jtkr4td��|jdkrNtd|jf��|j�Wdd|_|j}|`|j�XdS)NzClose at the wrong timerz$Incorrect resource-datasize, diff=%r)rFrTrUrrCrNr-r+)rr-rrr r+�s
zBinHex.closeN)rrrrrDrMrNr*rUrVr+rrrr r=�s
r=c
Cs�t|�}t||�}tj|d��.}x|jd�}|s2P|j|�q"W|j�WdQRXt|d�}x|jd�}|snP|j|�q^W|j �|j �dS)zEbinhex(infilename, outfilename): create binhex-encoded copy of a fileri�N)
r&r=rrrr*rUr'rVr+)�inp�outr!r-�ifprPrrr r�s"
c@s(eZdZdZdd�Zdd�Zdd�ZdS) �_Hqxdecoderenginez*Read data via the decoder in 4-byte chunkscCs||_d|_dS)Nr)rY�eof)rrYrrr rsz_Hqxdecoderengine.__init__cCs�d}|}x�|dkr�|jr|S|ddd}|jj|�}xRytj|�\}|_PWntjk
rfYnX|jjd�}|s�td��||}q:W||}|t|�}|r
|jr
td��q
W|S)z&Read at least wtd bytes (or until EOF)r)rrr1�r
zPremature EOF on binhex file)r[rYrr3Za2b_hqxZ
Incompleterr2)rZtotalwtdZdecdata�wtdr#Z
decdatacur�newdatarrr rs,
z_Hqxdecoderengine.readcCs|jj�dS)N)rYr+)rrrr r+%sz_Hqxdecoderengine.closeN)rrrr8rrr+rrrr rZ�s rZc@s0eZdZdZdd�Zdd�Zdd�Zdd �Zd
S)�_RledecoderenginezRead data via the RLE-codercCs||_d|_d|_d|_dS)Nr)r)rY�
pre_buffer�post_bufferr[)rrYrrr r+sz_Rledecoderengine.__init__cCsD|t|j�kr"|j|t|j��|jd|�}|j|d�|_|S)N)r2ra�_fill)rr]�rvrrr r1s
z_Rledecoderengine.readcCs�|j|jj|d�|_|jjr>|jtj|j�|_d|_dSt|j�}|jdd�tdtkrl|d}nX|jdd�tkr�|d}n<|jd d�tdkr�|d}n|jd
d�tkr�n|d}|jtj|jd|��|_|j|d�|_dS)Nr\r)r1rHr
r���������rfre) r`rYrr[rar3Z
rledecode_hqxr2�RUNCHAR)rr]Zmarkrrr rb8s&
z_Rledecoderengine._fillcCs|jj�dS)N)rYr+)rrrr r+[sz_Rledecoderengine.closeN)rrrr8rrrbr+rrrr r_(s
#r_c@sLeZdZdd�Zdd�Zdd�Zdd�Zd d
�Zdd�Zd
d�Z dd�Z
dS)�HexBincCsjt|t�rtj|d�}x.|jd�}|s.td��|dkr8q|dkrPqWt|�}t|�|_d|_ |j
�dS)Nrr
zNo binhex data found�
�:r)r?r@rrrrrZr_rYrA�_readheader)rrYZchZhqxifprrr r_s
zHexBin.__init__cCs |jj|�}tj||j�|_|S)N)rYrr3rSrA)rr2r#rrr �_readuszHexBin._readcCsNtjd|jjd��dd@}|jd@|_||jkrDtd|j|f��d|_dS)Nz>hrri��zCRC error, computed %x, read %x)rK�unpackrYrrAr)rZfilecrcrrr � _checkcrczs
zHexBin._checkcrccCs�|jd�}|jt|��}|jd�}|j�|dd�}|dd�}tjd|dd��d}tjd |dd
��d|_tjd |d
d��d|_||_t�|_||j_ ||j_
||j_t|_
dS)Nr
r\r�� z>h�rz>l��rorprqrrrs)rl�ordrnrKrmrBrC�FNamer
rrrrErF)rr2Zfname�rest�typeZcreator�flagsrrr rk�s
zHexBin._readheadercGsn|jtkrtd��|r,|d}t||j�}n|j}d}x&t|�|kr\||j|t|��}q8W|j||_|S)NzRead data at wrong timerr))rFrEr�minrBr2rl)r�nrcrrr r�s
zHexBin.readcCs6|jtkrtd��|jr$|j|j�}|j�t|_dS)Nzclose_data at wrong time)rFrErrBrlrnrT)r�dummyrrr rU�s
zHexBin.close_datacGsZ|jtkr|j�|jtkr$td��|r>|d}t||j�}n|j}|j||_|j|�S)Nz Read resource data at wrong timer)rFrErUrTrryrCrl)rrzrrr � read_rsrc�s
zHexBin.read_rsrccCsD|jdkrdSz|jr"|j|j�}|j�Wdd|_|jj�XdS)N)rFrCr|rnrYr+)rr{rrr r+�s
zHexBin.closeN)rrrrrlrnrkrrUr|r+rrrr rh^s
rhc
Cs�t|�}|j}|s|j}tj|d��&}x|jd�}|s8P|j|�q(WWdQRX|j�|jd�}|r�t |d�}|j|�x|jd�}|s�P|j|�q|W|j
�|j
�dS)z6hexbin(infilename, outfilename) - Decode binhexed filer>i�N)rhr
rurrrr*rUr|r'r+)rWrXrYr!r-rPrrr r�s,
)r8rrrKr3�__all__� ExceptionrrErTr:r/rgr
r&r'r,r9r=rrZr_rhrrrrr �<module>s,
&^*6h
?>