§
    (¶Õi]  ã                   ó¬   — d Z 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	„ Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zeefd„Zeefd„ZdS )zPseudo terminal utilities.é    )ÚselectN)ÚcloseÚwaitpid)ÚsetrawÚ	tcgetattrÚ	tcsetattr)ÚopenptyÚforkÚspawné   é   c                  ó    — 	 t          j        ¦   «         S # t          t          f$ r Y nw xY wt	          ¦   «         \  } }t          |¦  «        }| |fS )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      ú/usr/lib/python3.11/pty.pyr	   r	      s`   € ðÝŒz‰|Œ|ÐøÝ�GÐ$ð ð ð Øˆðøøøå*Ñ,Ô,Ñ€IˆzÝ˜*Ñ%Ô%€HØ�hÐÐs   ‚ •)¨)c                  óÒ   — 	 t          j        ¦   «         \  } }t          j        |¦  «        }t          j        |¦  «         | |fS # t          t
          f$ r Y nw xY wt          ¦   «         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.)r   r	   Úttynamer   r   r   r   )r   r   r   s      r   Úmaster_openr   &   sx   € ð
%Ý œj™lœlÑˆ	�8õ ”Z Ñ)Ô)ˆ
Ý
Œ�ÑÔÐØ˜*Ð$Ð$øõ �GÐ$ð ð ð Øˆðøøøõ ÑÔÐs   ‚A ÁAÁAc                  óÀ   — dD ]M} dD ]H}d| z   |z   }	 t          j        |t           j        ¦  «        }n# t          $ r Y Œ7w xY w|d| z   |z   fc c S ŒNt          d¦  «        ‚)z1Open pty master and return (master_fd, tty_name).ÚpqrstuvwxyzPQRSTÚ0123456789abcdefz/dev/ptyz/dev/ttyzout of pty devices)r   ÚopenÚO_RDWRr   )ÚxÚyÚpty_nameÚfds       r   r   r   6   sž   € àð ,ð ,ˆØ#ð 	,ð 	,ˆAØ! A‘~¨Ñ)ˆHðÝ”W˜X¥r¤yÑ1Ô1��øÝð ð ð Ø�ðøøøà˜
 Q™¨Ñ*Ð+Ð+Ð+Ð+Ð+Ð+ð	,õ Ð&Ñ
'Ô
'Ð's   ’2²
?¾?c                 óÔ   — t          j        | t           j        ¦  «        }	 ddlm}m} n# t          $ r |cY S w xY w	  |||d¦  «          |||d¦  «         n# t          $ r Y nw xY w|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)r   r   r   Úfcntlr%   r&   ÚImportErrorr   )Útty_nameÚresultr%   r&   s       r   r   r   B   s°   € õ ŒW�X�rœyÑ)Ô)€FðØ'Ð'Ð'Ð'Ð'Ð'Ð'Ð'Ð'øÝð ð ð ØˆˆˆðøøøðØˆˆf�f˜fÑ%Ô%Ð%Øˆˆf�f˜hÑ'Ô'Ð'Ð'øÝð ð ð Øˆðøøøà€Ms   ¡* ª9¸9½A Á
A%Á$A%c                  ó  — 	 t          j        ¦   «         \  } }| t          k    r%	 t          j        ¦   «          n# t          $ r Y nw xY w| |fS # t
          t          f$ r Y nw xY wt          ¦   «         \  }}t          j        ¦   «         } | t          k    rßt          j        ¦   «          t          j        |¦  «         t          j	        |t          ¦  «         t          j	        |t          ¦  «         t          j	        |t          ¦  «         |t          k    rt          j        |¦  «         t          j        t          j        t          ¦  «        t           j        ¦  «        }t          j        |¦  «         nt          j        |¦  «         | |fS )zdfork() -> (pid, master_fd)
    Fork and make the child a session leader with a controlling terminal.)r   ÚforkptyÚCHILDÚsetsidr   r   r	   r
   r   Údup2ÚSTDIN_FILENOÚSTDOUT_FILENOÚSTDERR_FILENOr   r   r   )Úpidr#   r   r   Útmp_fds        r   r
   r
   T   se  € ðÝ”*‘,”,‰ˆˆRð •%Š<ˆ<ðÝ”	‘”��øÝð ð ð à�ðøøøð �Bˆwˆøõ �GÐ$ð ð ð Øˆðøøøõ "™)œ)Ñ€IˆxÝ
