Ë
    òT•jù  ã                   ó¤   — 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eefd„Zeefd„Zy)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.12/pty.pyr	   r	      sL   € ðÜ�z‰z‹|ÐøÜœGÐ$ò Ùðúä*Ó,Ñ€IˆzÜ˜*Ó%€HØ�hÐÐs   ‚ –(§(c                  ó  — ddl } | j                  dt        d¬«       	 t        j                  «       \  }}t        j
                  |«      }t        j                  |«       ||fS # t        t        f$ r Y t        «       S w xY w)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   NúUse pty.openpty() instead.r   ©Ú
stacklevel)
ÚwarningsÚwarnÚDeprecationWarningr   r	   Úttynamer   r   r   r   )r   r   r   r   s       r   Úmaster_openr    &   s{   € ó
 Ø‡M�MÐ.Ô0BÈq€MÔQð%Ü Ÿj™j›lÑˆ	�8ô —Z‘Z Ó)ˆ
Ü
�‰�ÔØ˜*Ð$Ð$øô œGÐ$ò Øô ÓÐðús   žA# Á#A>Á=A>c                  óÆ   — dD ]C  } dD ]<  }d| z   |z   }	 t        j                  |t         j                  «      }|d| z   |z   fc c S  ŒE t        d«      ‚# t        $ r Y ŒWw xY w)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   9   s   € àò ,ˆØ#ò 	,ˆAØ! A‘~¨Ñ)ˆHðÜ—W‘W˜X¤r§y¡yÓ1�ð ˜
 Q™¨Ñ*Ð+Ô+ñ	,ð,ô Ð&Ó
'Ð'øô ò Ùðús   ”$AÁ	A ÁA c                 ó  — ddl }|j                  dt        d¬«       t        j                  | t        j
                  «      }	 ddlm}m} 	  |||d«        |||d«       |S # t        $ r |cY S w xY w# t        $ r Y |S w xY w)	z©slave_open(tty_name) -> slave_fd
    Open the pty slave and acquire the controlling terminal, returning
    opened filedescriptor.
    Deprecated, use openpty() instead.r   Nr   r   r   )ÚioctlÚI_PUSHÚptemÚldterm)r   r   r   r   r$   r%   Úfcntlr+   r,   ÚImportErrorr   )Útty_namer   Úresultr+   r,   s        r   r   r   E   s‰   € ó Ø‡M�MÐ.Ô0BÈq€MÔQä�W‰W�XœrŸy™yÓ)€Fðß'ðÙˆf�f˜fÔ%Ùˆf�f˜hÔ'ð €Møô ò ØŠðûô
 ò ØØ€Mðús$   ÁA! ÁA2 Á!A/Á.A/Á2	A?Á>A?c                  ó®  — 	 t        j                  «       \  } }| t        k(  r	 t        j                  «        | |fS | |fS # t        $ r Y | |fS w xY w# t
        t        f$ r Y nw xY wt        «       \  }}t        j                  «       } | t        k(  r.t        j                  |«       t        j                  |«       | |fS 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   Ú	login_tty)Úpidr)   r   r   s       r   r
   r
   Z   sÓ   € ðÜ—*‘*“,‰ˆˆRð ”%Š<ðÜ—	‘	”ð �Bˆwˆˆs�Bˆwˆøô ò àØ�Bˆwˆðûô œGÐ$ò Ùðúô "›)Ñ€IˆxÜ
�'‰'‹)€CØ
Œe‚|Ü
�‰�ÔÜ
�‰�XÔð
 �	ˆ>Ðô 	�‰�Ôð �	ˆ>Ðs    ‚A £? ¿	AÁAÁA#Á"A#c                 ó.   — t        j                  | d«      S )zDefault read function.i   )r   Úread)r)   s    r   Ú_readr;   v   s   € ä�7‰7�2�tÓÐó    c                 óŠ  — t        j                  | «      r<t        j                  | d«       	 t        | ||¬«       t        j                  | d«       yd}| t        k7  }| t
        k7  }d}d}	 g }g }	|r#t        |«      |k  r|j                  t        «       |rt        |«      |k  r|j                  | «       |r#t        |«      dkD  r|	j                  t
        «       t        |«      dkD  r|	j                  | «       t        ||	g «      \  }}	}
