o
     JAf]  ã                   @   sº   	 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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)ÚcloseÚwaitpid)ÚsetrawÚ	tcgetattrÚ	tcsetattr)ÚopenptyÚforkÚspawné   é   c               	   C   s>   	 zt  ¡ W S  ttfy   Y nw tƒ \} }t|ƒ}| |fS ©N)Úosr   ÚAttributeErrorÚOSErrorÚ_open_terminalÚ
slave_open)Ú	master_fdÚ
slave_nameÚslave_fd© r   ú/usr/lib/python3.10/pty.pyr      s   
ÿ
r   c               	   C   sJ   	 zt  ¡ \} }W n ttfy   Y tƒ S w t  |¡}t  |¡ | |fS r   )r   r   r   r   Úttynamer   r   )r   r   r   r   r   r   Úmaster_open&   s   ù

r   c               
   C   sf   	 dD ]+} dD ]&}d|  | }z	t  |t j¡}W n	 ty!   Y qw |d|  | f    S qtdƒ‚)NZpqrstuvwxyzPQRSTZ0123456789abcdefz/dev/ptyz/dev/ttyzout of pty devices)r   ÚopenÚO_RDWRr   )ÚxÚyZpty_nameÚfdr   r   r   r   6   s   ÿúr   c                 C   sp   	 t  | t j¡}z
ddlm}m} W n ty   | Y S w z|||dƒ |||dƒ W |S  ty7   Y |S w )Nr   )ÚioctlÚI_PUSHZptemZldterm)r   r   r   Úfcntlr   r    ÚImportErrorr   )Ztty_nameÚresultr   r    r   r   r   r   B   s   ÿþþr   c               	   C   s   	 zt  ¡ \} }W n ttfy   Y nw | tkr/z	t  ¡  W | |fS  ty.   Y | |fS w | |fS tƒ \}}t  ¡ } | tkrwt  ¡  t  |¡ t  	|t
¡ t  	|t¡ t  	|t¡ |tkrdt  |¡ t  t  t¡t j¡}t  |¡ | |fS 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	   T   s<   ÿ
ýý




ýr	   c                 C   s*   	 |rt  | |¡}||d … }|sd S d S r   )r   Úwrite)r   ÚdataÚnr   r   r   Ú_writen|   s
   þr/   c                 C   s   	 t  | d¡S )Ni   )r   Úread)r   r   r   r   Ú_read‚   s   r1   c                 C   s–   	 | t g}|rIt|g g ƒ\}}}| |v r0z|| ƒ}W n ty%   d}Y nw |s*d S t t|¡ t |v rE|t ƒ}|s@| t ¡ nt| |ƒ |sd S d S )Nó    )r(   r   r   r   r,   r)   Úremover/   )r   Úmaster_readÚ
stdin_readÚfdsZrfdsZ_wfdsZ_xfdsr-   r   r   r   Ú_copy†   s&   ÿ
ër7   c              
   C   sÎ   	 t | ƒt dƒkr| f} t d| ¡ tƒ \}}|tkr&tj| d g| ¢R Ž  zttƒ}t	tƒ d}W n t
jy>   d}Y nw zt|||ƒ W |rPttt
j|ƒ n|r[ttt
j|ƒ w w t|ƒ t|dƒd S )NÚ z	pty.spawnr   TFr   )ÚtypeÚsysÚauditr	   r%   r   Úexeclpr   r(   r   ÚttyÚerrorr7   r   Z	TCSAFLUSHr   r   )Úargvr4   r5   r+   r   ÚmodeZrestorer   r   r   r
   £   s0   
ÿ€ÿÿr
   )r   r   r:   r=   r   r   r   r   r   Ú__all__r(   r)   r*   r%   r   r   r   r   r	   r/   r1   r7   r
   r   r   r   r   Ú<module>   s*    (