a
    ãzeÇ  ã                   @   s”   d dl m Z  d dlZd dlZd dlZg d¢Zd ZdZdZd Zdd„ Z	dd	„ Z
d
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zeefdd„Zeefdd„ZdS )é    )ÚselectN)ÚopenptyÚforkÚspawné   é   c               	   C   s<   z
t  ¡ W S  ttfy    Y n0 tƒ \} }t|ƒ}| |fS ©N)Úosr   ÚAttributeErrorÚOSErrorÚ_open_terminalÚ
slave_open)Ú	master_fdÚ
slave_nameÚslave_fd© r   ú/usr/lib/python3.9/pty.pyr      s    

r   c               	   C   sJ   zt  ¡ \} }W n ttfy&   Y n0 t  |¡}t  |¡ | |fS tƒ S r   )r	   r   r
   r   ÚttynameÚcloser   )r   r   r   r   r   r   Úmaster_open"   s    

r   c               
   C   sl   dD ]Z} dD ]P}d|  | }zt  |t j¡}W n tyD   Y qY n0 |d|  | f    S qtdƒ‚d S )NZpqrstuvwxyzPQRSTZ0123456789abcdefz/dev/ptyz/dev/ttyzout of pty devices)r	   ÚopenÚO_RDWRr   )ÚxÚyZpty_nameÚfdr   r   r   r   2   s    
r   c                 C   sn   t  | t j¡}zddlm}m} W n ty8   | Y S 0 z|||dƒ |||dƒ W n tyh   Y n0 |S )Nr   )ÚioctlÚI_PUSHZptemZldterm)r	   r   r   Zfcntlr   r   ÚImportErrorr   )Ztty_nameÚresultr   r   r   r   r   r   >   s    
r   c               	   C   sì   zt  ¡ \} }W n ttfy&   Y n20 | tkrPzt  ¡  W n tyN   Y n0 | |fS tƒ \}}t  ¡ } | tkrÚt  ¡  t  |¡ t  	|t
¡ t  	|t¡ t  	|t¡ |tkrºt  |¡ t  t  t¡t j¡}t  |¡ n
t  |¡ | |fS r   )r	   Úforkptyr
   r   ÚCHILDÚsetsidr   r   r   Údup2ÚSTDIN_FILENOÚSTDOUT_FILENOÚSTDERR_FILENOr   r   r   )Úpidr   r   r   Ztmp_fdr   r   r   r   P   s0    



r   c                 C   s"   |rt  | |¡}||d … }q d S r   )r	   Úwrite)r   ÚdataÚnr   r   r   Ú_writenx   s    r*   c                 C   s   t  | d¡S )Ni   )r	   Úread)r   r   r   r   Ú_read~   s    r,   c                 C   sv   | t g}t|g g ƒ\}}}| |v rF|| ƒ}|s:| | ¡ nt t|¡ t |v r|t ƒ}|sf| t ¡ qt| |ƒ qd S r   )r#   r   Úremover	   r'   r$   r*   )r   Úmaster_readÚ
stdin_readÚfdsZrfdsZwfdsZxfdsr(   r   r   r   Ú_copy‚   s    r1   c                 C   sÒ   t | ƒt dƒkr| f} t d| ¡ tƒ \}}|tkrJtj| d g| ¢R Ž  zt t	¡}t 
t	¡ d}W n tjy~   d}Y n0 zt|||ƒ W n& ty¶   |r²t t	tj|¡ Y n0 t |¡ t |d¡d S )NÚ z	pty.spawnr   r   )ÚtypeÚsysÚauditr   r    r	   ÚexeclpÚttyZ	tcgetattrr#   ZsetrawÚerrorr1   r   Z	tcsetattrZ	TCSAFLUSHr   Úwaitpid)Úargvr.   r/   r&   r   ÚmodeZrestorer   r   r   r   —   s&    




r   )r   r	   r4   r7   Ú__all__r#   r$   r%   r    r   r   r   r   r   r*   r,   r1   r   r   r   r   r   Ú<module>	   s"   (