t
        |	v r 	 t        j                  t
        |«      }||d }| |v r	  || «      }|sy||z  }| |	v rt        j                  | |«      }||d }|rt        |v r |t        «      }|sd}n||z  }�Œ# t        j                  | d«       w xY w# t        $ r d}Y Œ~w xY w# t        $ r d}Y Œ‚w xY w)z�Parent copy loop.
    Copies
            pty master -> standard output   (master_read)
            standard input -> pty master    (stdin_read)F)Úmaster_readÚ
stdin_readTNi   r<   r   )r   Úget_blockingÚset_blockingÚ_copyÚSTDIN_FILENOÚSTDOUT_FILENOÚlenÚappendr   Úwriter   )r   r>   r?   Úhigh_waterlevelÚstdin_availÚstdout_availÚi_bufÚo_bufÚrfdsÚwfdsÚ_xfdsÚnÚdatas                r   rB   rB   z   sÉ  € ô
 
‡��yÔ!ô 	�‰˜	 5Ô)ð	-Ü�)¨ÀÕLô �O‰O˜I tÔ,ØØ€OØœ|Ñ+€KØ¤Ñ-€LØ€EØ€EØ
ØˆØˆÙœ3˜u›:¨Ò7Ø�K‰KœÔ%ÙœC ›J¨Ò8Ø�K‰K˜	Ô"ÙœC ›J¨šNØ�K‰KœÔ&Üˆu‹:˜Š>Ø�K‰K˜	Ô"ä" 4¨¨rÓ2Ñˆˆd�Eä˜DÑ ð%Ü—H‘Hœ]¨EÓ2�Ø˜a˜b˜	�ð ˜ÑðÙ" 9Ó-�ñ Øà�T‰MˆEà˜ÑÜ—‘˜ EÓ*ˆAØ˜!˜"�IˆEáœ<¨4Ñ/ÙœlÓ+ˆDÙØ#‘à˜‘�ñU øô �O‰O˜I tÕ,ûô2 ò %Ø$’ð%ûô ò Ø’ðús/   ­F ÄF# Ä7F4 ÆF Æ#F1Æ0F1Æ4GÇGc                 ó  — t        | t        «      r| f} t        j                  d| «       t	        «       \  }}|t
        k(  rt        j                  | d   g| ¢­Ž  	 t        t        «      }t        t        «       d}	 t        |||«       |r t        t        t        j                  «       	 t!        |«       t#        |d«      d   S # t        j                  $ r d}Y Œaw xY w# |r t        t        t        j                  «       w w xY w)zCreate a spawned process.z	pty.spawnr   TFr   )Ú
isinstanceÚstrÚsysÚauditr
   r5   r   Úexeclpr   rC   r   ÚttyÚerrorrB   r   Ú	TCSAFLUSHr   r   )Úargvr>   r?   r8   r   ÚmodeÚrestores          r   r   r   »   sÖ   € ä�$œÔØˆwˆÜ‡I�Iˆk˜4Ô ä“V�N€CˆØ
Œe‚|Ü
�	‰	�$�q‘'Ð!˜DÓ!ðÜœÓ&ˆÜŒ|ÔØˆð9Üˆi˜ jÔ1áÜ”l¤C§M¡M°4Õ8ä	ˆ)ÔÜ�3˜‹?˜1ÑÐøô �9‰9ò ØŠðûñ Ü”l¤C§M¡M°4Õ8ð ús   Á C Á;C ÃCÃCÃ$D)Ú__doc__r   r   rU   rX   r   r   r   r   r   Ú__all__rC   rD   ÚSTDERR_FILENOr5   r	   r    r   r   r
   r;   rB   r   © r<   r   ú<module>rb      sq   ðÙ  õ Û 	Û 
Û 
÷ ß ,Ñ ,â
&€à€Ø€Ø€à	€ò
òò&
(òò*ò8ð "'°5ó ?ðB "¨eô r<   