\section{Built-in Module \sectcode{macconsole}}
\bimodindex{macconsole}

\renewcommand{\indexsubitem}{(in module macconsole)}

This module is available on the Macintosh, provided Python has been
built using the Think C compiler. It provides an interface to the
Think console package, with which basic text windows can be created.

\begin{datadesc}{options}
An object allowing you to set various options when creating windows,
see below.
\end{datadesc}

\begin{datadesc}{C_ECHO}
\dataline{C_NOECHO}
\dataline{C_CBREAK}
\dataline{C_RAW}
Options for the \code{setmode} method. \var{C_ECHO} and \var{C_CBREAK}
enable character echo, the other two disable it, \var{C_ECHO} and
\var{C_NOECHO} enable line-oriented input (erase/kill processing,
etc).
\end{datadesc}

\begin{funcdesc}{copen}{}
Open a new console window. Return a console window object.
\end{funcdesc}

\begin{funcdesc}{fopen}{fp}
Return the console window object corresponding with the given file
object. \var{fp} should be one of \code{sys.stdin}, \code{sys.stdout} or
\code{sys.stderr}.
\end{funcdesc}

\subsection{macconsole options object}
These options are examined when a window is created:

\renewcommand{\indexsubitem}{(macconsole option)}
\begin{datadesc}{top}
\dataline{left}
The origin of the window.
\end{datadesc}

\begin{datadesc}{nrows}
\dataline{ncols}
The size of the window.
\end{datadesc}

\begin{datadesc}{txFont}
\dataline{txSize}
\dataline{txStyle}
The font, fontsize and fontstyle to be used in the window.
\end{datadesc}

\begin{datadesc}{title}
The title of the window.
\end{datadesc}

\begin{datadesc}{pause_atexit}
If set non-zero, the window will wait for user action before closing.
\end{datadesc}

\subsection{console window object}

\renewcommand{\indexsubitem}{(console window attribute)}

\begin{datadesc}{file}
The file object corresponding to this console window. If the file is
buffered, you should call \code{file.flush()} between \code{write()}
and \code{read()} calls.
\end{datadesc}

\renewcommand{\indexsubitem}{(console window method)}

\begin{funcdesc}{setmode}{mode}
Set the input mode of the console to \var{C_ECHO}, etc.
\end{funcdesc}

\begin{funcdesc}{settabs}{n}
Set the tabsize to \var{n} spaces.
\end{funcdesc}

\begin{funcdesc}{cleos}{}
Clear to end-of-screen.
\end{funcdesc}

\begin{funcdesc}{cleol}{}
Clear to end-of-line.
\end{funcdesc}

\begin{funcdesc}{inverse}{onoff}
Enable inverse-video mode:\ characters with the high bit set are
displayed in inverse video (this disables the upper half of a
non-\ASCII{} character set).
\end{funcdesc}

\begin{funcdesc}{gotoxy}{x\, y}
Set the cursor to position \code{(\var{x}, \var{y})}.
\end{funcdesc}

\begin{funcdesc}{hide}{}
Hide the window, remembering the contents.
\end{funcdesc}

\begin{funcdesc}{show}{}
Show the window again.
\end{funcdesc}

\begin{funcdesc}{echo2printer}{}
Copy everything written to the window to the printer as well.
\end{funcdesc}
