�`^c@s�dZddlmZddlZddlZdddgZdZdZd ZdZd
�Z d�Z
d�Zd
�Zd�Z
d�Zd�Zeed�Zeed�ZdS(sPseudo terminal utilities.i�(tselectNtopenptytforktspawniiicCsMytj�SWnttfk
r'nXt�\}}t|�}||fS(sdopenpty() -> (master_fd, slave_fd)
Open a pty master/slave pair, using os.openpty() if possible.(tosRtAttributeErrortOSErrort_open_terminalt
slave_open(t master_fdt
slave_nametslave_fd((s/sys/lib/python2.7/pty.pyRscCs]ytj�\}}Wnttfk
r/n'Xtj|�}tj|�||fSt�S(s�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.(RRRRtttynametcloseR(R RR
((s/sys/lib/python2.7/pty.pytmaster_open!s
cCs�yddl}Wntk
r#nOXy"|jtjdd�\}}Wntk
rg}tj|�nX||fSxodD]g}x^dD]V}d||}ytj|tj�}Wntjk
r�q�nX|d||fSWqyWtjd �dS(
slOpen pty master and return (master_fd, tty_name).
SGI and generic BSD version, for when openpty() fails.i�Ni�itpqrstuvwxyzPQRSTt0123456789abcdefs/dev/ptys/dev/ttysout of pty devices(tsgitImportErrort_getptyRtO_RDWRtIOErrorterrortopen(Rttty_nameR tmsgtxtytpty_nametfd((s/sys/lib/python2.7/pty.pyR1s$
"
cCs�tj|tj�}yddlm}m}Wntk
rC|SXy$|||d�|||d�Wntk
r{nX|S(s�slave_open(tty_name) -> slave_fd
Open the pty slave and acquire the controlling terminal, returning
opened filedescriptor.
Deprecated, use openpty() instead.i�(tioctltI_PUSHtptemtldterm(RRRtfcntlRRRR(RtresultRR((s/sys/lib/python2.7/pty.pyRHs
cCs:ytj�\}}Wnttfk
r/n<X|tkraytj�Wqatk
r]qaXn||fSt�\}}tj�}|tkr#tj�tj|�tj |t
�tj |t�tj |t�|tkr�j|�ntj
tjt�tj�}tj|�n
tj|�||fS(sdfork() -> (pid, master_fd)
Fork and make the child a session leader with a controlling terminal.(RtforkptyRRtCHILDtsetsidRRR
tdup2tSTDIN_FILENOt
STDOUT_FILENOt
STDERR_FILENORRR(tpidRR Rttmp_fd((s/sys/lib/python2.7/pty.pyRZs0
cCs3x,|dkr.tj||�}||}qWdS(s#Write all the data to a descriptor.tN(Rtwrite(Rtdatatn((s/sys/lib/python2.7/pty.pyt_writen�scCstj|d�S(sDefault read function.i(Rtread(R((s/sys/lib/python2.7/pty.pyt_read�scCs�|tg}x�tr�t|gg�\}}}||krq||�}|s^|j|�qqtjt|�nt|kr|t�}|s�|jt�q�t||�qqWdS(s�Parent copy loop.
Copies
pty master -> standard output (master_read)
standard input -> pty master (stdin_read)N(R(tTrueRtremoveRR.R)R1(R tmaster_readt
stdin_readtfdstrfdstwfdstxfdsR/((s/sys/lib/python2.7/pty.pyt_copy�s cCs�t|�td�kr$|f}nt�\}}|tkrVtj|d|�ny&tjt�}tjt�d}Wntj k
r�d}nXyt
|||�Wn6ttfk
r�|r�j
ttj|�q�Xtj|�dS(sCreate a spawned process.R-iiN(ttypeRR%Rtexeclptttyt tcgetattrR(tsetrawRR<RRt tcsetattrt TCSAFLUSHR
(targvR6R7R+R tmodetrestore((s/sys/lib/python2.7/pty.pyR�s"
(t__doc__RRR?t__all__R(R)R*R%RRRRRR1R3R<R(((s/sys/lib/python2.7/pty.pyt<module>s" (
|