� !A?h����dZddlmZddlZddlZddlZddlmZmZddlmZmZm Z gd�Z dZ dZ dZ dZd �Zd �Zd �Zd �Zd �Zd�Zeefd�Zeefd�ZdS)zPseudo terminal utilities.�)�selectN)�close�waitpid)�setraw� tcgetattr� tcsetattr)�openpty�fork�spawn��c�� tj��S#ttf$rYnwxYwt ��\}}t |��}||fS)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 �0/opt/alt/python-internal/lib64/python3.11/pty.pyr r s`�� ��z�|�|��� �G� $� � � � �� ����*�,�,��I�z��*�%�%�H� �h� �s ��)�)c��� tj��\}}tj|��}tj|��||fS#tt f$rYnwxYwt ��S)z�master_open() -> (master_fd, slave_name) Open a pty master and return the fd, and the filename of the slave end. Deprecated, use openpty() instead.)rr �ttynamerrrr)rrrs r� master_openr&sx�� %� �j�l�l�� �8��Z��)�)� � �������*�$�$�� �G� $� � � � �� ���� � � �s�A�A�Ac���dD]M}dD]H}d|z|z} tj|tj��}n#t$rY�7wxYw|d|z|zfccS�Ntd���)z1Open pty master and return (master_fd, tty_name).�pqrstuvwxyzPQRST�0123456789abcdefz/dev/ptyz/dev/ttyzout of pty devices)r�open�O_RDWRr)�x�y�pty_name�fds rrr6s��� �,�,��#� ,� ,�A�!�A�~��)�H� ��W�X�r�y�1�1����� � � ��� ����� �Q���*�+� +� +� +� +� +�  ,� �&� '� '�'s �2� ?�?c���tj|tj��} ddlm}m}n#t $r|cYSwxYw |||d��|||d��n#t$rYnwxYw|S)z�slave_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)rrr�fcntlr%r&� ImportErrorr)�tty_name�resultr%r&s rrrBs��� �W�X�r�y� )� )�F��'�'�'�'�'�'�'�'�'�� ����� � � ����� � ��f�f�f�%�%�%� ��f�f�h�'�'�'�'�� � � � � �� ���� �Ms�*� 9�9�A� A%�$A%c�� tj��\}}|tkr% tj��n#t$rYnwxYw||fS#t tf$rYnwxYwt ��\}}tj��}|tkr�tj��tj|��tj |t��tj |t��tj |t��|tkrtj|��tj tjt��tj��}tj|��ntj|��||fS)zdfork() -> (pid, master_fd) Fork and make the child a session leader with a controlling terminal.)r�forkpty�CHILD�setsidrrr r r�dup2� STDIN_FILENO� STDOUT_FILENO� STDERR_FILENOrrr)�pidr#rr�tmp_fds rr r Tse�� ��*�,�,���R� �%�<�<� �� � � � � ��� � � ��� �����B�w��� �G� $� � � � �� ����"�)�)��I�x� �'�)�)�C� �e�|�|� � � � � � ������ ���,�'�'�'� ���-�(�(�(� ���-�(�(�(� �m� #� #� �H�X� � � �����M�2�2�B�I�>�>�� ������� ������ � �>�s �A �8� A�A� A �A c�,�tj|d��S)zDefault read function.i)r�read)r#s r�_readr9|s�� �7�2�t� � ��c��tj|��rZtj|d�� t|||���tj|d��n#tj|d��wxYwdSd}|tk}|t k}d}d} g}g} |r-t |��|kr|�t��|r(t |��|kr|�|��|r-t |��dkr| �t ��t |��dkr| �|��t|| g��\}} } t | vr8 tj t |��} || d�}n#t$rd}YnwxYw||vr( ||��} n#t$rd} YnwxYw| sdS|| z }|| vrtj ||��} || d�}|r#t|vr|t��} | sd}n|| z }���) z�Parent copy loop. Copies pty master -> standard output (master_read) standard input -> pty master (stdin_read)F)� master_read� stdin_readTNir:r r) r� get_blocking� set_blocking�_copyr2r3�len�appendr�writer) rr<r=�high_waterlevel� stdin_avail� stdout_avail�i_buf�o_buf�rfds�wfds�_xfds�n�datas rr@r@�sx��  ��y�!�!� � �� �5�)�)�)� -� �)��� L� L� L� L� �O�I�t� ,� ,� ,� ,��B�O�I�t� ,� ,� ,� ,�������O��|�+�K�� �-�L� �E� �E�*����� � &�3�u�:�:��7�7� �K�K� � %� %� %� � #�C��J�J��8�8� �K�K� � "� "� "� � '�C��J�J��N�N� �K�K� � &� &� &� �u�:�:��>�>� �K�K� � "� "� "�"�4��r�2�2���d�E� �D� � � %��H�]�E�2�2���a�b�b� ����� %� %� %�$� � � � %���� �� � � �"�{�9�-�-����� � � ����� ����� ��� �T�M�E� �� � ����E�*�*�A��!�"�"�I�E� � �<�4�/�/��:�l�+�+�D�� �#� � ��� ��U*s/�A�A*�$F� F�F� F'�' F6�5F6c�d�t|��td��kr|f}tjd|��t��\}}|tkrt j|dg|�R� tt��}tt��d}n#tj $rd}YnwxYw t|||��|r tttj|��n(#|r!tttj|��wwxYwt|��t!|d��dS)zCreate a spawned process.�z pty.spawnrTFr )�type�sys�auditr r/r�execlprr2r�tty�errorr@r� TCSAFLUSHrr)�argvr<r=r5r�mode�restores rr r �s2�� �D�z�z�T�"�X�X����w���I�k�4� � � ��V�V�N�C�� �e�|�|� � �$�q�'�!�D�!�!�!�!����&�&���|�������� �9������������9� �i��j�1�1�1� � 9� �l�C�M�4� 8� 8� 8��� � 9� �l�C�M�4� 8� 8� 8� 8� 9���� �)���� �3��?�?�1� �s�.*B�B-�,B-�1C%�%%D )�__doc__rrrQrTrrrrr�__all__r2r3r4r/r rrrr r9r@r �r:r�r]s-�� � ������� � � � � � � � � � � � ���������,�,�,�,�,�,�,�,�,�,� &� &� &��� �� �� � �� � � ���� (� (� (����$&�&�&�P���"'�5�?�?�?�?�B"�e������r: