\section{\module{ic} ---
         Access to Internet Config}

\declaremodule{builtin}{ic}
  \platform{Mac}
\modulesynopsis{Access to Internet Config.}


This module provides access to Macintosh Internet
Config\index{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.). Since MacOS 9, this module is a control panel named Internet.

There is a low-level companion module
\module{icglue}\refbimodindex{icglue} which provides the basic
Internet Config 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 \module{ic} module defines the \exception{error} exception and
symbolic names for all error codes Internet Config can produce; see
the source for details.

\begin{excdesc}{error}
Exception raised on errors in the \module{ic} module.
\end{excdesc}


The \module{ic} module defines the following class and function:

\begin{classdesc}{IC}{\optional{signature\optional{, ic}}}
Create an Internet Config object. The signature is a 4-character 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{icglue.icinstance} created beforehand, this may be
useful if you want to get preferences from a different config file,
etc.
\end{classdesc}

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


\subsection{IC Objects}

\class{IC} objects have a mapping interface, hence to obtain the mail
address you simply get \code{\var{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 data structure. Running the
\module{ic} module standalone will run a test program that lists all
keys and values in your IC database, this will have to serve as
documentation.

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

Besides the dictionary interface, \class{IC} objects have the
following methods:


\begin{methoddesc}{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.  If \var{hint} is not provided, incomplete URLs are invalid.
\end{methoddesc}

\begin{methoddesc}{parseurl}{data\optional{, start\optional{, end\optional{, 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
text field you can pass the whole text field and the click-position in
\var{start} and this routine will return the whole URL in which the
user clicked.  As above, \var{hint} is an optional scheme used to
complete incomplete URLs.
\end{methoddesc}

\begin{methoddesc}{mapfile}{file}
Return the mapping entry for the given \var{file}, which can be passed
as either a filename or an \function{macfs.FSSpec()} result, 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})}, where \var{version} is the entry version
number, \var{type} is the 4-character filetype, \var{creator} is the
4-character creator type, \var{postcreator} is the 4-character 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{methoddesc}

\begin{methoddesc}{maptypecreator}{type, creator\optional{, filename}}
Return the mapping entry for files with given 4-character \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{methoddesc}

\begin{methoddesc}{settypecreator}{file}
Given an existing \var{file}, specified either as a filename or as an
\function{macfs.FSSpec()} result, 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{methoddesc}
