;
Κβ"Ic               @   sΆ   d  Z  d d l m Z d d l Z d d l Z d d d g Z d Z d Z d Z d Z d	   Z	 d
   Z
 d   Z d   Z d   Z d   Z d   Z e e d  Z e e d  Z d S(   u   Pseudo terminal utilities.i    (   u   selectNu   openptyu   forku   spawni   i   c           	   C   sP   y t  j   SWn t t f k
 o Yn Xt   \ }  } t |  } |  | f S(   ud   openpty() -> (master_fd, slave_fd)
    Open a pty master/slave pair, using os.openpty() if possible.(   u   osu   openptyu   AttributeErroru   OSErroru   _open_terminalu
   slave_open(   u	   master_fdu
   slave_nameu   slave_fd(    (    u    /mit/python/lib/python3.0/pty.pyu   openpty   s    c           	   C   s`   y t  j   \ }  } Wn t t f k
 o Yn( Xt  j |  } t  j |  |  | f St   S(   u   master_open() -> (master_fd, slave_name)
    Open a pty master and return the fd, and the filename of the slave end.
    Deprecated, use openpty() instead.(   u   osu   openptyu   AttributeErroru   OSErroru   ttynameu   closeu   _open_terminal(   u	   master_fdu   slave_fdu
   slave_name(    (    u    /mit/python/lib/python3.0/pty.pyu   master_open!   s    
c              C   s  y d d l  }  Wn t k
 o Yng Xy" |  j t j d d  \ } } Wn6 t k
 o* } z t j |   WYd d } ~ Xn X| | f Sxr d D]j } xa d D]Y } d | | } y t j | t j  } Wn t j k
 o w  Yn X| d | | f SWq Wt j d   d S(	   ul   Open pty master and return (master_fd, tty_name).
    SGI and generic BSD version, for when openpty() fails.i    NiΆ  u   pqrstuvwxyzPQRSTu   0123456789abcdefu   /dev/ptyu   /dev/ttyu   out of pty devices(   u   sgiu   ImportErroru   _getptyu   osu   O_RDWRu   IOErroru   erroru   open(   u   sgiu   tty_nameu	   master_fdu   msgu   xu   yu   pty_nameu   fd(    (    u    /mit/python/lib/python3.0/pty.pyu   _open_terminal1   s(    "#
  	c             C   s   t  j |  t  j  } y d d l m } m } Wn t k
 o | SYn Xy$ | | | d  | | | d  Wn t k
 o Yn X| S(   u©   slave_open(tty_name) -> slave_fd
    Open the pty slave and acquire the controlling terminal, returning
    opened filedescriptor.
    Deprecated, use openpty() instead.i    (   u   ioctlu   I_PUSHu   ptemu   ldterm(   u   osu   openu   O_RDWRu   fcntlu   ioctlu   I_PUSHu   ImportErroru   IOError(   u   tty_nameu   resultu   ioctlu   I_PUSH(    (    u    /mit/python/lib/python3.0/pty.pyu
   slave_openH   s    
c              C   sF  y t  j   \ }  } Wn t t f k
 o YnB X|  t k o) y t  j   Wqi t k
 o Yqi Xn |  | f St   \ } } t  j   }  |  t k o t  j   t  j |  t  j	 | t
  t  j	 | t  t  j	 | t  | t k o t  j |  n t  j t  j t  t  j  } t  j |  n t  j |  |  | f S(   ud   fork() -> (pid, master_fd)
    Fork and make the child a session leader with a controlling terminal.(   u   osu   forkptyu   AttributeErroru   OSErroru   CHILDu   setsidu   openptyu   forku   closeu   dup2u   STDIN_FILENOu   STDOUT_FILENOu   STDERR_FILENOu   openu   ttynameu   O_RDWR(   u   pidu   fdu	   master_fdu   slave_fdu   tmp_fd(    (    u    /mit/python/lib/python3.0/pty.pyu   forkZ   s0    


c             C   s5   x. | o& t  j |  |  } | | d  } q Wd S(   u#   Write all the data to a descriptor.N(   u   osu   write(   u   fdu   datau   n(    (    u    /mit/python/lib/python3.0/pty.pyu   _writen   s     c             C   s   t  j |  d  S(   u   Default read function.i   (   u   osu   read(   u   fd(    (    u    /mit/python/lib/python3.0/pty.pyu   _read   s    c             C   s   x{ t  |  t g g  g   \ } } } |  | k o  | |   } t j t |  n t | k o | t  } t |  |  q q d S(   u   Parent copy loop.
    Copies
            pty master -> standard output   (master_read)
            standard input -> pty master    (stdin_read)N(   u   selectu   STDIN_FILENOu   osu   writeu   STDOUT_FILENOu   _writen(   u	   master_fdu   master_readu
   stdin_readu   rfdsu   wfdsu   xfdsu   data(    (    u    /mit/python/lib/python3.0/pty.pyu   _copy   s    c             C   s  t  |   t  d  k o |  f }  n t   \ } } | t k o t j |  d |   n y& t j t  } t j t  d } Wn t j	 k
 o d } Yn Xy t
 | | |  Wn; t t f k
 o) | o t j t t j |  n Yn Xt j |  d S(   u   Create a spawned process.u    i    i   N(   u   typeu   forku   CHILDu   osu   execlpu   ttyu	   tcgetattru   STDIN_FILENOu   setrawu   erroru   _copyu   IOErroru   OSErroru	   tcsetattru	   TCSAFLUSHu   close(   u   argvu   master_readu
   stdin_readu   pidu	   master_fdu   modeu   restore(    (    u    /mit/python/lib/python3.0/pty.pyu   spawn   s"    
 (   u   __doc__u   selectu   osu   ttyu   __all__u   STDIN_FILENOu   STDOUT_FILENOu   STDERR_FILENOu   CHILDu   openptyu   master_openu   _open_terminalu
   slave_openu   forku   _writenu   _readu   _copyu   spawn(    (    (    u    /mit/python/lib/python3.0/pty.pyu   <module>   s"   					(		