\section{\module{pty} ---
         Pseudo-terminal utilities}
\declaremodule{standard}{pty}
  \platform{IRIX, Linux}
\modulesynopsis{Pseudo-Terminal Handling for SGI and Linux.}
\moduleauthor{Steen Lumholt}{}
\sectionauthor{Moshe Zadka}{moshez@zadka.site.co.il}


The \module{pty} module defines operations for handling the
pseudo-terminal concept: starting another process and being able to
write to and read from its controlling terminal programmatically.

Because pseudo-terminal handling is highly platform dependant, there
is code to do it only for SGI and Linux. (The Linux code is supposed
to work on other platforms, but hasn't been tested yet.)

The \module{pty} module defines the following functions:

\begin{funcdesc}{fork}{}
Fork. Connect the child's controlling terminal to a pseudo-terminal.
Return value is \code{(\var{pid}, \var{fd})}. Note that the child 
gets \var{pid} 0, and the \var{fd} is \emph{invalid}. The parent's
return value is the \var{pid} of the child, and \var{fd} is a file
descriptor connected to the child's controlling terminal (and also
to the child's standard input and output.
\end{funcdesc}

\begin{funcdesc}{openpty}{}
Open a new pseudo-terminal pair, using \function{os.openpty()} if
possible, or emulation code for SGI and generic \UNIX{} systems.
Return a pair of file descriptors \code{(\var{master}, \var{slave})},
for the master and the slave end, respectively.
\end{funcdesc}

\begin{funcdesc}{spawn}{argv\optional{, master_read\optional{, stdin_read}}}
Spawn a process, and connect its controlling terminal with the current 
process's standard io. This is often used to baffle programs which
insist on reading from the controlling terminal.

The functions \var{master_read} and \var{stdin_read} should be
functions which read from a file-descriptor. The defaults try to read
1024 bytes each time they are called.
\end{funcdesc}
