o
    IAf9                     @   s  	 d dl Z d dlZd dlZd dlZd dlZd dlZejdedd g d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ej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 )$    Nzthe binhex module is deprecated   )
stacklevel)binhexhexbinErrorc                   @   s   e Zd ZdS )r   N)__name__
__module____qualname__ r
   r
   /usr/lib/python3.10/binhex.pyr   %   s    r      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__6   s   
zFInfo.__init__N)r   r   r	   r   r
   r
   r
   r   r   5   s    r   c                 C   s   t  }t| d}|d}d|vrd|_|dd | }W d    n1 s*w   Y  tj	| \}}|
ddd}|||dfS )	Nrbi   r   ZTEXTr   :-r   )r   ioopenreadr   seektellospathsplitreplace)namefinfofpdataZdsizedirfiler
   r
   r   getfileinfo;   s   

r(   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
openrsrcc                 G      d S Nr
   r   argsr
   r
   r   r   I      zopenrsrc.__init__c                 G   s   dS N    r
   r,   r
   r
   r   r   L   r.   zopenrsrc.readc                 G   r*   r+   r
   r,   r
   r
   r   writeO   r.   zopenrsrc.writec                 C   r*   r+   r
   r   r
   r
   r   closeR   r.   zopenrsrc.closeN)r   r   r	   r   r   r1   r2   r
   r
   r
   r   r)   H   s
    r)   c                   c   sD    t   t ddt d V  W d    d S 1 sw   Y  d S )Nignore )warningscatch_warningsfilterwarningsDeprecationWarningr
   r
   r
   r   _ignore_deprecation_warningX   s
   
"r9   c                   @   .   e Zd Z	 dd Zdd Zdd Zdd Zd	S )
_Hqxcoderenginec                 C   s    || _ d| _d| _td | _d S )Nr0   r   )ofpr%   hqxdataLINELENlinelenr   r<   r
   r
   r   r   b   s   z_Hqxcoderengine.__init__c                 C   s   | j | | _ t| j }|d d }| j d | }| j |d  | _ |s$d S t  | jt| | _W d    n1 s;w   Y  | d d S )N   r   )r%   lenr9   r=   binasciib2a_hqx_flush)r   r%   ZdatalenZtodor
   r
   r   r1   h   s   
z_Hqxcoderengine.writec                 C   s   d}|t | j| j kr-|| j }| j| j|| d  t| _|}|t | j| j ks| j|d  | _|rB| j| jd  d S d S )Nr      s   :)rB   r=   r?   r<   r1   r>   )r   forcefirstZlastr
   r
   r   rE   t   s   
z_Hqxcoderengine._flushc                 C   s\   | j r t  | jt| j  | _W d    n1 sw   Y  | d | j  | `d S )Nr   )r%   r9   r=   rC   rD   rE   r<   r2   r   r
   r
   r   r2      s   

z_Hqxcoderengine.closeN)r   r   r	   r   r1   rE   r2   r
   r
   r
   r   r;   _   s    r;   c                   @   &   e Zd Z	 dd Zdd Zdd ZdS )_Rlecoderenginec                 C      || _ d| _d S r/   )r<   r%   r@   r
   r
   r   r         
z_Rlecoderengine.__init__c                 C   sf   | j | | _ t| j tk rd S t  t| j }W d    n1 s#w   Y  | j| d| _ d S r/   )r%   rB   REASONABLY_LARGEr9   rC   rlecode_hqxr<   r1   )r   r%   rledatar
   r
   r   r1      s   
z_Rlecoderengine.writec                 C   sV   | j r"t  t| j }W d    n1 sw   Y  | j| | j  | `d S r+   )r%   r9   rC   rN   r<   r1   r2   )r   rO   r
   r
   r   r2      s   
z_Rlecoderengine.closeN)r   r   r	   r   r1   r2   r
   r
   r
   r   rJ      s
    	rJ   c                   @   L   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|d}d}z*|d t|}	t|	| _d| _|d u r0t	 }|| _
