???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................ó
Afc           @   sö  d  d l  Z  d  d l Z d  d l Z d  d l Z d Z d Z d Z d Z d Z d Z	 d Z
 d	 Z d
 Z d Z d Z d Z d Z d Z d Z i d d 6d d 6d d 6d d 6d d	 6d d
 6d d 6d d 6d d 6d d 6d d 6d d 6Z d Z d Z d   Z d    Z d!   Z d"   Z d#   Z d$   Z d%   Z d&   Z d'   Z d(   Z d)   Z  d*   Z! d+   Z" d,   Z# i	 e d 6e d 6e" d	 6e" d
 6e d 6e  d 6e! d 6e" d 6e# d 6Z$ d- d3 d.     YZ% d/ d4 d0     YZ& d1   Z' d2   Z( e(   d S(5   i’’’’Nt    s   gopher.micro.umn.eduiF   t   0t   1t   2t   3t   4t   5t   6t   7t   8t   9t   +t   ss   <TEXT>s   <DIR>s   <CSO>s   <ERROR>s   <BINHEX>s   <DOS>s
   <UUENCODE>s   <SEARCH>s   <TELNET>s   <BINARY>s   <REDUNDANT>s   <SOUND>s   
s   	c         C   sh   | s t  } n* t |  t d  k r9 t j |  } n  t j t j t j  } | j |  | f  | S(   NR    (   t   DEF_PORTt   typet   stringt   atoit   sockett   AF_INETt   SOCK_STREAMt   connect(   t   hostt   portR   (    (    s+   /usr/lib64/python2.7/Demo/sockets/gopher.pyt   open_socket)   s    	c         C   s:   t  | |  } | j |  t  | j d  | j d  S(   Ni   t   r(   R   t   sendt   CRLFt   shutdownt   makefile(   t   selectorR   R   R   (    (    s+   /usr/lib64/python2.7/Demo/sockets/gopher.pyt   send_request3   s    c         C   s)  t  |  | |  } g  } x | j   } | s6 d GHPn  | d t k rS | d  } n | d t k rp | d  } n  | d k r Pn  | s d GHq n  | d } t j | d t  } t |  d k  rÕ d	 | f GHq n  t |  d k rś d
 | d f GHn  | j d |  | j |  q W| j	   | S(   Ns   (Unexpected EOF from server)iž’’’i’’’’t   .s   (Empty line from server)i    i   i   s   (Bad line from server: %r)s   (Extra info from server: %r)(
   R   t   readlineR   R   t   splitfieldst   TABt   lent   insertt   appendt   close(   R   R   R   t   ft   listt   linet   typechart   parts(    (    s+   /usr/lib64/python2.7/Demo/sockets/gopher.pyt   get_menu:   s6    

c         C   s    g  } t  |  | | | j  | S(   N(   t   get_alt_textfileR%   (   R   R   R   R(   (    (    s+   /usr/lib64/python2.7/Demo/sockets/gopher.pyt   get_textfileX   s    c         C   s³   t  |  | |  } x | j   } | s0 d GHPn  | d t k rM | d  } n | d t k rj | d  } n  | d k rz Pn  | d  d k r | d } n  | |  q W| j   d  S(   Ns   (Unexpected EOF from server)iž’’’i’’’’R   i   s   ..i   (   R   R    R   R&   (   R   R   R   t   funcR'   R)   (    (    s+   /usr/lib64/python2.7/Demo/sockets/gopher.pyR-   ^   s     c         C   s,   t  |  | |  } | j   } | j   | S(   N(   R   t   readR&   (   R   R   R   R'   t   data(    (    s+   /usr/lib64/python2.7/Demo/sockets/gopher.pyt
   get_binaryq   s    
c         C   s@   t  |  | |  } x' | j |  } | s. Pn  | |  q Wd  S(   N(   R   R0   (   R   R   R   R/   t	   blocksizeR'   R1   (    (    s+   /usr/lib64/python2.7/Demo/sockets/gopher.pyt   get_alt_binaryx   s    c          G   sū   t  } t } t } t |   } | d k rA |  d rA |  d } n  | d k rd |  d rd |  d } n  | d k r |  d r |  d } n  | d k r t d  n  y t | | |  WnA t j k
 rį } d G| GHt j	 d  n t
 k
 rö d GHn Xd  S(   Ni    i   i   i   s   too many argss   Socket error:s
   
[Goodbye](   t   DEF_SELECTORt   DEF_HOSTR   R#   t   RuntimeErrort   browse_menuR   t   errort   syst   exitt   KeyboardInterrupt(   t   argsR   R   R   t   nt   msg(    (    s+   /usr/lib64/python2.7/Demo/sockets/gopher.pyt   browser   s&    	c         C   sž  t  |  | |  } xåd GHd Gt |   GHd G| Gd G| GHHx t t |   D]u } | | } | d | d } } t j t | d  d  d G| Gt j |  r° t | GHqN d	 t |  d
 GHqN WHx y t d  } Wn t	 k
 rš Hd  SX| sū d  Sy t j
 |  }	 Wn t j k
 r,d GHqĖ n Xd |	 k  oJt |  k n sZd GHqĖ n  PqĖ W| |	 d } | d } | d d !\ }
 } } t j |  rńt | } y | |
 | |  Wqöt t j f k
 rķd Gt j Gd Gt j GHqöXq d GHq Wd  S(   Ns   ----- MENU -----s	   Selector:s   Host:s    Port:i    i   i   t   :s   <TYPE=t   >s   Choice [CR == up a level]: s#   Choice must be a number; try again:s   Choice out of range; try again:i   i   s   ***s   Unsupported object type(   R,   t   reprt   rangeR#   R   t   rjustt   typenamet   has_keyt	   raw_inputt   EOFErrorR   t
   atoi_errort   typebrowsert   IOErrorR   R9   R:   t   exc_typet	   exc_value(   R   R   R   R(   t   it   itemR*   t   descriptiont   strt   choicet
   i_selectort   i_hostt   i_portt   browserfunc(    (    s+   /usr/lib64/python2.7/Demo/sockets/gopher.pyR8      sR    
""

c         C   sŪ   d  } y8 t j d d  } t |  } t |  | | | j  Wn t k
 r\ } d G| GHn X| rp | j   n  t   } | s d  St |  } y t |  | | | j  d GHWn t k
 rĢ } d G| GHn X| j   d  S(   Ns   ${PAGER-more}t   ws   IOError:s   Done.(	   t   Nonet   ost   popent	   SaveLinesR-   t   writelnRL   R&   t   open_savefile(   R   R   R   t   xt   pR?   R'   (    (    s+   /usr/lib64/python2.7/Demo/sockets/gopher.pyt   browse_textfileĒ   s&    		c         C   s   x d GHd Gt  |   GHd G| Gd G| GHHy t d  } Wn t k
 rN HPn Xt j |  } | sh Pn  d | k r d GHq n  t |  t | | |  q Wd  S(   Ns   ----- SEARCH -----s	   Selector:s   Host:s    Port:s   Query [CR == up a level]: s   	s"   Sorry, queries cannot contain tabs(   RC   RH   RI   R   t   stripR8   R"   (   R   R   R   t   query(    (    s+   /usr/lib64/python2.7/Demo/sockets/gopher.pyt   browse_searchŻ   s"    c         C   sp   |  r d Gt  |   GHn  t |  t d  k r? t  |  } n  t j d | d |  } | rl d G| GHn  d  S(   Ns	   Log in asR    s   set -x; exec telnet t    s   Exit status:(   RC   R   RZ   t   system(   R   R   R   t   sts(    (    s+   /usr/lib64/python2.7/Demo/sockets/gopher.pyt   browse_telnetń   s    c         C   sF   t    } | s d  St |  } t |  | | | j d  | j   d  S(   Ni   i   i    (   R^   t   SaveWithProgressR4   t   writeR&   (   R   R   R   R'   R_   (    (    s+   /usr/lib64/python2.7/Demo/sockets/gopher.pyt   browse_binaryū   s    	c         C   s   t  |  | |  d  S(   N(   Rk   (   R   R   R   (    (    s+   /usr/lib64/python2.7/Demo/sockets/gopher.pyt   browse_sound  s    R\   c           B   s#   e  Z d    Z d   Z d   Z RS(   c         C   s   | |  _  d  S(   N(   R'   (   t   selfR'   (    (    s+   /usr/lib64/python2.7/Demo/sockets/gopher.pyt   __init__  s    c         C   s   |  j  j | d  d  S(   Ns   
(   R'   Rj   (   Rm   R)   (    (    s+   /usr/lib64/python2.7/Demo/sockets/gopher.pyR]     s    c         C   s%   |  j  j   } | r! d G| GHn  d  S(   Ns   Exit status:(   R'   R&   (   Rm   Rg   (    (    s+   /usr/lib64/python2.7/Demo/sockets/gopher.pyR&     s    (   t   __name__t
   __module__Rn   R]   R&   (    (    (    s+   /usr/lib64/python2.7/Demo/sockets/gopher.pyR\     s   		Ri   c           B   s#   e  Z d    Z d   Z d   Z RS(   c         C   s   | |  _  d  S(   N(   R'   (   Rm   R'   (    (    s+   /usr/lib64/python2.7/Demo/sockets/gopher.pyRn     s    c         C   s1   t  j j d  t  j j   |  j j |  d  S(   Nt   #(   R:   t   stdoutRj   t   flushR'   (   Rm   R1   (    (    s+   /usr/lib64/python2.7/Demo/sockets/gopher.pyRj     s    c         C   s&   H|  j  j   } | r" d G| GHn  d  S(   Ns   Exit status:(   R'   R&   (   Rm   Rg   (    (    s+   /usr/lib64/python2.7/Demo/sockets/gopher.pyR&      s    (   Ro   Rp   Rn   Rj   R&   (    (    (    s+   /usr/lib64/python2.7/Demo/sockets/gopher.pyRi     s   		c          C   s2  y t  d  }  Wn t k
 r% Hd  SXt j |   }  |  s? d  S|  d d k r¹ t j |  d  } y t j | d  } Wn' t k
 r” } t |  Gd G| GHd  SXd Gt |  Gd GH| S|  d d	 k rŽ t j	 j
 |   }  n  y t |  d  } Wn' t k
 r} t |   Gd G| GHd  SXd
 Gt |   Gd GH| S(   Ns<   Save as file [CR == don't save; |pipeline or ~user/... OK]: i    t   |i   RX   RA   s   Piping throughs   ...t   ~s	   Saving to(   RH   RI   RY   R   Rb   RZ   R[   RL   RC   t   patht
   expandusert   open(   t   savefilet   cmdR`   R?   R'   (    (    s+   /usr/lib64/python2.7/Demo/sockets/gopher.pyR^   '  s6    c          C   s
  t  j d r" d GHt  j d  nä t  j d rW t t  j d t  j d t  j d  nÆ t  j d rŪ y- t j t  j d  }  d } t  j d } Wn4 t j k
 rĒ t  j d } t  j d } d }  n Xt | | |   n+ t  j d r’ t d t  j d  n t   d  S(   Ni   s(   usage: gopher [ [selector] host [port] ]i   i   i   R    (   R:   t   argvR;   R@   R   R   RJ   (   R   R   R   (    (    s+   /usr/lib64/python2.7/Demo/sockets/gopher.pyt   testE  s$    (
(    (    ()   R   R:   RZ   R   R5   R6   R   t
   T_TEXTFILEt   T_MENUt   T_CSOt   T_ERRORt   T_BINHEXt   T_DOSt
   T_UUENCODEt   T_SEARCHt   T_TELNETt   T_BINARYt   T_REDUNDANTt   T_SOUNDRF   R   R"   R   R   R,   R.   R-   R2   R4   R@   R8   Ra   Rd   Rh   Rk   Rl   RK   R\   Ri   R^   R|   (    (    (    s+   /usr/lib64/python2.7/Demo/sockets/gopher.pyt   <module>   s\   	
								.			
					