U e5d��@s�ddlmZddlZddlZddlZdddgZdZdZdZdZdd�Z d d �Z d d �Z d d�Z dd�Z dd�Zdd�Zeefdd�Zeefdd�ZdS)�)�selectN�openpty�fork�spawn��c Cs>z t��WSttfk r"YnXt�\}}t|�}||fS�N)�osr�AttributeError�OSError�_open_terminal� slave_open)� master_fd� slave_name�slave_fd�r�/usr/lib64/python3.8/pty.pyrs  c CsLzt��\}}Wnttfk r(YnXt�|�}t�|�||fSt�Sr)r rr r �ttyname�closer )rrrrrr� master_open"s  rc CsndD]\}dD]R}d||}zt�|tj�}Wntk rFYq YnX|d||fSqtd��dS)NZpqrstuvwxyzPQRSTZ0123456789abcdefz/dev/ptyz/dev/ttyzout of pty devices)r �open�O_RDWRr )�x�yZpty_name�fdrrrr 2s  r cCsrt�|tj�}zddlm}m}Wntk r:|YSXz|||d�|||d�Wntk rlYnX|S)Nr)�ioctl�I_PUSHZptemZldterm)r rrZfcntlrr� ImportErrorr )Ztty_name�resultrrrrrr >s  r c Cs�zt��\}}Wnttfk r(Yn4X|tkrTz t��Wntk rRYnX||fSt�\}}t��}|tkr�t��t�|�t� |t �t� |t �t� |t �|t kr�t�|�t� t�t �tj�}t�|�n t�|�||fSr)r �forkptyr r �CHILD�setsidrrr�dup2� STDIN_FILENO� STDOUT_FILENO� STDERR_FILENOrrr)�pidrrrZtmp_fdrrrrPs0         cCs"|rt�||�}||d�}qdSr)r �write)r�data�nrrr�_writenxs r*cCs t�|d�S)Ni)r �read)rrrr�_read~sr,cCsv|tg}t|gg�\}}}||krF||�}|s:|�|�n t�t|�t|kr|t�}|sf|�t�qt||�qdSr)r#r�remover r'r$r*)r� master_read� stdin_readZfdsZrfdsZwfdsZxfdsr(rrr�_copy�s   r0cCs�t|�td�kr|f}t�d|�t�\}}|tkrHtj|df|��zt�t �}t� t �d}Wntj k r~d}YnXzt |||�Wn(t k r�|r�t�t tj|�YnXt�|�t�|d�dS)N�z pty.spawnrr)�type�sys�auditrr r �execlp�ttyZ tcgetattrr#Zsetraw�errorr0r Z tcsetattrZ TCSAFLUSHr�waitpid)�argvr.r/r&r�modeZrestorerrrr�s&      )rr r3r6�__all__r#r$r%r rrr r rr*r,r0rrrrr� s"    (