U
    aúd-  ã                   @   sj   d 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ddœd	d„Zdd
d„Zdd„ Z	e
dkrfe	ƒ  dS )zImplementation of the UUencode and UUdecode functions.

encode(in_file, out_file [,name, mode], *, backtick=False)
decode(in_file [, out_file, mode, quiet])
é    NÚErrorÚencodeÚdecodec                   @   s   e Zd ZdS )r   N)Ú__name__Ú
__module__Ú__qualname__© r   r   ú/usr/lib/python3.8/uu.pyr   '   s   F©Úbacktickc             	   C   sj  g }zH| dkrtjj} n`t| tƒrz|dkr8tj | ¡}|dkrfzt 	| ¡j
}W n tk
rd   Y nX t| dƒ} | | ¡ |dkrŒtjj}nt|tƒrªt|dƒ}| |¡ |dkr¶d}|dkrÂd}| dd¡}| dd	¡}| d
|d@ |f  d¡¡ |  d¡}t|ƒdkr0| tj||d¡ |  d¡}q |rB| d¡ n
| d¡ W 5 |D ]}|  ¡  qTX dS )zUuencode fileú-NÚrbÚwbi¶  Ú
z\núz\rzbegin %o %s
iÿ  Úasciié-   r   r
   s   `
end
s    
end
)ÚcloseÚsysÚstdinÚbufferÚ
isinstanceÚstrÚosÚpathÚbasenameÚstatÚst_modeÚAttributeErrorÚopenÚappendÚstdoutÚreplaceÚwriter   ÚreadÚlenÚbinasciiZb2a_uu)Úin_fileÚout_fileÚnameÚmoder   Úopened_filesÚfÚdatar   r   r	   r   *   sF    








c              
   C   s  g }| dkrt jj} nt| tƒr4t| dƒ} | | ¡ zÀ|  ¡ }|sLt	dƒ‚| 
d¡sXq8| dd¡}t|ƒdkr8|d dkr8zt|d	 d
ƒ W qªW q8 tk
r¦   Y q8X q8|dkrÞ|d  d¡ d¡}tj |¡rÞt	d| ƒ‚|dkrôt|d	 d
ƒ}|dkrt jj}n0t|tƒr8t|dƒ}t ||¡ |}| |¡ |  ¡ }	|	ræ|	 d¡dkræzt |	¡}
W nj tj	k
rÎ } zH|	d d d@ d d d }t |	d|… ¡}
|s¾t j d| ¡ W 5 d}~X Y nX | |
¡ |  ¡ }	q@|	sôt	dƒ‚W 5 |D ]}| ¡  qüX dS )zDecode uuencoded filer   r   z'No valid begin line found in input files   beginó    é   é   r   é   é   Ns    	
r   z"Cannot overwrite existing file: %sr   s   endé    é?   é   é   zWarning: %s
zTruncated input file)r   r   r   r   r   r   r    r   Úreadliner   Ú
startswithÚsplitr%   ÚintÚ
ValueErrorÚrstripr   r   r   Úexistsr!   ÚchmodÚstripr&   Za2b_uuÚstderrr#   )r'   r(   r*   Úquietr+   r,   ZhdrZ	hdrfieldsÚfpÚsr-   ÚvÚnbytesr   r   r	   r   d   s^    








"
c                  C   s4  ddl } | jdd}|jddddd	d
d |jddddd	d
d | ¡ \}}t|ƒdkrl| d¡ t d¡ tjj	}tj
j	}t|ƒdkr|d }t|ƒdkr¤|d }|jrì|jràt|tƒrÆt|dƒ}nttjd dƒ t d¡ t||ƒ nD|jr&t|tƒrt|dƒ}nttjd dƒ t d¡ t||ƒ dS )zuuencode/uudecode main programr   Nz'usage: %prog [-d] [-t] [input [output]])Zusagez-dz--decoder   zDecode (instead of encode)?FÚ
store_true)ÚdestÚhelpÚdefaultÚactionz-tz--textÚtextz2data is text, encoded format unix-compatible text?r/   zincorrect number of argumentsr1   r   z: cannot do -t to stdoutr   z: cannot do -t from stdin)ÚoptparseZOptionParserZ
add_optionÚ
parse_argsr%   Úerrorr   Úexitr   r   r!   r   rK   r   r   r   ÚprintÚargvr   )rL   ÚparserZoptionsÚargsÚinputÚoutputr   r   r	   Útest§   s6    




rV   Ú__main__)NN)NNF)Ú__doc__r&   r   r   Ú__all__Ú	Exceptionr   r   r   rV   r   r   r   r   r	   Ú<module>   s   
:
C&