3 \��@s�ddlmZddlZddlZdddgZdZdZdZdZdd�Zd d �Z d d �Z d d�Z dd�Z dd�Z dd�Zeefdd�Zeefdd�ZdS)�)�selectN�openpty�fork�spawn��c Cs<ytj�Sttfk r YnXt�\}}t|�}||fS)N)�osr�AttributeError�OSError�_open_terminal� slave_open)� master_fd� slave_name�slave_fd�r�/usr/lib64/python3.6/pty.pyrs c CsLytj�\}}Wnttfk r(YnXtj|�}tj|�||fSt�S)N)rrr r �ttyname�closer )r rrrrr� master_open!s  rc Cslx^dD]V}xPdD]H}d||}ytj|tj�}Wntk rHwYnX|d||fSWqWtd��dS)NZpqrstuvwxyzPQRSTZ0123456789abcdefz/dev/ptyz/dev/ttyzout of pty devices)r�open�O_RDWRr )�x�yZpty_name�fdrrrr 1s   r cCsntj|tj�}yddlm}m}Wntk r6|SXy|||d�|||d�Wntk rhYnX|S)Nr)�ioctl�I_PUSHZptemZldterm)rrrZfcntlrr� ImportErrorr )Ztty_name�resultrrrrrr =s r cCs�ytj�\}}Wnttfk r(Yn4X|tkrTy tj�Wntk rRYnX||fSt�\}}tj�}|tkr�tj�tj|�tj |t �tj |t �tj |t �|t kr�tj|�tj tjt �tj�}tj|�n tj|�||fS)N)r�forkptyr r �CHILD�setsidrrr�dup2� STDIN_FILENO� STDOUT_FILENO� STDERR_FILENOrrr)�pidrr rZtmp_fdrrrrOs0         cCs&x |r tj||�}||d�}qWdS)N)r�write)r�data�nrrr�_writenws r)cCs tj|d�S)Ni)r�read)rrrr�_read}sr+cCsz|tg}xlt|gg�\}}}||krH||�}|s<|j|�n tjt|�t|kr |t�}|sh|jt�q t||�q WdS)N)r"r�removerr&r#r))r � master_read� stdin_readZfdsZrfdsZwfdsZxfdsr'rrr�_copy�s   r/cCs�t|�td�kr|f}t�\}}|tkr s    (