
    h]                         d Z ddlmZ ddlZddlZddlZddlmZmZ ddlmZmZm	Z	 g d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fdZeefdZdS )zPseudo terminal utilities.    )selectN)closewaitpid)setraw	tcgetattr	tcsetattr)openptyforkspawn      c                      	 t          j                    S # t          t          f$ r Y nw xY wt	                      \  } }t          |          }| |fS )zdopenpty() -> (master_fd, slave_fd)
    Open a pty master/slave pair, using os.openpty() if possible.)osr	   AttributeErrorOSError_open_terminal
slave_open)	master_fd
slave_nameslave_fds      /usr/lib/python3.11/pty.pyr	   r	      s`    z||G$   *,,Iz*%%Hhs    ))c                      	 t          j                    \  } }t          j        |          }t          j        |           | |fS # t          t
          f$ r Y nw xY wt                      S )zmaster_open() -> (master_fd, slave_name)
    Open a pty master and return the fd, and the filename of the slave end.
    Deprecated, use openpty() instead.)r   r	   ttynamer   r   r   r   )r   r   r   s      r   master_openr   &   sx    
% jll	8 Z))

*$$ G$    s   A AAc                      dD ]M} dD ]H}d| z   |z   }	 t          j        |t           j                  }n# t          $ r Y 7w xY w|d| z   |z   fc c S Nt          d          )z1Open pty master and return (master_fd, tty_name).pqrstuvwxyzPQRST0123456789abcdefz/dev/ptyz/dev/ttyzout of pty devices)r   openO_RDWRr   )xypty_namefds       r   r   r   6   s     , ,# 	, 	,A!A~)HWXry11   
Q*++++++	, &
'
''s   2
??c                     t          j        | t           j                  }	 ddlm}m} n# t          $ r |cY S w xY w	  |||d            |||d           n# t          $ r Y nw xY w|S )zslave_open(tty_name) -> slave_fd
    Open the pty slave and acquire the controlling terminal, returning
    opened filedescriptor.
    Deprecated, use openpty() instead.r   )ioctlI_PUSHptemldterm)r   r   r   fcntlr%   r&   ImportErrorr   )tty_nameresultr%   r&   s       r   r   r   B   s     WXry))F'''''''''   fff%%%ffh''''   Ms   * 99A 
A%$A%c                     	 t          j                    \  } }| t          k    r%	 t          j                     n# t          $ r Y nw xY w| |fS # t
          t          f$ r Y nw xY wt                      \  }}t          j                    } | t          k    rt          j                     t          j        |           t          j	        |t                     t          j	        |t                     t          j	        |t                     |t          k    rt          j        |           t          j        t          j        t                    t           j                  }t          j        |           nt          j        |           | |fS )zdfork() -> (pid, master_fd)
    Fork and make the child a session leader with a controlling terminal.)r   forkptyCHILDsetsidr   r   r	   r
   r   dup2STDIN_FILENOSTDOUT_FILENOSTDERR_FILENOr   r   r   )pidr#   r   r   tmp_fds        r   r
   r
   T   se   *,,R %<<	    Bw G$    "))Ix
'))C
e||
	
 	,'''
-(((
-(((m##HX M22BI>>

 	>s    A 8 
AAA A c                 P    |r#t          j        | |          }||d         }|!dS dS )z#Write all the data to a descriptor.N)r   write)r#   datans      r   _writenr;   |   sF    
 HRABBx          c                 ,    t          j        | d          S )zDefault read function.i   )r   read)r#   s    r   _readr?      s    72tr<   c                 \   | t           g}|rt          |g g           \  }}}| |v r=	  ||           }n# t          $ r d}Y nw xY w|sdS t          j        t
          |           t           |v r= |t                     }|s|                    t                      nt          | |           |dS dS )zParent copy loop.
    Copies
            pty master -> standard output   (master_read)
            standard input -> pty master    (stdin_read)r<   N)r2   r   r   r   r8   r3   remover;   )r   master_read
stdin_readfdsrfds_wfds_xfdsr9   s           r   _copyrH      s    
 l
#C
 )#CR00eU"{9--    . ---4:l++D )

<((((	4(((+  ) ) ) ) )s   2 A Ac                 d   t          |           t          d          k    r| f} t          j        d|            t                      \  }}|t          k    rt          j        | d         g| R   	 t          t                    }t          t                     d}n# t          j        $ r d}Y nw xY w	 t          |||           |r t          t          t          j        |           n(# |r!t          t          t          j        |           w w xY wt          |           t!          |d          d         S )zCreate a spawned process. z	pty.spawnr   TFr   )typesysauditr
   r/   r   execlpr   r2   r   ttyerrorrH   r   	TCSAFLUSHr   r   )argvrB   rC   r5   r   moderestores          r   r   r      s2   DzzT"XXwIk4   VVNC
e||
	$q'!D!!!!&&|9   9ij111 	9lCM4888  	9lCM48888	9 
)3??1s   .*B B-,B-1C% %%D
)__doc__r   r   rL   rO   r   r   r   r   r   __all__r2   r3   r4   r/   r	   r   r   r   r
   r;   r?   rH   r    r<   r   <module>rX      s;             				 



 



         , , , , , , , , , ,
&
&
&	
 
 
   
( 
( 
(  $& & &P     "'5 ) ) ) ): "e      r<   