
\section{Standard module \sectcode{macostools}}
\stmodindex{macostools}

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

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

\renewcommand{\indexsubitem}{(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}}
\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:

\renewcommand{\indexsubitem}{(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}
