\section{\module{chunk} ---
	 Read IFF chunked data}

\declaremodule{standard}{chunk}
\modulesynopsis{Module to read IFF chunks.}
\moduleauthor{Sjoerd Mullender}{sjoerd@acm.org}
\sectionauthor{Sjoerd Mullender}{sjoerd@acm.org}



This module provides an interface for reading files that use EA IFF 85
chunks.\footnote{``EA IFF 85'' Standard for Interchange Format Files,
Jerry Morrison, Electronic Arts, January 1985.}  This format is used
in at least the Audio\index{Audio Interchange File
Format}\index{AIFF}\index{AIFF-C} Interchange File Format
(AIFF/AIFF-C) and the Real\index{Real Media File Format} Media File
Format\index{RMFF} (RMFF).  The WAVE audio file format is closely
related and can also be read using this module.

A chunk has the following structure:

\begin{tableiii}{c|c|l}{textrm}{Offset}{Length}{Contents}
  \lineiii{0}{4}{Chunk ID}
  \lineiii{4}{4}{Size of chunk in big-endian byte order, not including the 
                 header}
  \lineiii{8}{\var{n}}{Data bytes, where \var{n} is the size given in
                       the preceding field}
  \lineiii{8 + \var{n}}{0 or 1}{Pad byte needed if \var{n} is odd and
                                chunk alignment is used}
\end{tableiii}

The ID is a 4-byte string which identifies the type of chunk.

The size field (a 32-bit value, encoded using big-endian byte order)
gives the size of the chunk data, not including the 8-byte header.

Usually an IFF-type file consists of one or more chunks.  The proposed
usage of the \class{Chunk} class defined here is to instantiate an
instance at the start of each chunk and read from the instance until
it reaches the end, after which a new instance can be instantiated.
At the end of the file, creating a new instance will fail with a
\exception{EOFError} exception.

\begin{classdesc}{Chunk}{file\optional{, align, bigendian, inclheader}}
Class which represents a chunk.  The \var{file} argument is expected
to be a file-like object.  An instance of this class is specifically
allowed.  The only method that is needed is \method{read()}.  If the
methods \method{seek()} and \method{tell()} are present and don't
raise an exception, they are also used.  If these methods are present
and raise an exception, they are expected to not have altered the
object.  If the optional argument \var{align} is true, chunks are
assumed to be aligned on 2-byte boundaries.  If \var{align} is
false, no alignment is assumed.  The default value is true.  If the
optional argument \var{bigendian} is false, the chunk size is assumed
to be in little-endian order.  This is needed for WAVE audio files.
The default value is true.  If the optional argument \var{inclheader}
is true, the size given in the chunk header includes the size of the
header.  The default value is false.
\end{classdesc}

A \class{Chunk} object supports the following methods:

\begin{methoddesc}{getname}{}
Returns the name (ID) of the chunk.  This is the first 4 bytes of the
chunk.
\end{methoddesc}

\begin{methoddesc}{getsize}{}
Returns the size of the chunk.
\end{methoddesc}

\begin{methoddesc}{close}{}
Close and skip to the end of the chunk.  This does not close the
underlying file.
\end{methoddesc}

The remaining methods will raise \exception{IOError} if called after
the \method{close()} method has been called.

\begin{methoddesc}{isatty}{}
Returns \code{False}.
\end{methoddesc}

\begin{methoddesc}{seek}{pos\optional{, whence}}
Set the chunk's current position.  The \var{whence} argument is
optional and defaults to \code{0} (absolute file positioning); other
values are \code{1} (seek relative to the current position) and
\code{2} (seek relative to the file's end).  There is no return value.
If the underlying file does not allow seek, only forward seeks are
allowed.
\end{methoddesc}

\begin{methoddesc}{tell}{}
Return the current position into the chunk.
\end{methoddesc}

\begin{methoddesc}{read}{\optional{size}}
Read at most \var{size} bytes from the chunk (less if the read hits
the end of the chunk before obtaining \var{size} bytes).  If the
\var{size} argument is negative or omitted, read all data until the
end of the chunk.  The bytes are returned as a string object.  An
empty string is returned when the end of the chunk is encountered
immediately.
\end{methoddesc}

\begin{methoddesc}{skip}{}
Skip to the end of the chunk.  All further calls to \method{read()}
for the chunk will return \code{''}.  If you are not interested in the
contents of the chunk, this method should be called so that the file
points to the start of the next chunk.
\end{methoddesc}
