3
eb                 @   sd   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Zdd	dZd
d Z	e
dkr`e	  dS )zImplementation of the UUencode and UUdecode functions.

encode(in_file, out_file [,name, mode])
decode(in_file [, out_file, mode])
    NErrorencodedecodec               @   s   e Zd ZdS )r   N)__name__
__module____qualname__ r   r   /usr/lib/python3.6/uu.pyr   '   s   c             C   s\  g }z6| dkrt jj} n`t| trz|dkr8tjj| }|dkrfytj| j	}W n t
k
rd   Y nX t| d} |j|  |dkrt jj}nt|trt|d}|j| |dkrd}|dkrd}|jdd}|jdd	}|jd
|d@ |f jd | jd}x.t|dkr.|jtj| | jd}qW |jd W dx|D ]}|j  qDW X dS )zUuencode file-Nrbwbi  
z\nz\rzbegin %o %s
i  ascii-   r   s    
end
)sysstdinbuffer
isinstancestrospathbasenamestatst_modeAttributeErroropenappendstdoutreplacewriter   readlenbinasciiZb2a_uuclose)in_fileout_filenamemodeopened_filesdatafr   r   r	   r   *   sB    









Fc             C   s:  g }| dkrt jj} nt| tr4t| d} |j|  zxr| j }|sNtd|j	dsZq:|j
dd}t|dkr:|d dkr:yt|d	 d
 P W q: tk
r   Y q:X q:W |dkr|d jdjd}tjj|rtd| |dkrt|d	 d
}|dkr
t jj}nNt|trXt|d}ytjj|| W n tk
rH   Y nX |}|j| | j }x|r|jddkrytj|}	W nj tjk
r }
 zJ|d d d@ d d d }tj|d| }	|st jjd|
  W Y dd}
~
X nX |j|	 | j }qbW |stdW dx|D ]}|j  q"W 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   readliner   
startswithsplitr"   int
ValueErrorrstripr   r   r   existsr   chmodr   stripr#   Za2b_uustderrr    r$   )r%   r&   r(   quietr)   ZhdrZ	hdrfieldsfpsr*   vnbytesr+   r   r   r	   r   a   sf    









"

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 |j \}}t|dkrl|jd tjd tjj	}tj
j	}t|dkr|d }t|dkr|d }|jr|jrt|trt|d}nttjd d tjd t|| nD|jr&t|trt|d}nttjd d tj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 argumentsr/   r   z: cannot do -t to stdoutr   z: cannot do -t from stdin)optparseZOptionParserZ
add_option
parse_argsr"   errorr   exitr   r   r   r   rI   r   r   r   printargvr   )rJ   parserZoptionsargsinputoutputr   r   r	   test   s6    




rT   __main__)NN)NNF)__doc__r#   r   r   __all__	Exceptionr   r   r   rT   r   r   r   r   r	   <module>   s   

7
F&