\section{Standard Module \sectcode{ic}}
\bimodindex{ic}

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

This module provides access to macintosh Internet Config package,
which stores preferences for Internet programs such as mail address,
default homepage, etc. Also, Internet Config contains an elaborate set
of mappings from Macintosh creator/type codes to foreign filename
extensions plus information on how to transfer files (binary, ascii,
etc). 

There is a low-level companion module \code{icglue} which provides the
basic ic access functionality. This low-level module is not
documented, but the docstrings of the routines document the parameters
and the routine names are the same as for the Pascal or C API to
Internet Config, so the standard IC programmers documentation can be
used if this module is needed.

The \code{ic} module defines the \code{error} exception and symbolic
names for all error codes IC can produce, see the source for details.

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

\begin{funcdesc}{IC}{\optional{signature, ic}}
Create an internet config object. The signature is a 4-char creator
code of the current application (default \code{'Pyth'}) which may
influence some of ICs settings. The optional \var{ic} argument is a
low-level \code{icinstance} created beforehand, this may be useful if
you want to get preferences from a different config file, etc.
\end{funcdesc}

\begin{funcdesc}{launchurl}{url \optional{, hint}}
\end{funcdesc}
\begin{funcdesc}{parseurl}{data \optional{, start, end, hint}}
\end{funcdesc}
\begin{funcdesc}{mapfile}{file}
\end{funcdesc}
\begin{funcdesc}{maptypecreator}{type, creator \optional{, filename}}
\end{funcdesc}
\begin{funcdesc}{settypecreator}{file}
These functions are ``shortcuts'' to the methods of the same name,
described below.
\end{funcdesc}


\subsection{IC objects}

IC objects have a mapping interface, hence to obtain the mail address
you simply get \code{ic['MailAddress']}. Assignment also works, and
changes the option in the configuration file.

The module knows about various datatypes, and converts the internal IC
representation to a ``logical'' python datastructure. Running the
\code{ic} module standalone will run a test program that lists all
keys and values in your IC database, this will have to server as
documentation.

If the module does not know how to represent the data it returns an
instance of the \var{ICOpaqueData} type, with the raw data in its
\var{data} attribute. Objects of this type are also acceptable values
for assignment.

Besides the dictionary interface IC objects have the following methods:

\renewcommand{\indexsubitem}{(IC object attribute)}

\begin{funcdesc}{launchurl}{url \optional{, hint}}
Parse the given URL, lauch the correct application and pass it the
URL. The optional \var{hint} can be a scheme name such as
\code{mailto:}, in which case incomplete URLs are completed with this
scheme (otherwise incomplete URLs are invalid). 
\end{funcdesc}

\begin{funcdesc}{parseurl}{data \optional{, start, end, hint}}
Find an URL somewhere in \var{data} and return start position, end
position and the URL. The optional \var{start} and \var{end} can be
used to limit the search, so for instance if a user clicks in a long
textfield you can pass the whole textfield and the click-position in
\var{start} and this routine will return the whole URL in which the
user clicked. \var{Hint} is again an optional scheme used to complete
incomplete URLs.
\end{funcdesc}

\begin{funcdesc}{mapfile}{file}
Return the mapping entry for the given \var{file}, which can be passed
as either a filename or an \var{FSSpec} object, and which need not
exist.

The mapping entry is returned as a tuple \code{(}\var{version},
\var{type}, \var{creator}, \var{postcreator}, \var{flags},
\var{extension}, \var{appname}, \var{postappname}, \var{mimetype},
\var{entryname}\code{)}, where \var{version} is the entry version
number, \var{type} is the 4-char filetype, \var{creator} is the 4-char
creator type, \var{postcreator} is the 4-char creator code of an
optional application to post-process the file after downloading,
\var{flags} are various bits specifying whether to transfer in binary
or ascii and such, \var{extension} is the filename extension for this
file type, \var{appname} is the printable name of the application to
which this file belongs, \var{postappname} is the name of the
postprocessing application, \var{mimetype} is the MIME type of this
file and \var{entryname} is the name of this entry.
\end{funcdesc}

\begin{funcdesc}{maptypecreator}{type, creator \optional{, filename}}
Return the mapping entry for files with given 4-char \var{type} and
\var{creator} codes. The optional \var{filename} may be specified to
further help finding the correct entry (if the creator code is
\code{'????'}, for instance).

The mapping entry is returned in the same format as for \var{mapfile}.
\end{funcdesc}

\begin{funcdesc}{settypecreator}{file}
Given an existing \var{file}, specified either as a filename or as an
\var{FSSpec} record, set its creator and type correctly based on its
extension. The finder is told about the change, so the finder icon
will be updated quickly.
\end{funcdesc}