|| _| || t| _W d S    |rK|   )NFwbTs0   (This file must be converted with BinHex 4.0):r   )
isinstancestrr   r   r1   r;   rJ   r<   crcr   dlenrlen
_writeinfo_DID_HEADERstater2   )
r   Zname_finfo_dlen_rlenr<   r"   r#   rV   rW   Zclose_on_errorZofnameZhqxerr
   r
   r   r      s*   


zBinHex.__init__c                 C   s   t |}|dkrtdt|g|d d }|j|j}}t|tr)|d}t|tr3|d}|| }t	d|j
}t	d| j| j}	|| | |	 }
| |
 |   d S )N?   zFilename too longzlatin-1    >hz>ii)rB   r   bytesencoder   r   rS   rT   structpackr   rV   rW   _write	_writecrc)r   r"   r#   nldtpZcrZd2Zd3Zd4infor
   r
   r   rX      s   




zBinHex._writeinfoc                 C   s    t || j| _| j| d S r+   )rC   crc_hqxrU   r<   r1   r   r%   r
   r
   r   rb      s   zBinHex._writec                 C   s4   | j dk rd}nd}| jt|| j  d| _ d S )Nr   r]   z>H)rU   r<   r1   r`   ra   )r   fmtr
   r
   r   rc      s
   

zBinHex._writecrcc                 C   s0   | j tkr	td| jt| | _| | d S )NzWriting data at the wrong time)rZ   rY   r   rV   rB   rb   ri   r
   r
   r   r1      s   
zBinHex.writec                 C   s,   | j dkrtd| jf |   t| _d S )Nr   zIncorrect data size, diff=%r)rV   r   rW   rc   	_DID_DATArZ   r   r
   r
   r   
close_data   s   

zBinHex.close_datac                 C   sB   | j tk r	|   | j tkrtd| jt| | _| | d S )Nz'Writing resource data at the wrong time)rZ   rk   rl   r   rW   rB   rb   ri   r
   r
   r   
write_rsrc   s   

zBinHex.write_rsrcc                 C   s   | j d u rd S z2| j tk r|   | j tkrtd| jdkr'td| jf |   W d | _ | j}| `|  d S d | _ | j}| `|  w )NzClose at the wrong timer   z$Incorrect resource-datasize, diff=%r)rZ   rk   rl   r   rW   rc   r<   r2   r@   r
   r
   r   r2      s$   





zBinHex.closeN)r   r   r	   r   rX   rb   rc   r1   rl   rm   r2   r
   r
   r
   r   rQ      s    
rQ   c                 C   s   	 t | }t||}t| d}	 |d}|sn|| q|  W d    n1 s.w   Y  t| d}	 |d}|sAn|| q9|	  |	  d S )Nr   T  )
r(   rQ   r   r   r   r1   rl   r)   rm   r2   )inpoutr#   r<   ifpre   r
   r
   r   r      s&   






r   c                   @   rI   )_Hqxdecoderenginec                 C   rK   )Nr   )rq   eofr   rq   r
   r
   r   r     rL   z_Hqxdecoderengine.__init__c                 C   s   	 d}|}|dkrm| j r|S |d d d }| j|}	 zt  t|\}| _ W d    n1 s4w   Y  W n tjyD   Y nw | jd}|sQtd|| }q|| }|t| }|si| j sitd|dks	|S )	Nr0   r   r   rA      Tr   zPremature EOF on binhex file)	rs   rq   r   r9   rC   Za2b_hqxZ
Incompleter   rB   )r   ZtotalwtdZdecdatawtdr%   Z
decdatacurnewdatar
   r
   r   r     s6   

z_Hqxdecoderengine.readc                 C      | j   d S r+   rq   r2   r   r
   r
   r   r2   :     z_Hqxdecoderengine.closeN)r   r   r	   r   r   r2   r
   r
   r
   r   rr     s
    !rr   c                   @   r:   )
_Rledecoderenginec                 C   s   || _ d| _d| _d| _d S )Nr0   r   )rq   
pre_bufferpost_bufferrs   rt   r
   r
   r   r   @  s   
z_Rledecoderengine.__init__c                 C   sD   |t | jkr| |t | j  | jd | }| j|d  | _|S r+   )rB   r}   _fill)r   rv   rvr
   r
   r   r   F  s
   z_Rledecoderengine.readc                 C   s@  | j | j|d  | _ | jjr2t  | jt| j  | _W d    n1 s(w   Y  d| _ d S t| j }| j dd  t	d t	 krI|d }n,| j dd  t	krW|d }n| j dd  t	d krg|d }n| j dd t	krqn|d	 }t  | jt| j d |  | _W d    n1 sw   Y  | j |d  | _ d S )
Nru   r0   r\   rA   r   r   )
r|   rq   r   rs   r9   r}   rC   Zrledecode_hqxrB   RUNCHAR)r   rv   Zmarkr
   r
   r   r~   M  s2   




z_Rledecoderengine._fillc                 C   rx   r+   ry   r   r
   r
   r   r2   r  rz   z_Rledecoderengine.closeN)r   r   r	   r   r   r~   r2   r
   r
   r
   r   r{   =  s    %r{   c                   @   rP   )HexBinc                 C   sh   t |trt|d}	 |d}|std|dkrq|dkr!nqt|}t|| _d| _	| 
  d S )Nr   Tr   zNo binhex data foundrF      :r   )rS   rT   r   r   r   r   rr   r{   rq   rU   _readheader)r   rq   ZchZhqxifpr
   r
   r   r   v  s   


zHexBin.__init__c                 C   s    | j |}t|| j| _|S r+   )rq   r   rC   rh   rU   )r   rB   r%   r
   r
   r   _read  s   zHexBin._readc                 C   sN   t d| jdd d@ }| jd@ | _|| jkr"td| j|f d| _d S )Nr]   r   r   i  zCRC error, computed %x, read %x)r`   unpackrq   r   rU   r   )r   Zfilecrcr
   r
   r   	_checkcrc  s   

