
ÝùnWc  ã               @   s™   d  Z  d d l Z d d l Z d d l Z d d d g Z Gd d „  d e ƒ Z d d d d „ Z d d d d	 d „ Z d
 d „  Z	 e
 d k r• e	 ƒ  d S)zƒImplementation 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   úI/afs/cs.wisc.edu/s/python-3.5.2/src/amd64_ubu16/../Python-3.5.2/Lib/uu.pyr   '   s   c             C   s°  g  } z‡|  d k r$ t  j j }  n€ t |  t ƒ r¤ | d k rQ t j j |  ƒ } | d k rˆ y t j |  ƒ j	 } Wn t
 k
 r‡ Yn Xt |  d ƒ }  | j |  ƒ | d k r¿ t  j j } n+ t | t ƒ rê t | d ƒ } | j | ƒ | d k rü d } | d k rd } | j d | d @| f j d ƒ ƒ |  j d	 ƒ } x; t | ƒ d
 k r~| j t j | ƒ ƒ |  j d	 ƒ } qDW| j d ƒ Wd x | D] } | j ƒ  q—WXd S)zUuencode fileú-NÚrbÚwbi¶  zbegin %o %s
iÿ  Úasciié-   r   s    
end
)ÚsysÚstdinÚbufferÚ
isinstanceÚstrÚosÚpathÚbasenameÚstatÚst_modeÚAttributeErrorÚopenÚappendÚstdoutÚwriter   ÚreadÚlenÚbinasciiZb2a_uuÚclose)Úin_fileÚout_fileÚnameÚmodeÚopened_filesÚdataÚfr   r   r	   r   *   s>    $Fc             C   sÒ  g  } |  d k r! t  j j }  n+ t |  t ƒ rL t |  d ƒ }  | j |  ƒ zcx“ |  j ƒ  } | sp t d ƒ ‚ | j	 d ƒ s‚ qR | j
 d d ƒ } t | ƒ d k rR | d d k rR y t | d	 d
 ƒ PWqR t k
 rà YqR XqR W| d k r/| d j d ƒ j d ƒ } t j j | ƒ r/t d | ƒ ‚ | d k rNt | d	 d
 ƒ } | d k rit  j j } n] t | t ƒ rÆt | d ƒ } y t j j | | ƒ Wn t k
 r²Yn X| } | j | ƒ |  j ƒ  } xÇ | r›| j d ƒ d k r›y t j | ƒ }	 Wny t j k
 r~}
 zV | d d d @d d d } t j | d | … ƒ }	 | slt  j j d |
 ƒ WYd d }
 ~
 Xn X| j |	 ƒ |  j ƒ  } qÕW| s®t d ƒ ‚ Wd x | D] } | j ƒ  q¹WXd 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   Z   sf    "	'c              C   s¼  d d l  }  |  j d d ƒ } | j d d d d d	 d
 d d d d ƒ| j d d d d d	 d d d d d ƒ| j ƒ  \ } } t | ƒ d k r¬ | j d ƒ t j d ƒ t j j	 } t j
 j	 } t | ƒ d k rà | d } t | ƒ d k rü | d } | j r`| j rPt | t ƒ r/t | d ƒ } n! t t j d d ƒ t j d ƒ t | | ƒ nX | j r«t | t ƒ rŠt | d ƒ } n! t t j d d ƒ t j d ƒ t | | ƒ d S)zuuencode/uudecode main programr   NÚusagez'usage: %prog [-d] [-t] [input [output]]z-dz--decodeÚdestr   ÚhelpzDecode (instead of encode)?ÚdefaultFÚactionÚ
store_truez-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   rG   r   r   r   ÚprintÚargvr   )rH   ÚparserÚoptionsÚargsÚinputÚoutputr   r   r	   Útest    s6    ((

			rS   Ú__main__)Ú__doc__r    r   r   Ú__all__Ú	Exceptionr   r   r   rS   r   r   r   r   r	   Ú<module>   s   0F&