\section{Standard Module \sectcode{macostools}}
\label{module-macostools}
\stmodindex{macostools}

This module contains some convenience routines for file-manipulation
on the Macintosh.

The \code{macostools} module defines the following functions:

\setindexsubitem{(in module macostools)}

\begin{funcdesc}{copy}{src, dst\optional{, createpath, copytimes}}
Copy file \var{src} to \var{dst}. The files can be specified as
pathnames or \code{FSSpec} objects. If \var{createpath} is non-zero
\var{dst} must be a pathname and the folders leading to the
destination are created if necessary.  The method copies data and
resource fork and some finder information (creator, type, flags) and
optionally the creation, modification and backup times (default is to
copy them). Custom icons, comments and icon position are not copied.

If the source is an alias the original to which the alias points is
copied, not the aliasfile.
\end{funcdesc}

\begin{funcdesc}{copytree}{src, dst}
Recursively copy a file tree from \var{src} to \var{dst}, creating
folders as needed. \var{Src} and \var{dst} should be specified as
pathnames.
\end{funcdesc}

\begin{funcdesc}{mkalias}{src, dst}
Create a finder alias \var{dst} pointing to \var{src}. Both may be
specified as pathnames or \var{FSSpec} objects.
\end{funcdesc}

\begin{funcdesc}{touched}{dst}
Tell the finder that some bits of finder-information such as creator
or type for file \var{dst} has changed. The file can be specified by
pathname or fsspec. This call should prod the finder into redrawing the
files icon.
\end{funcdesc}

\begin{datadesc}{BUFSIZ}
The buffer size for \code{copy}, default 1 megabyte.
\end{datadesc}

Note that the process of creating finder aliases is not specified in
the Apple documentation. Hence, aliases created with \code{mkalias}
could conceivably have incompatible behaviour in some cases.

\section{Standard Module \sectcode{findertools}}
\label{module-findertools}
\stmodindex{findertools}

This module contains routines that give Python programs access to some
functionality provided by the finder. They are implemented as wrappers
around the AppleEvent interface to the finder.

All file and folder parameters can be specified either as full
pathnames or as \code{FSSpec} objects.

The \code{findertools} module defines the following functions:

\setindexsubitem{(in module macostools)}

\begin{funcdesc}{launch}{file}
Tell the finder to launch \var{file}. What launching means depends on the file:
applications are started, folders are opened and documents are opened
in the correct application.
\end{funcdesc}

\begin{funcdesc}{Print}{file}
Tell the finder to print a file (again specified by full pathname or
FSSpec). The behaviour is identical to selecting the file and using
the print command in the finder.
\end{funcdesc}

\begin{funcdesc}{copy}{file, destdir}
Tell the finder to copy a file or folder \var{file} to folder
\var{destdir}. The function returns an \code{Alias} object pointing to
the new file.
\end{funcdesc}

\begin{funcdesc}{move}{file, destdir}
Tell the finder to move a file or folder \var{file} to folder
\var{destdir}. The function returns an \code{Alias} object pointing to
the new file.
\end{funcdesc}

\begin{funcdesc}{sleep}{}
Tell the finder to put the mac to sleep, if your machine supports it.
\end{funcdesc}

\begin{funcdesc}{restart}{}
Tell the finder to perform an orderly restart of the machine.
\end{funcdesc}

\begin{funcdesc}{shutdown}{}
Tell the finder to perform an orderly shutdown of the machine.
\end{funcdesc}