Œ'‰)Œ)€CØ
�e‚|€|å
Œ	‰ŒˆÝ
Œ�ÑÔÐõ 	Œ��,Ñ'Ô'Ð'Ý
Œ��-Ñ(Ô(Ð(Ý
Œ��-Ñ(Ô(Ð(Ø•mÒ#Ð#ÝŒH�XÑÔÐõ ”�œ¥MÑ2Ô2µB´IÑ>Ô>ˆÝ
Œ�ÑÔÐÐå
Œ�ÑÔÐð �	ˆ>Ðs    ‚A ¤8 ¸
AÁAÁA ÁA c                 óP   — |r#t          j        | |¦  «        }||d…         }|°!dS dS )z#Write all the data to a descriptor.N)r   Úwrite)r#   ÚdataÚns      r   Ú_writenr;   |   sF   € à
ð ÝŒH�R˜ÑÔˆØ�A�B�BŒxˆð ð ð ð ð ð ó    c                 ó,   — t          j        | d¦  «        S )zDefault read function.i   )r   Úread)r#   s    r   Ú_readr?   ‚   s   € åŒ7�2�tÑÔÐr<   c                 ó\  — | t           g}|r t          |g g ¦  «        \  }}}| |v r=	  || ¦  «        }n# t          $ r d}Y nw xY w|sdS t          j        t
          |¦  «         t           |v r= |t           ¦  «        }|s|                     t           ¦  «         nt          | |¦  «         |°ždS dS )z�Parent copy loop.
    Copies
            pty master -> standard output   (master_read)
            standard input -> pty master    (stdin_read)r<   N)r2   r   r   r   r8   r3   Úremover;   )r   Úmaster_readÚ
stdin_readÚfdsÚrfdsÚ_wfdsÚ_xfdsr9   s           r   Ú_copyrH   †   sù   € ð
 •lÐ
#€CØ
ð )Ý# C¨¨RÑ0Ô0Ñˆˆe�Uà˜ÐÐðØ"�{ 9Ñ-Ô-��øÝð ð ð Ø���ðøøøàð .Ø�õ ”�¨Ñ-Ô-Ð-å˜4ÐÐØ�:�lÑ+Ô+ˆDØð )Ø—
’
�<Ñ(Ô(Ð(Ð(å˜	 4Ñ(Ô(Ð(ð+ ð )ð )ð )ð )ð )s   ¦2 ²AÁ Ac                 ód  — t          | ¦  «        t          d¦  «        k    r| f} t          j        d| ¦  «         t          ¦   «         \  }}|t          k    rt          j        | d         g| ¢R Ž  	 t          t          ¦  «        }t          t          ¦  «         d}n# t          j        $ r d}Y nw xY w	 t          |||¦  «         |r t          t          t          j        |¦  «         n(# |r!t          t          t          j        |¦  «         w w xY wt          |¦  «         t!          |d¦  «        d         S )zCreate a spawned process.Ú z	pty.spawnr   TFr   )ÚtypeÚsysÚauditr
   r/   r   Úexeclpr   r2   r   ÚttyÚerrorrH   r   Ú	TCSAFLUSHr   r   )ÚargvrB   rC   r5   r   ÚmodeÚrestores          r   r   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-Â1C% Ã%%D
)Ú__doc__r   r   rL   rO   r   r   r   r   r   Ú__all__r2   r3   r4   r/   r	   r   r   r   r
   r;   r?   rH   r   © r<   r   ú<module>rX      s;  ðØ  Ð  ð Ð Ð Ð Ð Ð Ø 	€	€	€	Ø 
€
€
€
Ø 
€
€
€
ð Ð Ð Ð Ð Ð Ð Ð Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,à
&Ð
&Ð
&€à€Ø€Ø€à	€ð
ð 
ð 
ðð ð ð 
(ð 
(ð 
(ðð ð ð$&ð &ð &ðPð ð ðð ð ð "'°5ð )ð )ð )ð )ð: "¨eð ð ð ð ð ð r<   