
    z%i                         	 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)    )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 N)osr	   AttributeErrorOSError_open_terminal
slave_open)	master_fd
slave_nameslave_fds      7/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/pty.pyr	   r	      sR    Ezz|G$ *,Iz*%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)Nr   Use pty.openpty() instead.r   
stacklevel)
warningswarnDeprecationWarningr   r	   ttynamer   r   r   r   )r   r   r   r   s       r   master_openr!   &   s    * MM.0BqMQ% jjl	8 ZZ)

*$$ 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)N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WWXryy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)Nr   r   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    *
 MM.0BqMQWWXryy)F'fff%ffh' M  
  Ms$   A" A3 "A0/A03	B ?B 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 r   )
r   forkptyCHILDsetsidr   r   r	   r
   r   	login_tty)pidr*   r   r   s       r   r
   r
   Z   s    M**,R %<		 BwsBw  Bw G$  ")Ix
'')C
e|

X
 	> 	 	>s"   A A   	AAA$#A$c                 0    	 t        j                  | d      S )Ni   )r   read)r*   s    r   _readr<   v   s     772t    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)NF)master_read
stdin_readTi   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   rC   rC   z   s   < 
y! 		5)	-)L OOIt,O|+K-LEE
3u:7KK%CJ8KK	"CJNKK&u:>KK	""4r2dED %HH]E2ab	 "9- TMEE*A!"IE<4/l+D#U  OOIt,2  %$%  s/   F	 F$ 8F5 	F!$F21F25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)Nz	pty.spawnr   TFr   )
isinstancestrsysauditr
   r6   r   execlpr   rD   r   ttyerrorrC   r   	TCSAFLUSHr   r   )argvr?   r@   r9   r   moderestores          r   r   r      s    #$wIIk4 VNC
e|
		$q'!D!&|9ij1lCMM48	)3?1 99  lCMM48 s    C <C  CC $D)r   r   rV   rY   r   r   r   r   r   __all__rD   rE   STDERR_FILENOr6   r	   r!   r   r   r
   r<   rC   r    r=   r   <module>rb      sq       	 
 
  , ,
&	
&
(*8 "'5 ?B "e r=   