zHexBin._checkcrcc                 C   s   |  d}|  t|}|  d}|   |dd }|dd }td|dd d }td|dd	 d | _td|d	d d | _|| _t | _|| j_	|| j_
|| j_t| _d S )
Nr         	   r]      r   z>l   )r   ordr   r`   r   rV   rW   FNamer   r   r   r   rY   rZ   )r   rB   ZfnameresttypeZcreatorflagsr
   r
   r   r     s   


zHexBin._readheaderc                 G   st   | j tkr	td|r|d }t|| j}n| j}d}t||k r2|| |t|  }t||k s!| j| | _|S )NzRead data at wrong timer   r0   )rZ   rY   r   minrV   rB   r   )r   nr   r
   r
   r   r     s   
zHexBin.readc                 C   s6   | j tkr	td| jr| | j}|   t| _ d S )Nzclose_data at wrong time)rZ   rY   r   rV   r   r   rk   r   Zdummyr
   r
   r   rl     s   

zHexBin.close_datac                 G   sZ   | j tkr	|   | j tkrtd|r|d }t|| j}n| j}| j| | _| |S )Nz Read resource data at wrong timer   )rZ   rY   rl   rk   r   r   rW   r   )r   r   r
   r
   r   	read_rsrc  s   


zHexBin.read_rsrcc                 C   sR   | j d u rd S z| jr| | j}|   W d | _ | j  d S d | _ | j  w r+   )rZ   rW   r   r   rq   r2   r   r
   r
   r   r2     s   

zHexBin.closeN)r   r   r	   r   r   r   r   r   rl   r   r2   r
   r
   r
   r   r   u  s    
r   c                 C   s   	 t | }|j}|s|j}t|d}	 |d}|sn|| qW d    n1 s-w   Y  |  |d}|rZt	|d}|| 	 |d}|sPn|| qH|
  |
  d S )NrR   Trn   )r   r   r   r   r   r   r1   rl   r   r)   r2   )ro   rp   rq   r#   r<   re   r
   r
   r   r     s2   






r   )rC   
contextlibr   r   r`   r5   warnr8   __all__	Exceptionr   rY   rk   rM   r>   r   r   r(   r)   contextmanagerr9   r;   rJ   rQ   r   rr   r{   r   r   r
   r
   r
   r   <module>   s<    
(^+8h