summaryrefslogtreecommitdiffstats
path: root/mimelib/doc
diff options
context:
space:
mode:
Diffstat (limited to 'mimelib/doc')
-rw-r--r--mimelib/doc/address.html153
-rw-r--r--mimelib/doc/addrlist.html214
-rw-r--r--mimelib/doc/binhex.html169
-rw-r--r--mimelib/doc/body.html308
-rw-r--r--mimelib/doc/bodypart.html157
-rw-r--r--mimelib/doc/boyermor.html57
-rw-r--r--mimelib/doc/datetime.html340
-rw-r--r--mimelib/doc/disptype.html224
-rw-r--r--mimelib/doc/entity.html168
-rw-r--r--mimelib/doc/field.html305
-rw-r--r--mimelib/doc/fieldbdy.html144
-rw-r--r--mimelib/doc/group.html221
-rw-r--r--mimelib/doc/headers.html512
-rw-r--r--mimelib/doc/mailbox.html238
-rw-r--r--mimelib/doc/mboxlist.html232
-rw-r--r--mimelib/doc/mechansm.html172
-rw-r--r--mimelib/doc/mediatyp.html311
-rw-r--r--mimelib/doc/message.html136
-rw-r--r--mimelib/doc/mimepp.html80
-rw-r--r--mimelib/doc/msgcmp.html298
-rw-r--r--mimelib/doc/msgid.html198
-rw-r--r--mimelib/doc/nntp.html384
-rw-r--r--mimelib/doc/param.html189
-rw-r--r--mimelib/doc/pop.html286
-rw-r--r--mimelib/doc/protocol.html274
-rw-r--r--mimelib/doc/string.html717
-rw-r--r--mimelib/doc/text.html149
-rw-r--r--mimelib/doc/util.html111
-rw-r--r--mimelib/doc/uuencode.html110
29 files changed, 6857 insertions, 0 deletions
diff --git a/mimelib/doc/address.html b/mimelib/doc/address.html
new file mode 100644
index 000000000..c85046aa7
--- /dev/null
+++ b/mimelib/doc/address.html
@@ -0,0 +1,153 @@
+<HTML>
+<HEAD>
+ <TITLE> DwAddress Man Page </TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<H2>
+ <FONT COLOR="navy"> NAME </FONT>
+</H2>
+<P>
+DwAddress -- Abstract class representing an RFC-822 address
+<H2>
+ <FONT COLOR="navy"> SYNOPSIS </FONT>
+</H2>
+<PRE>class DW_EXPORT DwAddress : public <A HREF="fieldbdy.html">DwFieldBody</A> {
+
+ friend class DwAddressList;
+
+public:
+
+ virtual ~DwAddress();
+ DwBool <A HREF="address.html#IsMailbox">IsMailbox</A>() const;
+ DwBool <A HREF="address.html#IsGroup">IsGroup</A>() const;
+ inline DwBool <A HREF="address.html#IsValid">IsValid</A>() const;
+ DwAddress* <A HREF="address.html#Next">Next</A>() const;
+ void <A HREF="address.html#SetNext">SetNext</A>(DwAddress* aAddress);
+
+protected:
+
+ <A HREF="address.html#DwAddress">DwAddress</A>();
+ <A HREF="address.html#DwAddress">DwAddress</A>(const DwAddress&amp; aAddr);
+ <A HREF="address.html#DwAddress">DwAddress</A>(const DwString&amp; aStr, DwMessageComponent* aParent=0);
+ const DwAddress&amp; <A HREF="address.html#op_eq">operator =</A> (const DwAddress&amp; aAddr);
+ int mIsValid;
+
+public:
+
+ virtual void <A HREF="address.html#PrintDebugInfo">PrintDebugInfo</A>(ostream&amp; aStrm, int aDepth=0) const;
+ virtual void <A HREF="address.html#CheckInvariants">CheckInvariants</A>() const;
+
+protected:
+
+ void _PrintDebugInfo(ostream&amp; aStrm) const;
+};
+</PRE>
+<H2>
+ <FONT COLOR="navy"> DESCRIPTION </FONT>
+</H2>
+<P>
+<B><TT>DwAddress</TT></B> represents an <I>address</I> as described in RFC-822.
+You may not instantiate objects of type <B><TT>DwAddress</TT></B>, since
+<B><TT>DwAddress</TT></B> is an abstract base class. Instead, you must
+instantiate objects of type
+<B><TT><A HREF="mailbox.html">DwMailbox</A></TT></B> or
+<B><TT><A HREF="group.html">DwGroup</A></TT></B>, which are subclasses of
+<B><TT>DwAddress</TT></B>.
+<P>
+To determine the actual type of a <B><TT>DwAddress</TT></B> object, you can
+use the member functions <B><TT>IsMailbox()</TT></B> and
+<B><TT>IsGroup()</TT></B>.
+<P>
+If the string representation assigned to a <B><TT>DwAddress</TT></B> is
+improperly formed, the parse method will fail. To determine if the parse
+method failed, call the member function <B><TT>IsValid()</TT></B>.
+<P>
+A <B><TT>DwAddress</TT></B> object can be contained in list. To get the next
+<B><TT>DwAddress</TT></B> object in the list, call the member function
+<B><TT>Next()</TT></B>
+<H2>
+ <FONT COLOR="navy"> Public Member Functions </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> DwBool <A NAME="IsMailbox">IsMailbox</A>() const
+</B></FONT>
+<P>
+Returns true value if this object is a <B><TT>DwMailbox</TT></B>.
+<P>
+<FONT COLOR="teal"><B> DwBool <A NAME="IsGroup">IsGroup</A>() const
+</B></FONT>
+<P>
+Returns true value if this object is a <B><TT>DwGroup</TT></B>.
+<P>
+<FONT COLOR="teal"><B> inline DwBool <A NAME="IsValid">IsValid</A>() const
+</B></FONT>
+<P>
+Returns true value if the last parse was successful. Returns false if the
+last parse failed (bad address) or the <B><TT>Parse()</TT></B> member function
+was never called.
+<P>
+<FONT COLOR="teal"><B> DwAddress* <A NAME="Next">Next</A>() const </B></FONT>
+<P>
+Returns the next <B><TT>DwAddress</TT></B> object in the list when the object
+is included in a list of addresses. The function is used when iterating a
+list.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="SetNext">SetNext</A>(DwAddress* aAddress)
+</B></FONT>
+<P>
+Sets the next <B><TT>DwAddress</TT></B> object in the list. This member function
+generally should not be used, since <B><TT>DwAddressList</TT></B> has member
+functions to manage its list of <B><TT>DwAddress</TT></B> objects.
+<P>
+<FONT COLOR="teal"><B> virtual void
+<A NAME="PrintDebugInfo">PrintDebugInfo</A>(ostream&amp; aStrm, int aDepth=0)
+const </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+prints debugging information about this object to <B><TT>aStrm</TT></B>.
+It will also call <B><TT>PrintDebugInfo()</TT></B> for any of its child
+components down to a level of <B><TT>aDepth</TT></B>.
+<P>
+This member function is available only in the debug version of the library.
+<P>
+<FONT COLOR="teal"><B> virtual void
+<A NAME="CheckInvariants">CheckInvariants</A>() const </B></FONT>
+<P>
+Aborts if one of the invariants of the object fails. Use this member function
+to track down bugs.
+<P>
+This member function is available only in the debug version of the library.
+<H2>
+ <FONT COLOR="navy"> Protected Member Functions </FONT>
+</H2>
+<P>
+<B><FONT COLOR="teal"> <A NAME="DwAddress">DwAddress</A>() <BR>
+DwAddress(const DwAddress&amp; aAddr) <BR>
+DwAddress(const DwString&amp; aStr, DwMessageComponent* aParent=0)
+</FONT></B>
+<P>
+The first constructor is the default constructor, which sets the
+<B><TT>DwAddress</TT></B> object's string representation to the empty string
+and sets its parent to <B><TT>NULL</TT></B>.
+<P>
+The second constructor is the copy constructor, which copies the string
+representation and all attributes from <B><TT>aAddress</TT></B>. The parent
+of the new <B><TT>DwAddress</TT></B> object is set to
+<B><TT>NULL</TT></B>.
+<P>
+The third constructor copies <B><TT>aStr</TT></B> to the
+<B><TT>DwAddress</TT></B> object's string representation and sets
+<B><TT>aParent</TT></B> as its parent. The virtual member function
+<B><TT>Parse()</TT></B> should be called immediately after this constructor
+in order to parse the string representation. Unless it is
+<B><TT>NULL</TT></B>, <B><TT>aParent</TT></B> should point to an object of
+a class derived from <B><TT>DwField</TT></B>.
+<P>
+<B><FONT COLOR="teal"> const DwAddress&amp; <A NAME="op_eq">operator =</A>
+(const DwAddress&amp; aAddr) </FONT></B>
+<P>
+This is the assignment operator, which performs a deep copy of
+<B><TT>aAddr</TT></B>. The parent node of the <B><TT>DwAddress</TT></B> object
+is not changed.
+<P>
+</BODY></HTML>
diff --git a/mimelib/doc/addrlist.html b/mimelib/doc/addrlist.html
new file mode 100644
index 000000000..d3a563eef
--- /dev/null
+++ b/mimelib/doc/addrlist.html
@@ -0,0 +1,214 @@
+<HTML>
+<HEAD>
+ <TITLE> DwAddressList Man Page </TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<H2>
+ <FONT COLOR="navy"> NAME </FONT>
+</H2>
+<P>
+DwAddressList -- Class representing a list of RFC-822 addresses
+<H2>
+ <FONT COLOR="navy"> SYNOPSIS </FONT>
+</H2>
+<PRE>class DW_EXPORT DwAddressList : public <A HREF="fieldbdy.html">DwFieldBody</A> {
+
+public:
+
+ <A HREF="addrlist.html#DwAddressList">DwAddressList</A>();
+ <A HREF="addrlist.html#DwAddressList">DwAddressList</A>(const DwAddressList&amp; aList);
+ <A HREF="addrlist.html#DwAddressList">DwAddressList</A>(const DwString&amp; aStr, DwMessageComponent* aParent=0);
+ virtual ~DwAddressList();
+ const DwAddressList&amp; <A HREF="addrlist.html#op_eq">operator =</A> (const DwAddressList&amp; aList);
+ virtual void <A HREF="addrlist.html#Parse">Parse</A>();
+ virtual void <A HREF="addrlist.html#Assemble">Assemble</A>();
+ virtual DwMessageComponent* <A HREF="addrlist.html#Clone">Clone</A>() const;
+ DwAddress* <A HREF="addrlist.html#FirstAddress">FirstAddress</A>() const;
+ void Add(DwAddress* a<A HREF="addrlist.html#Add">Add</A>r);
+ void <A HREF="addrlist.html#Remove">Remove</A>(DwAddress* aAddr);
+ void <A HREF="addrlist.html#DeleteAll">DeleteAll</A>();
+ static DwAddressList* <A HREF="addrlist.html#NewAddressList">NewAddressList</A>(const DwString&amp; aStr,
+ DwMessageComponent* aParent);
+ static DwAddressList* (*<A HREF="addrlist.html#sNewAddressList">sNewAddressList</A>)(const DwString&amp;,
+ DwMessageComponent*);
+
+protected:
+
+ DwAddress* <A HREF="addrlist.html#mFirstAddress">mFirstAddress</A>;
+
+public:
+
+ virtual void <A HREF="addrlist.html#PrintDebugInfo">PrintDebugInfo</A>(ostream&amp; aStrm, int aDepth=0) const;
+ virtual void <A HREF="addrlist.html#CheckInvariants">CheckInvariants</A>() const;
+
+protected:
+
+ void _PrintDebugInfo(ostream&amp; aStrm) const;
+};
+</PRE>
+<H2>
+ <FONT COLOR="navy"> DESCRIPTION </FONT>
+</H2>
+<P>
+<B><TT>DwAddressList</TT></B> represents a list of <I>addresses</I> as described
+in RFC-822. In MIME++, <B><TT>DwAddressList</TT></B> is a container for objects
+of type <B><TT><A HREF="address.html">DwAddress</A></TT></B>, and it contains
+various member functions to manage its contained objects.
+<B><TT>DwAddressList</TT></B> is also a
+<B><TT><A HREF="fieldbdy.html">DwFieldBody</A></TT></B>. This reflects the
+fact that certain RFC-822 header fields, such as the ``To'' header field,
+have a list of addresses as their field bodies.
+<H2>
+ <FONT COLOR="navy"> Public Member Functions </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> <A NAME="DwAddressList">DwAddressList</A>() <BR>
+DwAddressList(const DwAddressList&amp; aList) <BR>
+DwAddressList(const DwString&amp; aStr, DwMessageComponent* aParent=0)
+</B></FONT>
+<P>
+The first constructor is the default constructor, which sets the
+<B><TT>DwAddressList</TT></B> object's string representation to the empty
+string and sets its parent to <B><TT>NULL</TT></B>.
+<P>
+The second constructor is the copy constructor, which copies the string
+representation and all <B><TT>DwAddress</TT></B> objects from
+<B><TT>aList</TT></B>. The parent of the new
+<B><TT>DwAddressList</TT></B> object is set to <B><TT>NULL</TT></B>.
+<P>
+The third constructor copies <B><TT>aStr</TT></B> to the
+<B><TT>DwAddressList</TT></B> object's string representation and sets
+<B><TT>aParent</TT></B> as its parent. The virtual member function
+<B><TT>Parse()</TT></B> should be called immediately after this constructor
+in order to parse the string representation. Unless it is
+<B><TT>NULL</TT></B>, <B><TT>aParent</TT></B> should point to an object of
+a class derived from <B><TT>DwField</TT></B>.
+<P>
+<FONT COLOR="teal"><B> const DwAddressList&amp; <A NAME="op_eq">operator
+=</A> (const DwAddressList&amp; aList) </B></FONT>
+<P>
+This is the assignment operator, which performs a deep copy of
+<B><TT>aList</TT></B>. The parent node of the
+<B><TT>DwAddressList</TT></B> object is not changed.
+<P>
+<FONT COLOR="teal"><B> virtual void <A NAME="Parse">Parse</A>() </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+executes the parse method for <B><TT>DwAddressList</TT></B> objects. The
+parse method creates or updates the broken-down representation from the string
+representation. For <B><TT>DwAddressList</TT></B> objects, the parse method
+parses the string representation to create a list of
+<B><TT>DwAddress</TT></B> objects. This member function also calls the
+<B><TT>Parse()</TT></B> member function of each <B><TT>DwAddress</TT></B>
+object in its list.
+<P>
+You should call this member function after you set or modify the string
+representation, and before you access any of the contained
+<B><TT>DwAddress</TT></B> objects.
+<P>
+This function clears the is-modified flag.
+<P>
+<FONT COLOR="teal"><B> virtual void <A NAME="Assemble">Assemble</A>()
+</B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+executes the assemble method for <B><TT>DwAddressList</TT></B> objects. The
+assemble method creates or updates the string representation from the broken-down
+representation. That is, the assemble method builds the string representation
+from its list of <B><TT>DwAddress</TT></B> objects. Before it builds the
+string representation for the <B><TT>DwAddressList</TT></B> object, this
+function first calls the <B><TT>Assemble()</TT></B> member function of each
+<B><TT>DwAddress</TT></B> object in its list.
+<P>
+You should call this member function after you set or modify any of the contained
+<B><TT>DwAddress</TT></B> objects, and before you retrieve the string
+representation.
+<P>
+This function clears the is-modified flag.
+<P>
+<FONT COLOR="teal"><B> virtual DwMessageComponent*
+<A NAME="Clone">Clone</A>() const </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+creates a new <B><TT>DwAddressList</TT></B> on the free store that has the
+same value as this <B><TT>DwAddressList</TT></B> object. The basic idea is
+that of a virtual copy constructor.
+<P>
+<FONT COLOR="teal"><B> DwAddress* <A NAME="FirstAddress">FirstAddress</A>()
+const </B></FONT>
+<P>
+Gets the first <B><TT>DwAddress</TT></B> object in the list. Use the member
+function <B><TT>DwAddress::Next()</TT></B> to iterate. Returns
+<B><TT>NULL</TT></B> if the list is empty.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="Add">Add</A>(DwAddress* aAddr)
+</B></FONT>
+<P>
+Adds <B><TT>aAddr</TT></B> to the end of the list of
+<B><TT>DwAddress</TT></B> objects maintained by this
+<B><TT>DwAddressList</TT></B> object.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="Remove">Remove</A>(DwAddress* aAddr)
+</B></FONT>
+<P>
+Removes <B><TT>aAddr</TT></B> from the list of <B><TT>DwAddress</TT></B>
+objects maintained by this <B><TT>DwAddressList</TT></B> object. The
+<B><TT>DwAddress</TT></B> object is not deleted by this member function.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="DeleteAll">DeleteAll</A>() </B></FONT>
+<P>
+Removes and deletes all <B><TT>DwAddress</TT></B> objects from the list
+maintained by this <B><TT>DwAddressList</TT></B> object.
+<P>
+<FONT COLOR="teal"><B> static DwAddressList*
+<A NAME="NewAddressList">NewAddressList</A>(const DwString&amp; aStr,
+DwMessageComponent* aParent) </B></FONT>
+<P>
+Creates a new <B><TT>DwAddressList</TT></B> object on the free store. If
+the static data member <B><TT>sNewAddressList</TT></B> is
+<B><TT>NULL</TT></B>, this member function will create a new
+<B><TT>DwAddressList</TT></B> and return it. Otherwise,
+<B><TT>NewAddressList()</TT></B> will call the user-supplied function pointed
+to by <B><TT>sNewAddressList</TT></B>, which is assumed to return an object
+from a class derived from <B><TT>DwAddressList</TT></B>, and return that
+object.
+<P>
+<FONT COLOR="teal"><B> virtual void
+<A NAME="PrintDebugInfo">PrintDebugInfo</A>(ostream&amp; aStrm, int aDepth=0)
+const </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+prints debugging information about this object to <B><TT>aStrm</TT></B>.
+It will also call <B><TT>PrintDebugInfo()</TT></B> for any of its child
+components down to a level of <B><TT>aDepth</TT></B>.
+<P>
+This member function is available only in the debug version of the library.
+<P>
+<FONT COLOR="teal"><B> virtual void
+<A NAME="CheckInvariants">CheckInvariants</A>() const </B></FONT>
+<P>
+Aborts if one of the invariants of the object fails. Use this member function
+to track down bugs.
+<P>
+This member function is available only in the debug version of the library.
+<H2>
+ <FONT COLOR="navy"> Public Data Members </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> static DwAddressList*
+(*<A NAME="sNewAddressList">sNewAddressList</A>)(const DwString&amp;,
+DwMessageComponent*) </B></FONT>
+<P>
+If <B><TT>sNewAddressList</TT></B> is not <B><TT>NULL</TT></B>, it is assumed
+to point to a user-supplied function that returns a pointer to an object
+from a class derived from <B><TT>DwAddressList</TT></B>.
+<H2>
+ <FONT COLOR="navy"> Protected Data Members </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> DwAddress* <A NAME="mFirstAddress">mFirstAddress</A>
+</B></FONT>
+<P>
+Points to first <B><TT>DwMailbox</TT></B> object in list.
+<P>
+</BODY></HTML>
diff --git a/mimelib/doc/binhex.html b/mimelib/doc/binhex.html
new file mode 100644
index 000000000..6d7f7ffb3
--- /dev/null
+++ b/mimelib/doc/binhex.html
@@ -0,0 +1,169 @@
+<HTML>
+<HEAD>
+ <TITLE> DwBinhex Man Page </TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<H2>
+ <FONT COLOR="navy"> NAME </FONT>
+</H2>
+<P>
+DwBinhex -- Class for converting files to or from Binhex 4.0 format
+<H2>
+ <FONT COLOR="navy"> SYNOPSIS </FONT>
+</H2>
+<PRE>
+class DW_EXPORT DwBinhex {
+
+public:
+
+ <A HREF="binhex.html#DwBinhex">DwBinhex</A>();
+ virtual ~DwBinhex();
+ void <A HREF="binhex.html#Initialize">Initialize</A>();
+ const char* <A HREF="binhex.html#FileName">FileName</A>() const;
+ void <A HREF="binhex.html#SetFileName">SetFileName</A>(const char* aName);
+ void <A HREF="binhex.html#FileType">FileType</A>(char* aBuf) const;
+ void <A HREF="binhex.html#SetFileType">SetFileType</A>(const char* aType);
+ void <A HREF="binhex.html#FileCreator">FileCreator</A>(char* aBuf) const;
+ void <A HREF="binhex.html#SetFileCreator">SetFileCreator</A>(const char* aType);
+ DwUint8 <A HREF="binhex.html#Flag1">Flag1</A>() const;
+ void <A HREF="binhex.html#SetFlag1">SetFlag1</A>(DwUint8 aFlag);
+ DwUint8 <A HREF="binhex.html#Flag2">Flag2</A>() const;
+ void <A HREF="binhex.html#SetFlag2">SetFlag2</A>(DwUint8 aFlag);
+ const DwString&amp; <A HREF="binhex.html#DataFork">DataFork</A>() const;
+ void <A HREF="binhex.html#SetDataFork">SetDataFork</A>(const DwString&amp; aStr);
+ const DwString&amp; <A HREF="binhex.html#ResourceFork">ResourceFork</A>() const;
+ void <A HREF="binhex.html#SetResourceFork">SetResourceFork</A>(const DwString&amp; aStr);
+ const DwString&amp; <A HREF="binhex.html#BinhexChars">BinhexChars</A>() const;
+ void <A HREF="binhex.html#SetBinhexChars">SetBinhexChars</A>(const DwString&amp; aStr);
+ void <A HREF="binhex.html#Encode">Encode</A>();
+ int <A HREF="binhex.html#Decode">Decode</A>();
+};
+</PRE>
+<H2>
+ <FONT COLOR="navy"> DESCRIPTION </FONT>
+</H2>
+<P>
+<B><TT>DwBinhex</TT></B> converts data to or from Binhex 4.0 format. Binhex
+is a format used almost exclusively on Macintosh computers for encoding files
+into text characters for transmission through the mail transport system or
+for archiving on non-Macintosh systems. The format includes the file name,
+file type, file creator, Macintosh Finder flags, data fork, resource fork,
+and checksums. In MIME, the use of Binhex is deprecated; applesingle and
+appledouble are the preferred format for encoding Macintosh files. The Binhex
+4.0 format is described in RFC-1741. Binhex is a widely used, <I>de facto</I>
+standard, but it is not an official Internet standard.
+<P>
+To use <B><TT>DwBinhex</TT></B> for converting a Macintosh file to Binex
+format, call the member functions <B><TT>SetFileName()</TT></B>,
+<B><TT>SetFileType()</TT></B>, <B><TT>SetFileCreator()</TT></B>,
+<B><TT>SetFlag1()</TT></B>, <B><TT>SetFlag2()</TT></B>,
+<B><TT>SetDataFork()</TT></B>, and <B><TT>SetResourceFork()</TT></B> to set
+the elements to be encoded. Any elements that are not set by calling one
+of the member functions are assigned reasonable defaults. Then call the
+<B><TT>Encode()</TT></B> member function to actually perform the conversion
+to Binhex. Finally, call <B><TT>BinhexChars()</TT></B> to retrieve the Binhex
+characters.
+<P>
+To use <B><TT>DwBinhex</TT></B> for converting a Macintosh file from Binhex
+format, call the member function <B><TT>SetBinhexChars()</TT></B> to assign
+the Binhex characters to be converted. Then call <B><TT>Decode()</TT></B>
+to actually perform the conversion. Finally, call
+<B><TT>FileName()</TT></B>, <B><TT>FileType()</TT></B>,
+<B><TT>FileCreator()</TT></B>, <B><TT>Flag1()</TT></B>,
+<B><TT>Flag2()</TT></B>, <B><TT>DataFork()</TT></B>, and
+<B><TT>ResourceFork()</TT></B> to extract the decoded elements.
+<P>
+Note: <B><TT>DwBinhex</TT></B> does not change the file name in any way.
+When you you are dealing with file names, you should be aware of the fact
+that some filenames that are valid on a Macintosh may cause problems or
+unexpected results on a non-Macintosh system, and vice versa. Such problem
+characters include slash ('/'), colon (':'), space and possibly other characters.
+<H2>
+ <FONT COLOR="navy"> Public Member Functions </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> <A NAME="DwBinhex">DwBinhex</A>() </B></FONT>
+<P>
+This is the default constructor.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="Initialize">Initialize</A>() </B></FONT>
+<P>
+Resets the object's internal state to its initial state. Call this member
+function to reuse the object for more than one encode or decode operation.
+<P>
+<FONT COLOR="teal"><B> const char* <A NAME="FileName">FileName</A>()
+const<BR>
+void <A NAME="SetFileName">SetFileName</A>(const char* aName) </B></FONT>
+<P>
+Gets or sets the file name. The file name is restricted to a maximum length
+of 63 characters.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="FileType">FileType</A>(char* aBuf)
+const<BR>
+void <A NAME="SetFileType">SetFileType</A>(const char* aType) </B></FONT>
+<P>
+Gets or sets the file type. All Macintosh files have a file type, which is
+represented by four bytes. Some examples include "TEXT" for a text file,
+or "APPL" for an application. <B><TT>aBuf</TT></B> should point to an array
+of at least four characters.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="FileCreator">FileCreator</A>(char* aBuf)
+const <BR>
+void <A NAME="SetFileCreator">SetFileCreator</A>(const char* aType)
+</B></FONT>
+<P>
+Gets or sets the file creator. Most Macintosh files have a creator, which
+is represented by a signature of four bytes. The creator specifies which
+application to launch when a file's icon is double clicked.
+<B><TT>aBuf</TT></B> should point to an array of at least four characters.
+<P>
+<FONT COLOR="teal"><B> DwUint8 <A NAME="Flag1">Flag1</A>() const <BR>
+void <A NAME="SetFlag1">SetFlag1</A>(DwUint8 aFlag) </B></FONT>
+<P>
+Gets or sets the first byte of the Macintosh Finder flags. For files that
+originate on non-Macintosh systems, this byte should be set to zero (the
+default).
+<P>
+<FONT COLOR="teal"><B> DwUint8 <A NAME="Flag2">Flag2</A>() const <BR>
+void <A NAME="SetFlag2">SetFlag2</A>(DwUint8 aFlag) </B></FONT>
+<P>
+Gets or sets the second byte of the Macintosh Finder flags. For files that
+originate on non-Macintosh systems, this byte should be set to zero (the
+default).
+<P>
+<FONT COLOR="teal"><B> const DwString&amp; <A NAME="DataFork">DataFork</A>()
+const <BR>
+void <A NAME="SetDataFork">SetDataFork</A>(const DwString&amp; aStr)
+</B></FONT>
+<P>
+Gets or sets the data fork for the file. For files that originate on
+non-Macintosh systems, such as a GIF or JPEG file, the file data should be
+set as the data fork.
+<P>
+<FONT COLOR="teal"><B> const DwString&amp;
+<A NAME="ResourceFork">ResourceFork</A>() const<BR>
+void <A NAME="SetResourceFork">SetResourceFork</A>(const DwString&amp; aStr)
+</B></FONT>
+<P>
+Gets or sets the resource fork for the file. For files that originate on
+non-Macintosh systems, such as a GIF or JPEG file, the resource should be
+normally be empty.
+<P>
+<FONT COLOR="teal"><B> const DwString&amp;
+<A NAME="BinhexChars">BinhexChars</A>() const<BR>
+void <A NAME="SetBinhexChars">SetBinhexChars</A>(const DwString&amp; aStr)
+</B></FONT>
+<P>
+Gets or sets the characters of the Binhex encoded file.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="Encode">Encode</A>() </B></FONT>
+<P>
+Converts the Macintosh file information to Binhex format.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="Decode">Decode</A>() </B></FONT>
+<P>
+Converts the Macintosh file information from Binhex format. Returns zero
+if the decode operation completes successufully; otherwise, the function
+returns -1.
+<P>
+</BODY></HTML>
diff --git a/mimelib/doc/body.html b/mimelib/doc/body.html
new file mode 100644
index 000000000..1526751a4
--- /dev/null
+++ b/mimelib/doc/body.html
@@ -0,0 +1,308 @@
+<HTML>
+<HEAD>
+ <TITLE> DwBody Man Page </TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<H2>
+ <FONT COLOR="navy"> NAME </FONT>
+</H2>
+<P>
+DwBody -- Class representing a MIME message body
+<H2>
+ <FONT COLOR="navy"> SYNOPSIS </FONT>
+</H2>
+<PRE>class DW_EXPORT DwBody : public <A HREF="msgcmp.html">DwMessageComponent</A> {
+
+ friend class DwHeaders;
+ friend class DwEntity;
+ friend class DwBodyPart;
+
+public:
+
+ <A HREF="body.html#DwBody">DwBody</A>();
+ <A HREF="body.html#DwBody">DwBody</A>(const DwBody&amp; aBody);
+ <A HREF="body.html#DwBody">DwBody</A>(const DwString&amp; aStr, DwMessageComponent* aParent=0);
+ virtual ~DwBody();
+ const DwBody&amp; <A HREF="body.html#op_eq">operator =</A> (const DwBody&amp; aBody);
+ virtual void <A HREF="body.html#Parse">Parse</A>();
+ virtual void <A HREF="body.html#Assemble">Assemble</A>();
+ virtual DwMessageComponent* <A HREF="body.html#Clone">Clone</A>() const;
+ DwBodyPart* <A HREF="body.html#FirstBodyPart">FirstBodyPart</A>() const;
+ void <A HREF="body.html#AddBodyPart">AddBodyPart</A>(DwBodyPart* aPart);
+ DwMessage* <A HREF="body.html#Message">Message</A>() const;
+ void <A HREF="body.html#SetMessage">SetMessage</A>(DwMessage* aMessage);
+ static DwBody* <A HREF="body.html#NewBody">NewBody</A>(const DwString&amp; aStr, DwMessageComponent* aParent);
+ static DwBody* (*<A HREF="body.html#sNewBody">sNewBody</A>)(const DwString&amp;, DwMessageComponent*);
+
+protected:
+
+ DwString <A HREF="body.html#mBoundaryStr">mBoundaryStr</A>;
+ DwString <A HREF="body.html#mPreamble">mPreamble</A>;
+ DwString <A HREF="body.html#mEpilogue">mEpilogue</A>;
+ DwBodyPart* <A HREF="body.html#mFirstBodyPart">mFirstBodyPart</A>;
+ DwMessage* <A HREF="body.html#mMessage">mMessage</A>;
+ static const char* const sClassName;
+ void <A HREF="body.html#_AddBodyPart">_AddBodyPart</A>(DwBodyPart*);
+ void <A HREF="body.html#_SetMessage">_SetMessage</A>(DwMessage*);
+ void DeleteBodyParts();
+ void CopyBodyParts(const DwBodyPart* aFirst);
+
+public:
+
+ virtual void <A HREF="body.html#PrintDebugInfo">PrintDebugInfo</A>(ostream&amp; aStrm, int aDepth=0) const;
+ virtual void <A HREF="body.html#CheckInvariants">CheckInvariants</A>() const;
+
+protected:
+
+ void _PrintDebugInfo(ostream&amp; aStrm) const;
+};
+</PRE>
+<H2>
+ <FONT COLOR="navy"> DESCRIPTION </FONT>
+</H2>
+<P>
+<B><TT>DwBody</TT></B> represents a <I>body</I>, as described in RFC-2045.
+A body is always part of an <I>entity</I>, which could be either a
+<I>message</I> or a <I>body part</I>. An entity has a collection of <I>header
+fields</I> and a body. If the content type of a body is ``multipart,'' then
+the body contains one or more body parts. If the content type is ``message,''
+then the body contains an encapsulated message. In all content types, the
+body contains a string of characters.
+<P>
+In MIME++, a <B><TT>DwBody</TT></B> object is contained in a
+<B><TT><A HREF="entity.html">DwEntity</A></TT></B> object. The
+<B><TT>DwBody</TT></B> object may contain a discrete body consisting only
+of a string of characters, or it may be a composite body, consisting of several
+contained <B><TT><A HREF="bodypart.html">DwBodyPart</A></TT></B> objects
+or a single contained
+<B><TT><A HREF="message.html">DwMessage</A></TT></B> object. The only reliable
+way to determine the type of <B><TT>DwBody</TT></B> is to access the Content-Type
+header field from the
+<B><TT><A HREF="headers.html">DwHeaders</A></TT></B> object of the
+<B><TT>DwEntity</TT></B> that contains it. For this reason, a
+<B><TT>DwBody</TT></B> should always be part of a
+<B><TT>DwEntity</TT></B>.
+<P>
+In the tree (broken-down) representation of a message, a
+<B><TT>DwBody</TT></B> object can be an intermediate node, having both a
+parent node and one or more child nodes, or a leaf node, having a parent
+but no child nodes. In either case, the parent node is the
+<B><TT>DwEntity</TT></B> object that contains it. If it is an intermediate
+node, it must be of type multipart with <B><TT>DwBodyPart</TT></B> objects
+as child nodes, or of type message with a single
+<B><TT>DwMessage</TT></B> object as its child node.
+<P>
+Normally, you do not create a <B><TT>DwBody</TT></B> object directly, but
+you access it through the <B><TT>Body()</TT></B> member function of
+<B><TT>DwEntity</TT></B>, which creates the <B><TT>DwBody</TT></B> object
+for you.
+<P>
+To add a <B><TT>DwBodyPart</TT></B> to a multipart
+<B><TT>DwBody</TT></B>, use the member function
+<B><TT>AddBodyPart()</TT></B>. To iterate over the
+<B><TT>DwBodyParts</TT></B> contained in multipart
+<B><TT>DwBody</TT></B>, get the first <B><TT>DwBodyPart</TT></B> by calling
+<B><TT>FirstBodyPart()</TT></B>. Then get the following
+<B><TT>DwBodyParts</TT></B> by calling <B><TT>DwBodyPart::Next()</TT></B>
+on the current <B><TT>DwBodyPart</TT></B>. To get the
+<B><TT>DwMessage</TT></B> contained in a <B><TT>Body</TT></B> with message
+content type, call <B><TT>Message()</TT></B>.
+<H2>
+ <FONT COLOR="navy"> Public Member Functions </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> <A NAME="DwBody">DwBody</A>() <BR>
+DwBody(const DwBody&amp; aBody) <BR>
+DwBody(const DwString&amp; aStr, DwMessageComponent* aParent=0) </B></FONT>
+<P>
+The first constructor is the default constructor, which sets the
+<B><TT>DwBody</TT></B> object's string representation to the empty string
+and sets its parent to <B><TT>NULL</TT></B>.
+<P>
+The second constructor is the copy constructor, which performs a deep copy
+of <B><TT>aBody</TT></B>. The parent of the new <B><TT>DwBody</TT></B> object
+is set to <B><TT>NULL</TT></B>.
+<P>
+The third constructor copies <B><TT>aStr</TT></B> to the
+<B><TT>DwBody</TT></B> object's string representation and sets
+<B><TT>aParent</TT></B> as its parent. The virtual member function
+<B><TT>Parse()</TT></B> should be called immediately after this constructor
+in order to parse the string representation. Unless it is
+<B><TT>NULL</TT></B>, <B><TT>aParent</TT></B> should point to an object of
+a class derived from <B><TT>DwEntity</TT></B>.
+<P>
+<FONT COLOR="teal"><B> const DwBody&amp; <A NAME="op_eq">operator =</A> (const
+DwBody&amp; aBody) </B></FONT>
+<P>
+This is the assignment operator, which performs a deep copy of
+<B><TT>aBody</TT></B>. The parent node of the <B><TT>DwBody</TT></B> object
+is not changed.
+<P>
+<FONT COLOR="teal"><B> virtual void <A NAME="Parse">Parse</A>() </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+executes the parse method for <B><TT>DwBody</TT></B> objects. The parse method
+creates or updates the broken-down representation from the string representation.
+For a multipart <B><TT>DwBody</TT></B> object, the parse method creates a
+collection of <B><TT>DwBodyPart</TT></B> objects. For a message
+<B><TT>DwBody</TT></B>, the parse method creates a single
+<B><TT>DwMessage</TT></B> object. For any other type of
+<B><TT>DwBody</TT></B>, the parse method does nothing. This member function
+calls the <B><TT>Parse()</TT></B> member function of any objects it creates.
+<P>
+Note: If the <B><TT>DwBody</TT></B> object has no parent node -- that is,
+it is not contained by a <B><TT>DwEntity</TT></B> object -- then the parse
+method does nothing, since it is unable to determine the type of body.
+<P>
+You should call this member function after you set or modify the string
+representation, and before you access a contained
+<B><TT>DwBodyPart</TT></B> or <B><TT>DwMessage</TT></B>.
+<P>
+This function clears the is-modified flag.
+<P>
+<FONT COLOR="teal"><B> virtual void <A NAME="Assemble">Assemble</A>()
+</B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+executes the assemble method for <B><TT>DwBody</TT></B> objects. The assemble
+method creates or updates the string representation from the broken-down
+representation. Only <B><TT>DwBody</TT></B> objects with content type of
+multipart or message require assembling. In either case, the
+<B><TT>DwBody</TT></B> object must be able to find the headers of the message
+or body part that contains it. Therefore, if the <B><TT>DwBody</TT></B> object
+is not the child of a <B><TT>DwEntity</TT></B> (<I>i.e.</I>,
+<B><TT>DwMessage</TT></B> or <B><TT>DwBodyPart</TT></B>) object, the
+<B><TT>DwBody</TT></B> cannot be assembled because the content type cannot
+be determined.
+<P>
+This function calls the <B><TT>Parse()</TT></B> member function of any
+<B><TT>DwBodyPart</TT></B> or <B><TT>DwMessage</TT></B> object it contains.
+<P>
+You should call this member function after you add a
+<B><TT>DwBodyPart</TT></B> object to a multipart body, or add a
+<B><TT>DwMessage</TT></B> object to a message body, and before you access
+the object's string representation.
+<P>
+This function clears the is-modified flag.
+<P>
+<FONT COLOR="teal"><B> virtual DwMessageComponent*
+<A NAME="Clone">Clone</A>() const </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+creates a new <B><TT>DwBody</TT></B> on the free store that has the same
+value as this <B><TT>DwBody</TT></B> object. The basic idea is that of a
+virtual copy constructor.
+<P>
+<FONT COLOR="teal"><B> DwBodyPart*
+<A NAME="FirstBodyPart">FirstBodyPart</A>() const </B></FONT>
+<P>
+For a multipart <B><TT>DwBody</TT></B>, this member function returns the
+first contained <B><TT>DwBodyPart</TT></B> object. Use
+<B><TT>DwBodyPart::Next()</TT></B> to iterate through the list of
+<B><TT>DwBodyPart</TT></B>s.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="AddBodyPart">AddBodyPart</A>(DwBodyPart*
+aPart) </B></FONT>
+<P>
+For a multipart <B><TT>DwBody</TT></B>, this member function appends a
+<B><TT>DwBodyPart</TT></B> object to the list. Any
+<B><TT>DwBodyPart</TT></B> objects added to a <B><TT>DwBody</TT></B> object's
+list will be deleted by the <B><TT>DwBody</TT></B> object's destructor.
+<P>
+<FONT COLOR="teal"><B> Dw<A NAME="Message">Message</A>* Message() const
+</B></FONT>
+<P>
+For a <B><TT>DwBody</TT></B> with content type of message, this member function
+returns the <B><TT>DwMessage</TT></B> encapsulated in it.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="SetMessage">SetMessage</A>(DwMessage*
+aMessage) </B></FONT>
+<P>
+For a <B><TT>DwBody</TT></B> with content type of message, this member function
+sets the <B><TT>DwMessage</TT></B> object it contains.
+<P>
+<FONT COLOR="teal"><B> static DwBody* <A NAME="NewBody">NewBody</A>(const
+DwString&amp; aStr, DwMessageComponent* aParent) </B></FONT>
+<P>
+Creates a new <B><TT>DwBody</TT></B> object on the free store. If the static
+data member <B><TT>sNewBody</TT></B> is <B><TT>NULL</TT></B>, this member
+function will create a new <B><TT>DwBody</TT></B> and return it. Otherwise,
+<B><TT>NewBody()</TT></B> will call the user-supplied function pointed to
+by <B><TT>sNewBody</TT></B>, which is assumed to return an object from a
+class derived from <B><TT>DwBody</TT></B>, and return that object.
+<P>
+<FONT COLOR="teal"><B> virtual void
+<A NAME="PrintDebugInfo">PrintDebugInfo</A>(ostream&amp; aStrm, int aDepth=0)
+const </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+prints debugging information about this object to <B><TT>aStrm</TT></B>.
+It will also call <B><TT>PrintDebugInfo()</TT></B> for any of its child
+components down to a level of <B><TT>aDepth</TT></B>.
+<P>
+This member function is available only in the debug version of the library.
+<P>
+<FONT COLOR="teal"><B> virtual void
+<A NAME="CheckInvariants">CheckInvariants</A>() const </B></FONT>
+<P>
+Aborts if one of the invariants of the object fails. Use this member function
+to track down bugs.
+<P>
+This member function is available only in the debug version of the library.
+<H2>
+ <FONT COLOR="navy"> Public Data Members </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> static DwBody*
+(*<A NAME="sNewBody">sNewBody</A>)(const DwString&amp;, DwMessageComponent*)
+</B></FONT>
+<P>
+If <B><TT>sNewBody</TT></B> is not <B><TT>NULL</TT></B>, it is assumed to
+point to a user-supplied function that returns an object from a class derived
+from <B><TT>DwBody</TT></B>.
+<H2>
+ <FONT COLOR="navy"> Protected Member Functions </FONT>
+</H2>
+<P>
+<B><FONT COLOR="teal"> void
+<A NAME="_AddBodyPart">_AddBodyPart</A>(DwBodyPart*) </FONT></B>
+<P>
+Adds a body part to a multipart body. This function differs from
+<B><TT>AddBodyPart</TT></B> in that it does not set the is-modified flag.
+<P>
+<B><FONT COLOR="teal"> void <A NAME="_SetMessage">_SetMessage</A>(DwMessage*)
+</FONT></B>
+<P>
+Sets a message to a body. This function differs from
+<B><TT>SetMessage()</TT></B> in that it does not set the is-modified flag.
+<H2>
+ <FONT COLOR="navy"> Protected Data Members </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> DwString <A NAME="mBoundaryStr">mBoundaryStr</A>
+</B></FONT>
+<P>
+A cache for the boundary string, which is obtained from the headers associated
+with this body.
+<P>
+<FONT COLOR="teal"><B> DwString <A NAME="mPreamble">mPreamble</A> </B></FONT>
+<P>
+Contains the preamble -- the text preceding the first boundary -- in a
+``multipart/*'' media type.
+<P>
+<FONT COLOR="teal"><B> DwString <A NAME="mEpilogue">mEpilogue</A> </B></FONT>
+<P>
+Contains the epilogue -- the text following the last boundary -- in a
+``multipart/*'' media type.
+<P>
+<FONT COLOR="teal"><B> DwBodyPart*
+<A NAME="mFirstBodyPart">mFirstBodyPart</A> </B></FONT>
+<P>
+Points to the first body part in a ``multipart/*'' media type. Is
+<B><TT>NULL</TT></B> if there are no body parts.
+<P>
+<FONT COLOR="teal"><B> DwMessage* <A NAME="mMessage">mMessage</A> </B></FONT>
+<P>
+Points to the contained message, in a ``message/*'' media type.
+<P>
+</BODY></HTML>
diff --git a/mimelib/doc/bodypart.html b/mimelib/doc/bodypart.html
new file mode 100644
index 000000000..6a3a29b6e
--- /dev/null
+++ b/mimelib/doc/bodypart.html
@@ -0,0 +1,157 @@
+<HTML>
+<HEAD>
+ <TITLE> DwBodyPart Man Page </TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<H2>
+ <FONT COLOR="navy"> NAME </FONT>
+</H2>
+<P>
+DwBodyPart -- Class representing a MIME body-part
+<H2>
+ <FONT COLOR="navy"> SYNOPSIS </FONT>
+</H2>
+<PRE>class DW_EXPORT DwBodyPart : public <A HREF="entity.html">DwEntity</A> {
+
+public:
+
+ <A HREF="bodypart.html#DwBodyPart">DwBodyPart</A>();
+ <A HREF="bodypart.html#DwBodyPart">DwBodyPart</A>(const DwBodyPart&amp; aPart);
+ <A HREF="bodypart.html#DwBodyPart">DwBodyPart</A>(const DwString&amp; aStr, DwMessageComponent* aParent=0);
+ virtual ~DwBodyPart();
+ const DwBodyPart&amp; <A HREF="bodypart.html#op_eq">operator =</A> (const DwBodyPart&amp; aPart);
+ virtual DwMessageComponent* <A HREF="bodypart.html#Clone">Clone</A>() const;
+ static DwBodyPart* <A HREF="bodypart.html#NewBodyPart">NewBodyPart</A>(const DwString&amp; aStr,
+ DwMessageComponent* aParent);
+ DwBodyPart* <A HREF="bodypart.html#Next">Next</A>() const;
+ void <A HREF="bodypart.html#SetNext">SetNext</A>(const DwBodyPart* aPart);
+ static DwBodyPart* (*<A HREF="bodypart.html#sNewBodyPart">sNewBodyPart</A>)(const DwString&amp;, DwMessageComponent*);
+
+public:
+
+ virtual void <A HREF="bodypart.html#PrintDebugInfo">PrintDebugInfo</A>(ostream&amp; aStrm, int aDepth=0) const;
+ virtual void <A HREF="bodypart.html#CheckInvariants">CheckInvariants</A>() const;
+
+protected:
+
+ void _PrintDebugInfo(ostream&amp; aStrm) const;
+};
+</PRE>
+<H2>
+ <FONT COLOR="navy"> DESCRIPTION </FONT>
+</H2>
+<P>
+<B><TT>DwBodyPart</TT></B> represents a <I>body part</I>, as described in
+RFC-2045 and RFC-2046. A body part is an <I>entity</I>, so it has a collection
+of headers and a <I>body</I>. A body part is different from a <I>message</I>
+in that a body part is part of a multipart body.
+<P>
+In MIME++, a <B><TT>DwBodyPart</TT></B> is a subclass of
+<B><TT><A HREF="entity.html">DwEntity</A></TT></B>; therefore, it contains
+both a <B><TT><A HREF="headers.html">DwHeaders</A></TT></B> object and a
+<B><TT><A HREF="body.html">DwBody</A></TT></B> object, and it is contained
+in a multipart <B><TT>DwBody</TT></B> object.
+<P>
+As with <B><TT><A HREF="message.html">DwMessage</A></TT></B>, most of the
+functionality of <B><TT>DwBodyPart</TT></B> is implemented by the abstract
+class <B><TT>DwEntity</TT></B>.
+<H2>
+ <FONT COLOR="navy"> Public Member Functions </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> <A NAME="DwBodyPart">DwBodyPart</A>() <BR>
+DwBodyPart(const DwBodyPart&amp; aPart) <BR>
+DwBodyPart(const DwString&amp; aStr, DwMessageComponent* aParent=0)
+</B></FONT>
+<P>
+The first constructor is the default constructor, which sets the
+<B><TT>DwBodyPart</TT></B> object's string representation to the empty string
+and sets its parent to <B><TT>NULL</TT></B>.
+<P>
+The second constructor is the copy constructor, which performs a deep copy
+of <B><TT>aPart</TT></B>. The parent of the new
+<B><TT>DwBodyPart</TT></B> object is set to <B><TT>NULL</TT></B>.
+<P>
+The third constructor copies <B><TT>aStr</TT></B> to the
+<B><TT>DwBodyPart</TT></B> object's string representation and sets
+<B><TT>aParent</TT></B> as its parent. The virtual member function
+<B><TT>Parse()</TT></B> should be called immediately after this constructor
+in order to parse the string representation. Unless it is
+<B><TT>NULL</TT></B>, <B><TT>aParent</TT></B> should point to an object of
+a class derived from <B><TT>DwBody</TT></B>.
+<P>
+<FONT COLOR="teal"><B> const DwBodyPart&amp; <A NAME="op_eq">operator =</A>
+(const DwBodyPart&amp; aPart) </B></FONT>
+<P>
+This is the assignment operator, which performs a deep copy of
+<B><TT>aPart</TT></B>. The parent node of the <B><TT>DwBodyPart</TT></B>
+object is not changed.
+<P>
+<FONT COLOR="teal"><B> virtual DwMessageComponent*
+<A NAME="Clone">Clone</A>() const </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+creates a new <B><TT>DwBodyPart</TT></B> on the free store that has the same
+value as this <B><TT>DwBodyPart</TT></B> object. The basic idea is that of
+a virtual copy constructor.
+<P>
+<FONT COLOR="teal"><B> static DwBodyPart*
+<A NAME="NewBodyPart">NewBodyPart</A>(const DwString&amp; aStr,
+DwMessageComponent* aParent) </B></FONT>
+<P>
+Creates a new <B><TT>DwBodyPart</TT></B> on the free store. If the static
+data member <B><TT>sNewBodyPart</TT></B> is <B><TT>NULL</TT></B>, this member
+function will create a new <B><TT>DwBodyPart</TT></B> and return it. Otherwise,
+<B><TT>NewBodyPart()</TT></B> will call the user-supplied function pointed
+to by <B><TT>sNewBodyPart</TT></B>, which is assumed to return an object
+from a class derived from <B><TT>DwBodyPart</TT></B>, and return that object.
+<P>
+<FONT COLOR="teal"><B> DwBodyPart* <A NAME="Next">Next</A>() const
+</B></FONT>
+<P>
+This member function returns the next <B><TT>DwBodyPart</TT></B> object following
+this <B><TT>DwBodyPart</TT></B> in the list of <B><TT>DwBodyPart</TT></B>
+objects contained in a multipart <B><TT>DwBody</TT></B>.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="SetNext">SetNext</A>(const DwBodyPart*
+aPart) </B></FONT>
+<P>
+This advanced function sets <B><TT>aPart</TT></B> as the next
+<B><TT>DwBodyPart</TT></B> object following this
+<B><TT>DwBodyPart</TT></B> in the list of <B><TT>DwBodyPart</TT></B> objects
+contained in a multipart <B><TT>DwBody</TT></B>. Since
+<B><TT>DwBody</TT></B> contains a member function for adding a
+<B><TT>DwBodyPart</TT></B> object to its list, this function should be avoided
+for most applications.
+<P>
+<FONT COLOR="teal"><B> virtual void
+<A NAME="PrintDebugInfo">PrintDebugInfo</A>(ostream&amp; aStrm, int aDepth=0)
+const </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+prints debugging information about this object to <B><TT>aStrm</TT></B>.
+It will also call <B><TT>PrintDebugInfo()</TT></B> for any of its child
+components down to a level of <B><TT>aDepth</TT></B>.
+<P>
+This member function is available only in the debug version of the library.
+<P>
+<FONT COLOR="teal"><B> virtual void
+<A NAME="CheckInvariants">CheckInvariants</A>() const </B></FONT>
+<P>
+Aborts if one of the invariants of the object fails. Use this member function
+to track down bugs.
+<P>
+This member function is available only in the debug version of the library.
+<H2>
+ <FONT COLOR="navy"> Public Data Members </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> static DwBodyPart*
+(*<A NAME="sNewBodyPart">sNewBodyPart</A>)(const DwString&amp;,
+DwMessageComponent*) </B></FONT>
+<P>
+If <B><TT>sNewBodyPart</TT></B> is not <B><TT>NULL</TT></B>, it is assumed
+to point to a user-supplied function that returns an object from a class
+derived from <B><TT>DwBodyPart</TT></B>.
+<P>
+</BODY></HTML>
diff --git a/mimelib/doc/boyermor.html b/mimelib/doc/boyermor.html
new file mode 100644
index 000000000..12606e350
--- /dev/null
+++ b/mimelib/doc/boyermor.html
@@ -0,0 +1,57 @@
+<HTML>
+<HEAD>
+ <TITLE> DwBoyerMoore Man Page </TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<H2>
+ <FONT COLOR="navy"> NAME </FONT>
+</H2>
+<P>
+DwBoyerMoore -- Class for executing Boyer-Moore string search algorithm
+<H2>
+ <FONT COLOR="navy"> SYNOPSIS </FONT>
+</H2>
+<PRE>class DW_EXPORT DwBoyerMoore {
+
+public:
+
+ <A HREF="boyermor.html#DwBoyerMoore">DwBoyerMoore</A>(const char* aCstr);
+ <A HREF="boyermor.html#DwBoyerMoore">DwBoyerMoore</A>(const DwString&amp; aStr);
+ virtual ~DwBoyerMoore();
+ void <A HREF="boyermor.html#Assign">Assign</A>(const char* aCstr);
+ void <A HREF="boyermor.html#Assign">Assign</A>(const DwString&amp; aStr);
+ size_t <A HREF="boyermor.html#FindIn">FindIn</A>(const DwString&amp; aStr, size_t aPos);
+};
+</PRE>
+<H2>
+ <FONT COLOR="navy"> DESCRIPTION </FONT>
+</H2>
+<P>
+<B><TT>DwBoyerMoore</TT></B> implements the Boyer-Moore algorithm for searching
+for a string. The Boyer-Moore algorithm is fast, but requires a bit of start-up
+overhead compared to a brute force algorithm.
+<H2>
+ <FONT COLOR="navy"> Public Member Functions </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> <A NAME="DwBoyerMoore">DwBoyerMoore</A>(const char*
+aCstr) <BR>
+DwBoyerMoore(const DwString&amp; aStr) </B></FONT>
+<P>
+Constructs a <B><TT>DwBoyerMoore</TT></B> object for searching for a particular
+string.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="Assign">Assign</A>(const char* aCstr)
+<BR>
+void Assign(const DwString&amp; aStr) </B></FONT>
+<P>
+Sets the string to search for.
+<P>
+<FONT COLOR="teal"><B> size_t <A NAME="FindIn">FindIn</A>(const DwString&amp;
+aStr, size_t aPos) </B></FONT>
+<P>
+Searches for the search string in <B><TT>aStr</TT></B> starting at position
+<B><TT>aPos</TT></B>. If found, the function returns the first position in
+<B><TT>aStr</TT></B> where the search string was found. If not found, the
+function returns <B><TT>DwString::npos</TT></B>.
+</BODY></HTML>
diff --git a/mimelib/doc/datetime.html b/mimelib/doc/datetime.html
new file mode 100644
index 000000000..0516d9292
--- /dev/null
+++ b/mimelib/doc/datetime.html
@@ -0,0 +1,340 @@
+<HTML>
+<HEAD>
+ <TITLE> DwDateTime Man Page </TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<H2>
+ <FONT COLOR="navy"> NAME </FONT>
+</H2>
+<P>
+DwDateTime -- Class representing an RFC-822 date-time
+<H2>
+ <FONT COLOR="navy"> SYNOPSIS </FONT>
+</H2>
+<PRE>class DW_EXPORT DwDateTime : public <A HREF="fieldbdy.html">DwFieldBody</A> {
+
+public:
+
+ <A HREF="datetime.html#DwDateTime">DwDateTime</A>();
+ <A HREF="datetime.html#DwDateTime">DwDateTime</A>(const DwDateTime&amp; aDateTime);
+ <A HREF="datetime.html#DwDateTime">DwDateTime</A>(const DwString&amp; aStr, DwMessageComponent* aParent=0);
+ virtual ~DwDateTime();
+ const DwDateTime&amp; <A HREF="datetime.html#op_eq">operator =</A> (const DwDateTime&amp; aDateTime);
+ virtual void <A HREF="datetime.html#Parse">Parse</A>();
+ virtual void <A HREF="datetime.html#Assemble">Assemble</A>();
+ virtual DwMessageComponent* <A HREF="datetime.html#Clone">Clone</A>() const;
+ DwUint32 <A HREF="datetime.html#AsUnixTime">AsUnixTime</A>() const;
+ void <A HREF="datetime.html#FromUnixTime">FromUnixTime</A>(DwUint32 aTime);
+ time_t <A HREF="datetime.html#AsCalendarTime">AsCalendarTime</A>() const;
+ void <A HREF="datetime.html#FromCalendarTime">FromCalendarTime</A>(time_t aTime);
+ DwInt32 <A HREF="datetime.html#DateAsJulianDayNum">DateAsJulianDayNum</A>() const;
+ void <A HREF="datetime.html#DateFromJulianDayNum">DateFromJulianDayNum</A>(DwInt32 aJdn);
+ DwInt32 <A HREF="datetime.html#TimeAsSecsPastMidnight">TimeAsSecsPastMidnight</A>() const;
+ void <A HREF="datetime.html#TimeFromSecsPastMidnight">TimeFromSecsPastMidnight</A>(DwInt32 aSecs);
+ int <A HREF="datetime.html#Year">Year</A>() const;
+ void <A HREF="datetime.html#SetYear">SetYear</A>(int aYear);
+ int <A HREF="datetime.html#Month">Month</A>() const;
+ void <A HREF="datetime.html#SetMonth">SetMonth</A>(int aMonth);
+ int <A HREF="datetime.html#Day">Day</A>() const;
+ void <A HREF="datetime.html#SetDay">SetDay</A>(int aDay);
+ int <A HREF="datetime.html#Hour">Hour</A>() const;
+ void <A HREF="datetime.html#SetHour">SetHour</A>(int aHour);
+ int <A HREF="datetime.html#Minute">Minute</A>() const;
+ void <A HREF="datetime.html#SetMinute">SetMinute</A>(int aMinute);
+ int <A HREF="datetime.html#Second">Second</A>() const;
+ void <A HREF="datetime.html#SetSecond">SetSecond</A>(int aSecond);
+ int <A HREF="datetime.html#Zone">Zone</A>() const;
+ void <A HREF="datetime.html#SetZone">SetZone</A>(int aZone);
+ static void <A HREF="datetime.html#SetDefaultZone">SetDefaultZone</A>(int aZone);
+ static DwDateTime* <A HREF="datetime.html#NewDateTime">NewDateTime</A>(const DwString&amp;, DwMessageComponent*);
+ static DwDateTime* (*<A HREF="datetime.html#sNewDateTime">sNewDateTime</A>)(const DwString&amp;, DwMessageComponent*);
+
+protected:
+
+ void <A HREF="datetime.html#_FromUnixTime">_FromUnixTime</A>(DwUint32 aTime);
+ void <A HREF="datetime.html#_FromCalendarTime">_FromCalendarTime</A>(time_t aTime);
+ int mYear;
+ int mMonth;
+ int mDay;
+ int mHour;
+ int mMinute;
+ int mSecond;
+ int mZone;
+ static int sDefaultZone;
+ static int sIsDefaultZoneSet;
+
+public:
+
+ virtual void <A HREF="datetime.html#PrintDebugInfo">PrintDebugInfo</A>(ostream&amp; aStrm, int aDepth=0) const;
+ virtual void <A HREF="datetime.html#CheckInvariants">CheckInvariants</A>() const;
+
+protected:
+
+ void _PrintDebugInfo(ostream&amp; aStrm) const;
+};
+</PRE>
+<H2>
+ <FONT COLOR="navy"> DESCRIPTION </FONT>
+</H2>
+<P>
+<B><TT>DwDatetime</TT></B> represents a <I>date-time</I> as described in
+RFC-822 and RFC-1123. The parse method for <B><TT>DwDateTime</TT></B> parses
+the string representation to extract the year, month, day, hour, minute,
+second, and time zone. <B><TT>DwDateTime</TT></B> provides member functions
+to set or get the individual components of the date-time.
+<H2>
+ <FONT COLOR="navy"> Public Member Functions </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> <A NAME="DwDateTime">DwDateTime</A>() <BR>
+DwDateTime(const DwDateTime&amp; aDateTime) <BR>
+DwDateTime(const DwString&amp; aStr, DwMessageComponent* aParent=0)
+</B></FONT>
+<P>
+The first constructor is the default constructor, which assigns the current
+date and time as reported by the operating system.
+<P>
+The second constructor is the copy constructor. The parent of the new
+<B><TT>DwDateTime</TT></B> object is set to <B><TT>NULL</TT></B>.
+<P>
+The third constructor sets <B><TT>aStr</TT></B> as the
+<B><TT>DwDateTime</TT></B> object's string representation and sets
+<B><TT>aParent</TT></B> as its parent. The virtual member function
+<B><TT>Parse()</TT></B> should be called after this constructor to extract
+the date and time information from the string representation. Unless it is
+<B><TT>NULL</TT></B>, <B><TT>aParent</TT></B> should point to an object of
+a class derived from <B><TT>DwField</TT></B>.
+<P>
+<FONT COLOR="teal"><B> const DwDateTime&amp; <A NAME="op_eq">operator =</A>
+(const DwDateTime&amp; aDateTime) </B></FONT>
+<P>
+This is the assignment operator, which sets this
+<B><TT>DwDateTime</TT></B> object to the same value as
+<B><TT>aDateTime</TT></B>.
+<P>
+<FONT COLOR="teal"><B> virtual void <A NAME="Parse">Parse</A>() </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+executes the parse method for <B><TT>DwDateTime</TT></B> objects. The parse
+method creates or updates the broken-down representation from the string
+representation. For <B><TT>DwDateTime</TT></B> objects, the parse method
+parses the string representation to extract the year, month, day, hour, minute,
+second, and time zone.
+<P>
+This function clears the is-modified flag.
+<P>
+<FONT COLOR="teal"><B> virtual void <A NAME="Assemble">Assemble</A>()
+</B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+executes the assemble method for <B><TT>DwDateTime</TT></B> objects. It should
+be called whenever one of the object's attributes is changed in order to
+assemble the string representation from its broken-down representation. It
+will be called automatically for this object by the parent object's
+<B><TT>Assemble()</TT></B> member function if the is-modified flag is set.
+<P>
+This function clears the is-modified flag.
+<P>
+<FONT COLOR="teal"><B> virtual DwMessageComponent*
+<A NAME="Clone">Clone</A>() const </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+creates a new <B><TT>DwDateTime</TT></B> on the free store that has the same
+value as this <B><TT>DwDateTime</TT></B> object. The basic idea is that of
+a virtual copy constructor.
+<P>
+<FONT COLOR="teal"><B> DwUint32 <A NAME="AsUnixTime">AsUnixTime</A>() const
+</B></FONT>
+<P>
+Returns the date and time as a UNIX (POSIX) time, defined as the number of
+seconds elapsed since 1 Jan 1970 00:00:00 UTC.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="FromUnixTime">FromUnixTime</A>(DwUint32
+aTime) </B></FONT>
+<P>
+Sets the date and time from <B><TT>aTime</TT></B>, interpreted as the number
+of of seconds elapsed since 1 Jan 1970 00:00:00 UTC.
+<P>
+<FONT COLOR="teal"><B> time_t <A NAME="AsCalendarTime">AsCalendarTime</A>()
+const </B></FONT>
+<P>
+Returns the date and time as a value of type <B><TT>time_t</TT></B> that
+conforms to the native format returned by the <B><TT>time()</TT></B> ANSI
+C function. On most UNIX systems, this function returns the same value as
+<B><TT>AsUnixTime()</TT></B>. (For efficiency, use
+<B><TT>AsUnixTime()</TT></B> instead of <B><TT>AsCalendarTime()</TT></B>
+if possible).
+<P>
+<FONT COLOR="teal"><B> void
+<A NAME="FromCalendarTime">FromCalendarTime</A>(time_t aTime) </B></FONT>
+<P>
+Sets the date and time from <B><TT>aTime</TT></B>, which is assumed to be
+in a format compatible with the native <B><TT>time()</TT></B> ANSI C function.
+For most UNIX systems, this function is the same as the function
+<B><TT>FromUnixTime()</TT></B>. (For efficiency, use
+<B><TT>FromUnixTime()</TT></B> instead of
+<B><TT>FromCalendarTime()</TT></B> if possible).
+<P>
+<FONT COLOR="teal"><B> DwInt32
+<A NAME="DateAsJulianDayNum">DateAsJulianDayNum</A>() const </B></FONT>
+<P>
+Returns the Julian Day Number, defined as the number of days elapsed since
+1 Jan 4713 BC. The JDN is calculated directly from the values of the year,
+month, and day; time zone information is ignored.
+<P>
+<FONT COLOR="teal"><B> void
+<A NAME="DateFromJulianDayNum">DateFromJulianDayNum</A>(DwInt32 aJdn)
+</B></FONT>
+<P>
+Sets the year, month, and day from <B><TT>aJdn</TT></B>, interpreted as a
+Julian Day Number. By definition, the JDN is the number of days elapsed since
+1 Jan 4713 BC. This member function ignores time zone information.
+<P>
+<FONT COLOR="teal"><B> DwInt32
+<A NAME="TimeAsSecsPastMidnight">TimeAsSecsPastMidnight</A>() const
+</B></FONT>
+<P>
+Returns the number of seconds past midnight. The value is calculated directly
+from the values of the hour, minute, and second; time zone information is
+ignored.
+<P>
+<FONT COLOR="teal"><B> void
+<A NAME="TimeFromSecsPastMidnight">TimeFromSecsPastMidnight</A>(DwInt32 aSecs)
+</B></FONT>
+<P>
+Sets the hour, minute, and second from <B><TT>aSecs</TT></B>, interpreted
+as the number of seconds elapsed since midnight. This member function ignores
+time zone information. The argument <B><TT>aSecs</TT></B> should be in the
+range 0 to 86399, inclusive.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="Year">Year</A>() const </B></FONT>
+<P>
+Returns the four digit year, e.g. 1997.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="SetYear">SetYear</A>(int aYear)
+</B></FONT>
+<P>
+Sets the year from <B><TT>aYear</TT></B>, which should be a four digit year.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="Month">Month</A>() const </B></FONT>
+<P>
+Returns the month. Values range from 1 to 12.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="SetMonth">SetMonth</A>(int aMonth)
+</B></FONT>
+<P>
+Sets the month from <B><TT>aMonth</TT></B>, which should be in the range
+1 to 12.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="Day">Day</A>() const </B></FONT>
+<P>
+Returns the day of the month. Values range from 1 to 31.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="SetDay">SetDay</A>(int aDay) </B></FONT>
+<P>
+Sets the day of the month from <B><TT>aDay</TT></B>.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="Hour">Hour</A>() const </B></FONT>
+<P>
+Returns the hour according to the 24 hour clock. Values range from 0 to 23.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="SetHour">SetHour</A>(int aHour)
+</B></FONT>
+<P>
+Sets the hour from <B><TT>aHour</TT></B> based on the 24-hour clock.
+<B><TT>aHour</TT></B> should be in the range 0 to 23.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="Minute">Minute</A>() const </B></FONT>
+<P>
+Returns the minute. Values range from 0 to 59.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="SetMinute">SetMinute</A>(int aMinute)
+</B></FONT>
+<P>
+Sets the minute from <B><TT>aMinute</TT></B>, which should be in the range
+0 to 59.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="Second">Second</A>() const </B></FONT>
+<P>
+Returns the second. Values range from 0 to 59.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="SetSecond">SetSecond</A>(int aSecond)
+</B></FONT>
+<P>
+Sets the second from <B><TT>aSecond</TT></B>, which should be in the range
+0 to 59.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="Zone">Zone</A>() const </B></FONT>
+<P>
+Returns the time zone as the diffence in minutes between local time and
+Coordinated Universal Time (UTC or GMT).
+<P>
+<FONT COLOR="teal"><B> void <A NAME="SetZone">SetZone</A>(int aZone)
+</B></FONT>
+<P>
+Sets the time zone from <B><TT>aZone</TT></B>, interpreted as the time difference
+in minutes between local time and Coordinated Universal Time (UTC, or GMT).
+<P>
+<FONT COLOR="teal"><B> static void
+<A NAME="SetDefaultZone">SetDefaultZone</A>(int aZone) </B></FONT>
+<P>
+Sets the default time zone. <B><TT>aZone</TT></B> should be the time difference
+in minutes between local time and Coordinated Universal Time (UTC, or GMT).
+The value is used to set the time zone for any objects created using the
+default constructor.
+<P>
+<FONT COLOR="teal"><B> static DwDateTime*
+<A NAME="NewDateTime">NewDateTime</A>(const DwString&amp;, DwMessageComponent*)
+</B></FONT>
+<P>
+Creates a new <B><TT>DwDateTime</TT></B> object on the free store. If the
+static data member <B><TT>sNewDateTime</TT></B> is <B><TT>NULL</TT></B>,
+this member function will create a new <B><TT>DwDateTime</TT></B> and return
+it. Otherwise, <B><TT>NewDateTime()</TT></B> will call the user-supplied
+function pointed to by <B><TT>sNewDateTime</TT></B>, which is assumed to
+return an object from a class derived from <B><TT>DwDateTime</TT></B>, and
+return that object.
+<P>
+<FONT COLOR="teal"><B> virtual void
+<A NAME="PrintDebugInfo">PrintDebugInfo</A>(ostream&amp; aStrm, int aDepth=0)
+const </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+prints debugging information about this object to <B><TT>aStrm</TT></B>.
+<P>
+This member function is available only in the debug version of the library.
+<P>
+<FONT COLOR="teal"><B> virtual void
+<A NAME="CheckInvariants">CheckInvariants</A>() const </B></FONT>
+<P>
+Aborts if one of the invariants of the object fails. Use this member function
+to track down bugs.
+<P>
+This member function is available only in the debug version of the library.
+<H2>
+ <FONT COLOR="navy"> Public Data Members </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> static DwDateTime*
+(*<A NAME="sNewDateTime">sNewDateTime</A>)(const DwString&amp;,
+DwMessageComponent*) </B></FONT>
+<P>
+If <B><TT>sNewDateTime</TT></B> is not <B><TT>NULL</TT></B>, it is assumed
+to point to a user-supplied function that returns an object from a class
+derived from <B><TT>DwDateTime</TT></B>.
+<H2>
+ <FONT COLOR="navy"> Protected Member Functions </FONT>
+</H2>
+<P>
+<B><FONT COLOR="teal"> void
+<A NAME="_FromUnixTime">_FromUnixTime</A>(DwUint32 aTime) </FONT></B>
+<P>
+Like <B><TT>FromUnixTime()</TT></B>, but doesn't set the is-modified flag.
+<P>
+<B><FONT COLOR="teal"> void
+<A NAME="_FromCalendarTime">_FromCalendarTime</A>(time_t aTime) </FONT></B>
+<P>
+Like <B><TT>FromCalendarTime()</TT></B>, but doesn't set the is-modified
+flag.
+<P>
+</BODY></HTML>
diff --git a/mimelib/doc/disptype.html b/mimelib/doc/disptype.html
new file mode 100644
index 000000000..c64b1dc13
--- /dev/null
+++ b/mimelib/doc/disptype.html
@@ -0,0 +1,224 @@
+<HTML>
+<HEAD>
+ <TITLE> DwDispositionType Man Page </TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<H2>
+ <FONT COLOR="navy"> NAME </FONT>
+</H2>
+<P>
+DwDispositionType -- Class representing a MIME content-disposition field
+body
+<H2>
+ <FONT COLOR="navy"> SYNOPSIS </FONT>
+</H2>
+<PRE>class DW_EXPORT DwDispositionType : public <A HREF="fieldbdy.html">DwFieldBody</A> {
+
+public:
+
+ <A HREF="disptype.html#DwDispositionType">DwDispositionType</A>();
+ <A HREF="disptype.html#DwDispositionType">DwDispositionType</A>(const DwDispositionType&amp; aDispType);
+ <A HREF="disptype.html#DwDispositionType">DwDispositionType</A>(const DwString&amp; aStr, DwMessageComponent* aParent=0);
+ virtual ~DwDispositionType();
+ const DwDispositionType&amp; <A HREF="disptype.html#op_eq">operator =</A> (const DwDispositionType&amp; aDispType);
+ virtual void <A HREF="disptype.html#Parse">Parse</A>();
+ virtual void <A HREF="disptype.html#Assemble">Assemble</A>();
+ virtual DwMessageComponent* <A HREF="disptype.html#Clone">Clone</A>() const;
+ int <A HREF="disptype.html#DispositionType">DispositionType</A>() const;
+ void <A HREF="disptype.html#SetDispositionType">SetDispositionType</A>(int aType);
+ const DwString&amp; <A HREF="disptype.html#DispositionTypeStr">DispositionTypeStr</A>() const;
+ void <A HREF="disptype.html#SetDispositionTypeStr">SetDispositionTypeStr</A>(const DwString&amp; aStr);
+ const DwString&amp; <A HREF="disptype.html#Filename">Filename</A>() const;
+ void <A HREF="disptype.html#SetFilename">SetFilename</A>(const DwString&amp; aStr);
+ DwParameter* <A HREF="disptype.html#FirstParameter">FirstParameter</A>() const;
+ void <A HREF="disptype.html#AddParameter">AddParameter</A>(DwParameter* aParam);
+ static DwDispositionType* <A HREF="disptype.html#NewDispositionType">NewDispositionType</A>(const DwString&amp; aStr,
+ DwMessageComponent* aParent);
+ static DwDispositionType* (*<A HREF="disptype.html#sNewDispositionType">sNewDispositionType</A>)(const DwString&amp;,
+ DwMessageComponent*);
+
+protected:
+
+ void _AddParameter(DwParameter* aParam);
+ virtual void EnumToStr();
+ virtual void StrToEnum();
+ void DeleteParameterList();
+ void CopyParameterList(DwParameter* aFirst);
+ int mDispositionType;
+ DwString mDispositionTypeStr;
+ DwString mFilenameStr;
+ DwParameter* mFirstParameter;
+
+public:
+
+ virtual void PrintDebugInfo(ostream&amp; aStrm, int aDepth=0) const;
+ virtual void CheckInvariants() const;
+
+protected:
+
+ void _PrintDebugInfo(ostream&amp; aStrm) const;
+};
+</PRE>
+<H2>
+ <FONT COLOR="navy"> DESCRIPTION </FONT>
+</H2>
+<P>
+<B><TT>DwDispositionType</TT></B> represents a field body for the
+Content-Disposition header field as described in RFC-1806. This header field
+specifies whether the content of a message or body part should be displayed
+automatically to a user. A disposition-type of inline indicates that the
+content should be displayed; a disposition-type of attachment indicates that
+it should not be. RFC-1806 specifies that a filename parameter may be optionally
+included in the field body; the filename parameter suggests a file name for
+saving the message or body part's content.
+<P>
+<B><TT>DwDispositionType</TT></B> provides convenience functions that allow
+you to set or get the disposition-type as an enumerated value, to set or
+get the filename parameter, or to manage a list of parameters.
+<P>
+RFC-1806 specifically states that the Content-Disposition header field is
+experimental and not a proposed standard.
+<H2>
+ <FONT COLOR="navy"> Public Member Functions </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> <A NAME="DwDispositionType">DwDispositionType</A>()
+<BR>
+DwDispositionType(const DwDispositionType&amp; aDispType) <BR>
+DwDispositionType(const DwString&amp; aStr, DwMessageComponent* aParent=0)
+</B></FONT>
+<P>
+The first constructor is the default constructor, which sets the
+<B><TT>DwDispositionType</TT></B> object's string representation to the empty
+string and sets its parent to <B><TT>NULL</TT></B>.
+<P>
+The second constructor is the copy constructor, which performs deep copy
+of <B><TT>aDispType</TT></B>. The parent of the new
+<B><TT>DwDispositionType</TT></B> object is set to <B><TT>NULL</TT></B>.
+<P>
+The third constructor copies <B><TT>aStr</TT></B> to the
+<B><TT>DwDispositionType</TT></B> object's string representation and sets
+<B><TT>aParent</TT></B> as its parent. The virtual member function
+<B><TT>Parse()</TT></B> should be called immediately after this constructor
+in order to parse the string representation. Unless it is
+<B><TT>NULL</TT></B>, <B><TT>aParent</TT></B> should point to an object of
+a class derived from <B><TT>DwField</TT></B>.
+<P>
+<FONT COLOR="teal"><B> const DwDispositionType&amp; <A NAME="op_eq">operator
+=</A> (const DwDispositionType&amp; aDispType) </B></FONT>
+<P>
+This is the assignment operator, which performs a deep copy of
+<B><TT>aDispType</TT></B>. The parent node of the
+<B><TT>DwDipositionType</TT></B> object is not changed.
+<P>
+<FONT COLOR="teal"><B> virtual void <A NAME="Parse">Parse</A>() </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+executes the parse method for <B><TT>DwDispositionType</TT></B> objects.
+It should be called immediately after the string representation is modified
+and before the parts of the broken-down representation are accessed.
+<P>
+This function clears the is-modified flag.
+<P>
+<FONT COLOR="teal"><B> virtual void <A NAME="Assemble">Assemble</A>()
+</B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+executes the assemble method for <B><TT>DwDispositionType</TT></B> objects.
+It should be called whenever one of the object's attributes is changed in
+order to assemble the string representation from its broken-down representation.
+It will be called automatically for this object by the parent object's
+<B><TT>Assemble()</TT></B> member function if the is-modified flag is set.
+<P>
+This function clears the is-modified flag.
+<P>
+<FONT COLOR="teal"><B> virtual DwMessageComponent*
+<A NAME="Clone">Clone</A>() const </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+creates a new <B><TT>DwDispositionType</TT></B> object on the free store
+that has the same value as this <B><TT>DwDispositionType</TT></B> object.
+The basic idea is that of a virtual copy constructor.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="DispositionType">DispositionType</A>()
+const </B></FONT>
+<P>
+Returns the disposition-type as an enumerated value. Valid enumerated types,
+which are defined in enum.h, include
+<B><TT>DwMime::kDispTypeNull</TT></B>,
+<B><TT>DwMime::kDispTypeUnknown</TT></B>,
+<B><TT>DwMime::kDispTypeInline</TT></B>, and
+<B><TT>DwMime::kDispTypeAttachment</TT></B>.
+<P>
+<FONT COLOR="teal"><B> void
+<A NAME="SetDispositionType">SetDispositionType</A>(int aType) </B></FONT>
+<P>
+Sets the disposition-type from the enumerated value
+<B><TT>aType</TT></B>. Valid enumerated types, which are defined in enum.h,
+include <B><TT>DwMime::kDispTypeNull</TT></B>,
+<B><TT>DwMime::kDispTypeUnknown</TT></B>,
+<B><TT>DwMime::kDispTypeInline</TT></B>, and
+<B><TT>DwMime::kDispTypeAttachment</TT></B>.
+<P>
+<FONT COLOR="teal"><B> const DwString&amp;
+<A NAME="DispositionTypeStr">DispositionTypeStr</A>() const </B></FONT>
+<P>
+Returns the disposition-type as a string.
+<P>
+<FONT COLOR="teal"><B> void
+<A NAME="SetDispositionTypeStr">SetDispositionTypeStr</A>(const DwString&amp;
+aStr) </B></FONT>
+<P>
+Sets the disposition-type from a string.
+<P>
+<FONT COLOR="teal"><B> const DwString&amp; <A NAME="Filename">Filename</A>()
+const </B></FONT>
+<P>
+This convenience function returns the value from the filename parameter,
+if present. If no filename parameter is present, an empty string is returned.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="SetFilename">SetFilename</A>(const
+DwString&amp; aStr) </B></FONT>
+<P>
+This convenience function sets the value of the filename parameter to
+<B><TT>aStr</TT></B>.
+<P>
+<FONT COLOR="teal"><B> DwParameter*
+<A NAME="FirstParameter">FirstParameter</A>() const </B></FONT>
+<P>
+Returns the first <B><TT>DwParameter</TT></B> object in the list managed
+by this <B><TT>DwDispositionType</TT></B> object, or <B><TT>NULL</TT></B>
+if no parameters are present. Use <B><TT>DwParameter::Next()</TT></B> to
+iterate through the list.
+<P>
+<FONT COLOR="teal"><B> void
+<A NAME="AddParameter">AddParameter</A>(DwParameter* aParam) </B></FONT>
+<P>
+Adds a <B><TT>DwParameter</TT></B> object to the list managed by this
+<B><TT>DwDispositionType</TT></B> object.
+<P>
+<FONT COLOR="teal"><B> static DwDispositionType*
+<A NAME="NewDispositionType">NewDispositionType</A>(const DwString&amp; aStr,
+DwMessageComponent* aParent) </B></FONT>
+<P>
+Creates a new <B><TT>DwDispositionType</TT></B> object on the free store.
+If the static data member <B><TT>sNewDispositionType</TT></B> is
+<B><TT>NULL</TT></B>, this member function will create a new
+<B><TT>DwDispositionType</TT></B> and return it. Otherwise,
+<B><TT>NewDispositionType()</TT></B> will call the user-supplied function
+pointed to by <B><TT>sNewDispositionType</TT></B>, which is assumed to return
+an object from a class derived from <B><TT>DwDispositionType</TT></B>, and
+return that object.
+<H2>
+ <FONT COLOR="navy"> Public Data Members </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> static DwDispositionType*
+(*<A NAME="sNewDispositionType">sNewDispositionType</A>)(const DwString&amp;,
+DwMessageComponent*) </B></FONT>
+<P>
+If <B><TT>sNewDispositionType</TT></B> is not <B><TT>NULL</TT></B>, it is
+assumed to point to a user-supplied function that returns an object from
+a class derived from <B><TT>DwDispositionType</TT></B>.
+<P>
+</BODY></HTML>
diff --git a/mimelib/doc/entity.html b/mimelib/doc/entity.html
new file mode 100644
index 000000000..08cf8b753
--- /dev/null
+++ b/mimelib/doc/entity.html
@@ -0,0 +1,168 @@
+<HTML>
+<HEAD>
+ <TITLE> DwEntity Man Page </TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<H2>
+ <FONT COLOR="navy"> NAME </FONT>
+</H2>
+<P>
+DwEntity -- Abstract class representing a MIME entity
+<H2>
+ <FONT COLOR="navy"> SYNOPSIS </FONT>
+</H2>
+<PRE>class DW_EXPORT DwEntity : public <A HREF="msgcmp.html">DwMessageComponent</A> {
+
+public:
+
+ <A HREF="entity.html#DwEntity">DwEntity</A>();
+ <A HREF="entity.html#DwEntity">DwEntity</A>(const DwEntity&amp; aEntity);
+ <A HREF="entity.html#DwEntity">DwEntity</A>(const DwString&amp; aStr, DwMessageComponent* aParent=0);
+ virtual ~DwEntity();
+ const DwEntity&amp; <A HREF="entity.html#op_eq">operator =</A> (const DwEntity&amp; aEntity);
+ virtual void <A HREF="entity.html#Parse">Parse</A>();
+ virtual void <A HREF="entity.html#Assemble">Assemble</A>();
+ DwHeaders&amp; <A HREF="entity.html#Headers">Headers</A>() const;
+ DwBody&amp; <A HREF="entity.html#Body">Body</A>() const;
+
+protected:
+
+ DwHeaders* mHeaders;
+ DwBody* mBody;
+
+public:
+
+ virtual void <A HREF="entity.html#PrintDebugInfo">PrintDebugInfo</A>(ostream&amp; aStrm, int aDepth=0) const;
+ virtual void <A HREF="entity.html#CheckInvariants">CheckInvariants</A>() const;
+
+protected:
+
+ void _PrintDebugInfo(ostream&amp; aStrm) const;
+};
+</PRE>
+<H2>
+ <FONT COLOR="navy"> DESCRIPTION </FONT>
+</H2>
+<P>
+RFC-2045 defines an <I>entity</I> as either a <I>message</I> or a <I>body
+part</I>, both of which have a collection of headers and a <I>body</I>. In
+MIME++, an entity is represented by the class <B><TT>DwEntity</TT></B>, which
+contains both a <B><TT><A HREF="headers.html">DwHeaders</A></TT></B> object
+and a <B><TT><A HREF="body.html">DwBody</A></TT></B> object.
+<P>
+In the tree (broken-down) representation of message, a
+<B><TT>DwEntity</TT></B> object may be either a root node, having child nodes
+but no parent node, or an intermediate node, having both a parent node and
+child nodes. A <B><TT>DwEntity</TT></B> object that is a root node must also
+be a <B><TT><A HREF="message.html">DwMessage</A></TT></B> object. If a
+<B><TT>DwEntity</TT></B> object is an intermediate node, its parent must
+be a <B><TT>DwBody</TT></B> object. The child nodes of a
+<B><TT>DwEntity</TT></B> object are the <B><TT>DwHeaders</TT></B> and
+<B><TT>DwBody</TT></B> objects it contains.
+<P>
+Since <B><TT>DwEntity</TT></B> is an abstract base class, you cannot create
+instances of it directly. <B><TT>DwEntity</TT></B> has two derived classes,
+<B><TT><A HREF="message.html">DwMessage</A></TT></B> and
+<B><TT><A HREF="bodypart.html">DwBodyPart</A></TT></B>, which are concrete
+classes.
+<P>
+To access the contained <B><TT>DwHeaders</TT></B> object, use the member
+function <B><TT>Headers()</TT></B>. To access the contained
+<B><TT>DwBody</TT></B> object, use the member function
+<B><TT>Body()</TT></B>.
+<H2>
+ <FONT COLOR="navy"> Public Member Functions </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> <A NAME="DwEntity">DwEntity</A>() <BR>
+DwEntity(const DwEntity&amp; aEntity) <BR>
+DwEntity(const DwString&amp; aStr, DwMessageComponent* aParent=0) </B></FONT>
+<P>
+The first constructor is the default constructor, which sets the
+<B><TT>DwEntity</TT></B> object's string representation to the empty string
+and sets its parent to <B><TT>NULL</TT></B>.
+<P>
+The second constructor is the copy constructor, which performs a deep copy
+of <B><TT>aEntity</TT></B>. The parent of the new
+<B><TT>DwEntity</TT></B> object is set to <B><TT>NULL</TT></B>.
+<P>
+The third constructor copies <B><TT>aStr</TT></B> to the
+<B><TT>DwEntity</TT></B> object's string representation and sets
+<B><TT>aParent</TT></B> as its parent. The virtual member function
+<B><TT>Parse()</TT></B> should be called immediately after this constructor
+in order to parse the string representation. Unless it is
+<B><TT>NULL</TT></B>, <B><TT>aParent</TT></B> should point to an object of
+a class derived from <B><TT>DwBody</TT></B>.
+<P>
+<FONT COLOR="teal"><B> const DwEntity&amp; <A NAME="op_eq">operator =</A>
+(const DwEntity&amp; aEntity) </B></FONT>
+<P>
+This is the assignment operator, which performs a deep copy of
+<B><TT>aEntity</TT></B>. The parent node of the <B><TT>DwEntity</TT></B>
+object is not changed.
+<P>
+<FONT COLOR="teal"><B> virtual void <A NAME="Parse">Parse</A>() </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+executes the parse method for <B><TT>DwEntity</TT></B> objects. The parse
+method creates or updates the broken-down representation from the string
+representation. For <B><TT>DwEntity</TT></B> objects, the parse method parses
+the string representation and sets the values of the
+<B><TT>DwHeaders</TT></B> and <B><TT>DwBody</TT></B> objects it contains.
+This member function also calls the <B><TT>Parse()</TT></B> member functions
+of the contained <B><TT>DwHeaders</TT></B> and <B><TT>DwBody</TT></B> objects.
+<P>
+You should call this member function after you set or modify the string
+representation, and before you access either the contained headers or body.
+<P>
+This function clears the is-modified flag.
+<P>
+<FONT COLOR="teal"><B> virtual void <A NAME="Assemble">Assemble</A>()
+</B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+executes the assemble method for <B><TT>DwEntity</TT></B> objects. The assemble
+method creates or updates the string representation from the broken-down
+representation. In more concrete terms, the assemble method builds the string
+representation from the string representations of the contained
+<B><TT>DwHeaders</TT></B> and <B><TT>DwBody</TT></B> objects. This member
+function calls the <B><TT>Assemble()</TT></B> member functions of its
+<B><TT>DwHeaders</TT></B> and <B><TT>DwBody</TT></B> objects.
+<P>
+You should call this member function after you modify either the contained
+headers or body, and before you retrieve the string representation.
+<P>
+This function clears the is-modified flag.
+<P>
+<FONT COLOR="teal"><B> Dw<A NAME="Headers">Headers</A>&amp; Headers() const
+</B></FONT>
+<P>
+This function returns the <B><TT>DwHeaders</TT></B> object contained by this
+object.
+<P>
+<FONT COLOR="teal"><B> Dw<A NAME="Body">Body</A>&amp; Body() const
+</B></FONT>
+<P>
+This function returns the <B><TT>DwBody</TT></B> object contained by this
+object.
+<P>
+<FONT COLOR="teal"><B> virtual void
+<A NAME="PrintDebugInfo">PrintDebugInfo</A>(ostream&amp; aStrm, int aDepth=0)
+const </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+prints debugging information about this object to <B><TT>aStrm</TT></B>.
+It will also call <B><TT>PrintDebugInfo()</TT></B> for any of its child
+components down to a level of <B><TT>aDepth</TT></B>.
+<P>
+This member function is available only in the debug version of the library.
+<P>
+<FONT COLOR="teal"><B> virtual void
+<A NAME="CheckInvariants">CheckInvariants</A>() const </B></FONT>
+<P>
+Aborts if one of the invariants of the object fails. Use this member function
+to track down bugs.
+<P>
+This member function is available only in the debug version of the library.
+<P>
+</BODY></HTML>
diff --git a/mimelib/doc/field.html b/mimelib/doc/field.html
new file mode 100644
index 000000000..19736f271
--- /dev/null
+++ b/mimelib/doc/field.html
@@ -0,0 +1,305 @@
+<HTML>
+<HEAD>
+ <TITLE> DwField Man Page </TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<H2>
+ <FONT COLOR="navy"> NAME </FONT>
+</H2>
+<P>
+DwField -- Class representing a MIME header field
+<H2>
+ <FONT COLOR="navy"> SYNOPSIS </FONT>
+</H2>
+<PRE>class DW_EXPORT DwField : public <A HREF="msgcmp.html">DwMessageComponent</A> {
+
+ friend class DwHeaders;
+
+public:
+
+ <A HREF="field.html#DwField">DwField</A>();
+ <A HREF="field.html#DwField">DwField</A>(const DwField&amp; aField);
+ <A HREF="field.html#DwField">DwField</A>(const DwString&amp; aStr, DwMessageComponent* aParent=0);
+ virtual ~DwField();
+ const DwField&amp; <A HREF="field.html#op_eq">operator =</A> (const DwField&amp; aField);
+ virtual void <A HREF="field.html#Parse">Parse</A>();
+ virtual void <A HREF="field.html#Assemble">Assemble</A>();
+ virtual DwMessageComponent* <A HREF="field.html#Clone">Clone</A>() const;
+ DwFieldBody* <A HREF="field.html#FieldBody">FieldBody</A>() const;
+ const DwString&amp; <A HREF="field.html#FieldNameStr">FieldNameStr</A>() const;
+ const DwString&amp; <A HREF="field.html#FieldBodyStr">FieldBodyStr</A>() const;
+ DwField* <A HREF="field.html#Next">Next</A>() const;
+ void <A HREF="field.html#SetFieldBody">SetFieldBody</A>(DwFieldBody* aFieldBody);
+ void <A HREF="field.html#SetFieldNameStr">SetFieldNameStr</A>(const DwString&amp; aStr);
+ void <A HREF="field.html#SetFieldBodyStr">SetFieldBodyStr</A>(const DwString&amp; aStr);
+ void <A HREF="field.html#SetNext">SetNext</A>(const DwField* aField);
+ static DwField* <A HREF="field.html#NewField">NewField</A>(const DwString&amp; aStr,
+ DwMessageComponent* aParent);
+ static DwFieldBody* <A HREF="field.html#CreateFieldBody">CreateFieldBody</A>(const DwString&amp; aFieldName,
+ const DwString&amp; aFieldBody, DwMessageComponent* aParent);
+ static DwFieldBody* _CreateFieldBody(const DwString&amp; aFieldName,
+ const DwString&amp; aFieldBody, DwMessageComponent* aParent);
+ static DwField* (*<A HREF="field.html#sNewField">sNewField</A>)(const DwString&amp;, DwMessageComponent*);
+ static DwFieldBody* (*<A HREF="field.html#sCreateFieldBody">sCreateFieldBody</A>)(const DwString&amp; aFieldName,
+ const DwString&amp; aFieldBody, DwMessageComponent* aParent);
+
+protected:
+
+ DwString mFieldNameStr;
+ DwString mFieldBodyStr;
+ DwFieldBody* mFieldBody;
+ void <A HREF="field.html#_SetFieldBody">_SetFieldBody</A>(DwFieldBody* aFieldBody);
+
+public:
+
+ virtual void <A HREF="field.html#PrintDebugInfo">PrintDebugInfo</A>(ostream&amp; aStrm, int aDepth=0) const;
+ virtual void <A HREF="field.html#CheckInvariants">CheckInvariants</A>() const;
+
+protected:
+
+ void _PrintDebugInfo(ostream&amp; aStrm) const;
+};
+</PRE>
+<H2>
+ <FONT COLOR="navy"> DESCRIPTION </FONT>
+</H2>
+<P>
+<B><TT>DwField</TT></B> represents a header field as described in RFC-822.
+According to RFC-822, a field contains a field name and a field body. In
+MIME++, a <B><TT>DwField</TT></B> contains three elements: a
+<B><TT><A HREF="string.html">DwString</A></TT></B> that contains its field
+name, a <B><TT>DwString</TT></B> that contains its field body, and a
+<B><TT><A HREF="fieldbdy.html">DwFieldBody</A></TT></B> object that contains
+a broken-down (that is, parsed) version of its field body.
+<P>
+In the tree (broken-down) representation of message, a
+<B><TT>DwField</TT></B> object is always an intermediate node, having a parent
+node and a single child node. The parent node is the
+<B><TT><A HREF="headers.html">DwHeaders</A></TT></B> object that contains
+it. The child node is the <B><TT>DwFieldBody</TT></B> object it contains.
+<P>
+To get and set the field name, use the member functions
+<B><TT>FieldNameStr()</TT></B> and <B><TT>SetFieldNameStr()</TT></B>. To
+get and set the field body, use the member functions
+<B><TT>FieldBodyStr()</TT></B> and <B><TT>SetFieldBodyStr()</TT></B>. To
+get and set the <B><TT>DwFieldBody</TT></B> object, use
+<B><TT>FieldBody()</TT></B> and <B><TT>SetFieldBody()</TT></B>.
+<P>
+A <B><TT>DwField</TT></B> object can be included in a list of
+<B><TT>DwField</TT></B> objects; usually this is the list of
+<B><TT>DwField</TT></B> objects maintained by its parent
+<B><TT>DwHeaders</TT></B> object. To get the next <B><TT>DwField</TT></B>
+object in a list, use the member function <B><TT>Next()</TT></B>.
+<H2>
+ <FONT COLOR="navy"> Public Member Functions </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> <A NAME="DwField">DwField</A>() <BR>
+DwField(const DwField&amp; aField) <BR>
+DwField(const DwString&amp; aStr, DwMessageComponent* aParent=0) </B></FONT>
+<P>
+The first constructor is the default constructor, which sets the
+<B><TT>DwField</TT></B> object's field name and field body to the empty string,
+set its parent to <B><TT>NULL</TT></B>, and sets its
+<B><TT>DwFieldBody</TT></B> object to <B><TT>NULL</TT></B>.
+<P>
+The second constructor is the copy constructor, which performs a deep copy
+of <B><TT>aField</TT></B>. The parent of the new <B><TT>DwField</TT></B>
+object is set to <B><TT>NULL</TT></B>.
+<P>
+The third constructor copies <B><TT>aStr</TT></B> to the
+<B><TT>DwField</TT></B> object's string representation and sets
+<B><TT>aParent</TT></B> as its parent. The virtual member function
+<B><TT>Parse()</TT></B> should be called immediately after this constructor
+in order to parse the string representation. Unless it is
+<B><TT>NULL</TT></B>, <B><TT>aParent</TT></B> should point to an object of
+a class derived from <B><TT>DwHeaders</TT></B>.
+<P>
+<FONT COLOR="teal"><B> const DwField&amp; <A NAME="op_eq">operator =</A>
+(const DwField&amp; aField) </B></FONT>
+<P>
+This is the assignment operator, which performs a deep copy of
+<B><TT>aField</TT></B>. The parent node of the <B><TT>DwField</TT></B> object
+is not changed.
+<P>
+<FONT COLOR="teal"><B> virtual void <A NAME="Parse">Parse</A>() </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+executes the parse method for <B><TT>DwField</TT></B> objects. The parse
+method creates or updates the broken-down representation from the string
+representation. For <B><TT>DwField</TT></B> objects, the parse method parses
+the string representation, sets the values of the field name string and the
+field body string, and creates an instance of the appropriate subclass of
+<B><TT>DwFieldBody</TT></B>. This member function also calls the
+<B><TT>Parse()</TT></B> member function of its contained
+<B><TT>DwFieldBody</TT></B> object.
+<P>
+You should call this member function after you set or modify the string
+representation, and before you access the field name, the field body, or
+the contained <B><TT>DwFieldBody</TT></B> object.
+<P>
+This function clears the is-modified flag.
+<P>
+<FONT COLOR="teal"><B> virtual void <A NAME="Assemble">Assemble</A>()
+</B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+executes the assemble method for <B><TT>DwField</TT></B> objects. The assemble
+method creates or updates the string representation from the broken-down
+representation. In more concrete terms, the assemble method builds the string
+representation from the field name and the string representation of the contained
+<B><TT>DwFieldBody</TT></B> object. This member function calls the
+<B><TT>Assemble()</TT></B> member function of its contained
+<B><TT>DwFieldBody</TT></B> object.
+<P>
+You should call this member function after you modify either the field name
+or the contained <B><TT>DwFieldBody</TT></B> object, and before you retrieve
+the string representation.
+<P>
+This function clears the is-modified flag.
+<P>
+<FONT COLOR="teal"><B> virtual DwMessageComponent*
+<A NAME="Clone">Clone</A>() const </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+creates a new <B><TT>DwField</TT></B> on the free store that has the same
+value as this <B><TT>DwField</TT></B> object. The basic idea is that of a
+virtual copy constructor.
+<P>
+<FONT COLOR="teal"><B> Dw<A NAME="FieldBody">FieldBody</A>* FieldBody() const
+</B></FONT>
+<P>
+Returns the <B><TT>DwFieldBody</TT></B> object contained by this
+<B><TT>DwField</TT></B> object. If there is no field body,
+<B><TT>NULL</TT></B> will be returned.
+<P>
+<FONT COLOR="teal"><B> const DwString&amp;
+<A NAME="FieldNameStr">FieldNameStr</A>() const </B></FONT>
+<P>
+Returns the field name of this header field as a string.
+<P>
+<FONT COLOR="teal"><B> const DwString&amp;
+<A NAME="FieldBodyStr">FieldBodyStr</A>() const </B></FONT>
+<P>
+Returns the field body of this header field as a string.
+<P>
+<FONT COLOR="teal"><B> DwField* <A NAME="Next">Next</A>() const </B></FONT>
+<P>
+Returns the next <B><TT>DwField</TT></B> object following this
+<B><TT>DwField</TT></B> object in the list contained in a
+<B><TT>DwHeaders</TT></B>. Returns <B><TT>NULL</TT></B> if this object is
+last in the list.
+<P>
+<FONT COLOR="teal"><B> void
+<A NAME="SetFieldBody">SetFieldBody</A>(DwFieldBody* aFieldBody) </B></FONT>
+<P>
+Sets the <B><TT>DwFieldBody</TT></B> object contained by this object.
+<P>
+<FONT COLOR="teal"><B> void
+<A NAME="SetFieldNameStr">SetFieldNameStr</A>(const DwString&amp; aStr)
+</B></FONT>
+<P>
+Sets the field name of this header field.
+<P>
+<FONT COLOR="teal"><B> void
+<A NAME="SetFieldBodyStr">SetFieldBodyStr</A>(const DwString&amp; aStr)
+</B></FONT>
+<P>
+Sets the field body of this header field.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="SetNext">SetNext</A>(const DwField*
+aField) </B></FONT>
+<P>
+This <I>advanced</I> function sets <B><TT>aField</TT></B> as the next field
+following this field in the list of fields contained in the headers. Since
+<B><TT>DwHeaders</TT></B> contains member functions for adding
+<B><TT>DwField</TT></B> objects to its list, this function should be avoided
+for most applications.
+<P>
+<FONT COLOR="teal"><B> static DwField* <A NAME="NewField">NewField</A>(const
+DwString&amp; aStr, DwMessageComponent* aParent) </B></FONT>
+<P>
+Creates a new <B><TT>DwField</TT></B> object on the free store. If the static
+data member <B><TT>sNewField</TT></B> is <B><TT>NULL</TT></B>, this member
+function will create a new <B><TT>DwField</TT></B> and return it. Otherwise,
+<B><TT>NewField()</TT></B> will call the user-supplied function pointed to
+by <B><TT>sNewField</TT></B>, which is assumed to return an object from a
+class derived from <B><TT>DwField</TT></B>, and return that object.
+<P>
+<FONT COLOR="teal"><B> static DwFieldBody*
+<A NAME="CreateFieldBody">CreateFieldBody</A>(const DwString&amp; aFieldName,
+const DwString&amp; aFieldBody, DwMessageComponent* aParent) </B></FONT>
+<P>
+The static member function <B><TT>CreateFieldBody()</TT></B> is called from
+the <B><TT>Parse()</TT></B> member function and is responsible for creating
+a <B><TT>DwFieldBody</TT></B> object for this particular field. A typical
+scenario might go as follows: This member function examines the field name
+for this field, finds that it contains "To", creates a
+<B><TT>DwAddressList</TT></B> object to contain the field body, calls the
+<B><TT>Parse()</TT></B> member function for the
+<B><TT>DwAddressList</TT></B>, and sets the <B><TT>DwAddressList</TT></B>
+object as this <B><TT>DwField</TT></B> object's
+<B><TT>DwFieldBody</TT></B>.
+<P>
+If you want to override the behavior of
+<B><TT>CreateFieldBody()</TT></B>, you can do so by setting the public data
+member <B><TT>sCreateFieldBody</TT></B> to point to your own function.
+<B><TT>CreateFieldBody()</TT></B> first checks to see if
+<B><TT>sCreateFieldBody</TT></B> is <B><TT>NULL</TT></B>. If it is not,
+<B><TT>CreateFieldBody()</TT></B> will assume that it points to a user-supplied
+function and will call that function. If it is <B><TT>NULL</TT></B>,
+<B><TT>CreateFieldBody()</TT></B> will call
+<B><TT>_CreateFieldBody()</TT></B>, which actually creates the
+<B><TT>DwFieldBody</TT></B> object. You may call
+<B><TT>_CreateFieldBody()</TT></B> from your own function for fields you
+do not wish to handle.
+<P>
+<FONT COLOR="teal"><B> virtual void
+<A NAME="PrintDebugInfo">PrintDebugInfo</A>(ostream&amp; aStrm, int aDepth=0)
+const </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+prints debugging information about this object to <B><TT>aStrm</TT></B>.
+It will also call <B><TT>PrintDebugInfo()</TT></B> for any of its child
+components down to a level of <B><TT>aDepth</TT></B>.
+<P>
+This member function is available only in the debug version of the library.
+<P>
+<FONT COLOR="teal"><B> virtual void
+<A NAME="CheckInvariants">CheckInvariants</A>() const </B></FONT>
+<P>
+Aborts if one of the invariants of the object fails. Use this member function
+to track down bugs.
+<P>
+This member function is available only in the debug version of the library.
+<H2>
+ <FONT COLOR="navy"> Public Data Members </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> static DwField*
+(*<A NAME="sNewField">sNewField</A>)(const DwString&amp;, DwMessageComponent*)
+</B></FONT>
+<P>
+If <B><TT>sNewField</TT></B> is not <B><TT>NULL</TT></B>, it is assumed to
+point to a user-supplied function that returns an object from a class derived
+from <B><TT>DwField</TT></B>.
+<P>
+<FONT COLOR="teal"><B> static DwFieldBody*
+(*<A NAME="sCreateFieldBody">sCreateFieldBody</A>)(const DwString&amp;
+aFieldName, const DwString&amp; aFieldBody, DwMessageComponent* aParent)
+</B></FONT>
+<P>
+See <B><TT><A HREF="#CreateFieldBody">CreateFieldBody</A>()</TT></B>.
+<H2>
+ <FONT COLOR="navy"> Protected Member Functions </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> void
+<A NAME="_SetFieldBody">_SetFieldBody</A>(DwFieldBody* aFieldBody)
+</B></FONT>
+<P>
+Sets the <B><TT>DwFieldBody</TT></B> object contained by this object. This
+function differs from <B><TT>SetFieldBody()</TT></B> in that it does not
+set the is-modified flag.
+<P>
+</BODY></HTML>
diff --git a/mimelib/doc/fieldbdy.html b/mimelib/doc/fieldbdy.html
new file mode 100644
index 000000000..856fd5330
--- /dev/null
+++ b/mimelib/doc/fieldbdy.html
@@ -0,0 +1,144 @@
+<HTML>
+<HEAD>
+ <TITLE> DwFieldBody Man Page </TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<H2>
+ <FONT COLOR="navy"> NAME </FONT>
+</H2>
+<P>
+DwFieldBody -- Class representing a MIME header field body
+<H2>
+ <FONT COLOR="navy"> SYNOPSIS </FONT>
+</H2>
+<PRE>class DW_EXPORT DwFieldBody : public <A HREF="msgcmp.html">DwMessageComponent</A> {
+
+ friend class DwField;
+
+public:
+
+ <A HREF="fieldbdy.html#DwFieldBody">DwFieldBody</A>();
+ <A HREF="fieldbdy.html#DwFieldBody">DwFieldBody</A>(const DwFieldBody&amp; aFieldBody);
+ <A HREF="fieldbdy.html#DwFieldBody">DwFieldBody</A>(const DwString&amp; aStr, DwMessageComponent* aParent=0);
+ virtual ~DwFieldBody();
+ const DwFieldBody&amp; <A HREF="fieldbdy.html#op_eq">operator =</A> (const DwFieldBody&amp; aFieldBody);
+ void <A HREF="fieldbdy.html#SetOffset">SetOffset</A>(int aOffset);
+ void <A HREF="fieldbdy.html#SetFolding">SetFolding</A>(DwBool aTrueOrFalse);
+ DwBool <A HREF="fieldbdy.html#IsFolding">IsFolding</A>() const;
+
+protected:
+
+ int mLineOffset;
+ DwBool mDoFolding;
+
+public:
+
+ virtual void <A HREF="fieldbdy.html#PrintDebugInfo">PrintDebugInfo</A>(ostream&amp; aStrm, int aDepth=0) const;
+ virtual void <A HREF="fieldbdy.html#CheckInvariants">CheckInvariants</A>() const;
+
+protected:
+
+ void _PrintDebugInfo(ostream&amp; aStrm) const;
+};
+</PRE>
+<H2>
+ <FONT COLOR="navy"> DESCRIPTION </FONT>
+</H2>
+<P>
+<B><TT>DwFieldBody</TT></B> represents the field-body element in the BNF
+grammar specified by RFC-822. It is an abstract base class that defines the
+interface common to all structured field bodies.
+<P>
+In the tree (broken-down) representation of a message, a
+<B><TT>DwFieldBody</TT></B> object may be either a leaf node, having a parent
+but no child nodes, or an intermediate node, having a parent and one or more
+child nodes. The parent node is the
+<B><TT><A HREF="field.html">DwField</A></TT></B> object that contains it.
+Child nodes, if present, depend on the particular subclass of
+<B><TT>DwFieldBody</TT></B> that is instantiated. A
+<B><TT>DwAddressList</TT></B> object, for example, has
+<B><TT>DwAddress</TT></B> objects as its child nodes.
+<P>
+Since <B><TT>DwFieldBody</TT></B> is an abstract base class, you cannot create
+instances of it directly. Normally, objects of classes derived from
+<B><TT>DwFieldBody</TT></B> are obtained by calling convenience member functions
+in the class <B><TT><A HREF="headers.html">DwHeaders</A></TT></B>.
+<P>
+Some MIME parsers are broken in that they do not handle the folding of some
+fields properly. <B><TT>DwFieldBody</TT></B> folds its string representation
+by default. You can disable folding, however, by calling the
+<B><TT>SetFolding()</TT></B> member function. To determine if folding is
+enabled, call <B><TT>IsFolding()</TT></B>.
+<H2>
+ <FONT COLOR="navy"> Public Member Functions </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> <A NAME="DwFieldBody">DwFieldBody</A>() <BR>
+DwFieldBody(const DwFieldBody&amp; aFieldBody) <BR>
+DwFieldBody(const DwString&amp; aStr, DwMessageComponent* aParent=0)
+</B></FONT>
+<P>
+The first constructor is the default constructor, which sets the
+<B><TT>DwFieldBody</TT></B> object's string representation to the empty string
+and sets its parent to <B><TT>NULL</TT></B>.
+<P>
+The second constructor is the copy constructor, which performs a deep copy
+of <B><TT>aFieldBody</TT></B>. The parent of the new
+<B><TT>DwFieldBody</TT></B> object is set to <B><TT>NULL</TT></B>.
+<P>
+The third constructor copies <B><TT>aStr</TT></B> to the
+<B><TT>DwFieldBody</TT></B> object's string representation and sets
+<B><TT>aParent</TT></B> as its parent. The virtual member function
+<B><TT>Parse()</TT></B> should be called immediately after this constructor
+in order to parse the string representation. Unless it is
+<B><TT>NULL</TT></B>, <B><TT>aParent</TT></B> should point to an object of
+a class derived from <B><TT>DwField</TT></B>.
+<P>
+<FONT COLOR="teal"><B> const DwFieldBody&amp; <A NAME="op_eq">operator =</A>
+(const DwFieldBody&amp; aFieldBody) </B></FONT>
+<P>
+This is the assignment operator, which performs a deep copy of
+<B><TT>aFieldBody</TT></B>. The parent node of the
+<B><TT>DwFieldBody</TT></B> object is not changed.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="SetOffset">SetOffset</A>(int aOffset)
+</B></FONT>
+<P>
+Sets the offset to <B><TT>aOffset</TT></B>. The offset is used when folding
+lines. It indicates how much the first line should be offset to account for
+the field name, colon, and initial white space.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="SetFolding">SetFolding</A>(DwBool
+aTrueOrFalse) </B></FONT>
+<P>
+Enables (<B><TT>aTrueOrFalse = DwTrue</TT></B>) or disables
+(<B><TT>aTrueOrFalse = DwFalse</TT></B>) the folding of fields. The default
+is to fold fields. Unfortunately, some parsers are broke and do not handle
+folded lines properly. This function allows a kludge to deal with these broken
+parsers.
+<P>
+<FONT COLOR="teal"><B> DwBool <A NAME="IsFolding">IsFolding</A>() const
+</B></FONT>
+<P>
+Returns a boolean indicating if folding of fields is enabled.
+<P>
+<FONT COLOR="teal"><B> virtual void
+<A NAME="PrintDebugInfo">PrintDebugInfo</A>(ostream&amp; aStrm, int aDepth=0)
+const </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+prints debugging information about this object to <B><TT>aStrm</TT></B>.
+It will also call <B><TT>PrintDebugInfo()</TT></B> for any of its child
+components down to a level of <B><TT>aDepth</TT></B>.
+<P>
+This member function is available only in the debug version of the library.
+<P>
+<FONT COLOR="teal"><B> virtual void
+<A NAME="CheckInvariants">CheckInvariants</A>() const </B></FONT>
+<P>
+Aborts if one of the invariants of the object fails. Use this member function
+to track down bugs.
+<P>
+This member function is available only in the debug version of the library.
+<P>
+</BODY></HTML>
diff --git a/mimelib/doc/group.html b/mimelib/doc/group.html
new file mode 100644
index 000000000..1d374d874
--- /dev/null
+++ b/mimelib/doc/group.html
@@ -0,0 +1,221 @@
+<HTML>
+<HEAD>
+ <TITLE> DwGroup Man Page </TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<H2>
+ <FONT COLOR="navy"> NAME </FONT>
+</H2>
+<P>
+DwGroup -- Class representing an RFC-822 address group
+<H2>
+ <FONT COLOR="navy"> SYNOPSIS </FONT>
+</H2>
+<PRE>class DW_EXPORT DwGroup : public <A HREF="address.html">DwAddress</A> {
+
+public:
+
+ <A HREF="group.html#DwGroup">DwGroup</A>();
+ <A HREF="group.html#DwGroup">DwGroup</A>(const DwGroup&amp; aGroup);
+ <A HREF="group.html#DwGroup">DwGroup</A>(const DwString&amp; aStr, DwMessageComponent* aParent=0);
+ virtual ~DwGroup();
+ const DwGroup&amp; <A HREF="group.html#op_eq">operator =</A> (const DwGroup&amp; aGroup);
+ virtual void <A HREF="group.html#Parse">Parse</A>();
+ virtual void <A HREF="group.html#Assemble">Assemble</A>();
+ virtual DwMessageComponent* <A HREF="group.html#Clone">Clone</A>() const;
+ const DwString&amp; <A HREF="group.html#GroupName">GroupName</A>() const;
+ const DwString&amp; <A HREF="group.html#Phrase">Phrase</A>() const;
+ void <A HREF="group.html#SetGroupName">SetGroupName</A>(const DwString&amp; aName);
+ void <A HREF="group.html#SetPhrase">SetPhrase</A>(const DwString&amp; aPhrase);
+ DwMailboxList&amp; <A HREF="group.html#MailboxList">MailboxList</A>() const;
+ static DwGroup* <A HREF="group.html#NewGroup">NewGroup</A>(const DwString&amp; aStr,
+ DwMessageComponent* aParent);
+ static DwGroup* (*<A HREF="group.html#sNewGroup">sNewGroup</A>)(const DwString&amp;, DwMessageComponent*);
+
+protected:
+
+ DwMailboxList* <A HREF="group.html#mMailboxList">mMailboxList</A>;
+
+public:
+
+ virtual void <A HREF="group.html#PrintDebugInfo">PrintDebugInfo</A>(ostream&amp; aStrm, int aDepth=0) const;
+ virtual void <A HREF="group.html#CheckInvariants">CheckInvariants</A>() const;
+
+protected:
+
+ void _PrintDebugInfo(ostream&amp; aStrm) const;
+};
+</PRE>
+<H2>
+ <FONT COLOR="navy"> DESCRIPTION </FONT>
+</H2>
+<P>
+<B><TT>DwGroup</TT></B> represents a <I>group</I> as described in RFC-822.
+A group contains a group name and a (possibly empty) list of
+<I>mailboxes</I>. In MIME++, a <B><TT>DwGroup</TT></B> object contains a
+string for the group name and a
+<B><TT><A HREF="mboxlist.html">DwMailboxList</A></TT></B> object for the
+list of mailboxes.
+<P>
+In the tree (broken-down) representation of message, a
+<B><TT>DwGroup</TT></B> object may be only an intermediate node, having both
+a parent and a single child node. Its parent node must be a
+<B><TT><A HREF="field.html">DwField</A></TT></B> or a
+<B><TT><A HREF="addrlist.html">DwAddressList</A></TT></B>. Its child is a
+<B><TT>DwMailboxList</TT></B>.
+<P>
+A <B><TT>DwGroup</TT></B> is a
+<B><TT><A HREF="address.html">DwAddress</A></TT></B>, and therefore it can
+be included in a list of <B><TT>DwAddress</TT></B> objects. To get the next
+<B><TT>DwAddress</TT></B> object in a list, use the inherited member function
+<B><TT>DwAddress::Next()</TT></B>.
+<H2>
+ <FONT COLOR="navy"> Public Member Functions </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> <A NAME="DwGroup">DwGroup</A>() <BR>
+DwGroup(const DwGroup&amp; aGroup) <BR>
+DwGroup(const DwString&amp; aStr, DwMessageComponent* aParent=0) </B></FONT>
+<P>
+The first constructor is the default constructor, which sets the
+<B><TT>DwGroup</TT></B> object's string representation to the empty string
+and sets its parent to <B><TT>NULL</TT></B>.
+<P>
+The second constructor is the copy constructor, which performs a deep copy
+of <B><TT>aGroup</TT></B>. The parent of the new <B><TT>DwGroup</TT></B>
+object is set to <B><TT>NULL</TT></B>.
+<P>
+The third constructor copies <B><TT>aStr</TT></B> to the
+<B><TT>DwGroup</TT></B> object's string representation and sets
+<B><TT>aParent</TT></B> as its parent. The virtual member function
+<B><TT>Parse()</TT></B> should be called immediately after this constructor
+in order to parse the string representation. Unless it is
+<B><TT>NULL</TT></B>, <B><TT>aParent</TT></B> should point to an object of
+a class derived from <B><TT>DwField</TT></B> or
+<B><TT>DwAddressList</TT></B>.
+<P>
+<FONT COLOR="teal"><B> const DwGroup&amp; <A NAME="op_eq">operator =</A>
+(const DwGroup&amp; aGroup) </B></FONT>
+<P>
+This is the assignment operator, which performs a deep copy of
+<B><TT>aGroup</TT></B>. The parent node of the <B><TT>DwGroup</TT></B> object
+is not changed.
+<P>
+<FONT COLOR="teal"><B> virtual void <A NAME="Parse">Parse</A>() </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+executes the parse method for <B><TT>DwGroup</TT></B> objects. The parse
+method creates or updates the broken-down representation from the string
+representation. For <B><TT>DwGroup</TT></B> objects, the parse method parses
+the string representation to extract the group name and to create a
+<B><TT>DwMailboxList</TT></B> object from the list of mailboxes. This member
+function also calls the <B><TT>Parse()</TT></B> member function of the
+<B><TT>DwMailboxList</TT></B> object it creates.
+<P>
+You should call this member function after you set or modify the string
+representation, and before you access the group name or the mailbox list.
+<P>
+This function clears the is-modified flag.
+<P>
+<FONT COLOR="teal"><B> virtual void <A NAME="Assemble">Assemble</A>()
+</B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+executes the assemble method for <B><TT>DwGroup</TT></B> objects. The assemble
+method creates or updates the string representation from the broken-down
+representation. That is, the assemble method builds the string representation
+from its group name and mailbox list. Before it builds the string representation,
+this function calls the <B><TT>Assemble()</TT></B> member function of its
+contained <B><TT>DwMailboxList</TT></B> object.
+<P>
+You should call this member function after you set or modify either the group
+name or the contained <B><TT>DwMailboxList</TT></B> object, and before you
+retrieve the string representation.
+<P>
+This function clears the is-modified flag.
+<P>
+<FONT COLOR="teal"><B> virtual DwMessageComponent*
+<A NAME="Clone">Clone</A>() const </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+creates a new <B><TT>DwGroup</TT></B> on the free store that has the same
+value as this <B><TT>DwGroup</TT></B> object. The basic idea is that of a
+virtual copy constructor.
+<P>
+<FONT COLOR="teal"><B> const DwString&amp;
+<A NAME="GroupName">GroupName</A>() const </B></FONT>
+<P>
+Returns the name of the group.
+<P>
+<FONT COLOR="teal"><B> const DwString&amp; <A NAME="Phrase">Phrase</A>()
+const </B></FONT>
+<P>
+Returns the name of the phrase part of a group as described in RFC-822. The
+phrase is the same as the group name.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="SetGroupName">SetGroupName</A>(const
+DwString&amp; aName) </B></FONT>
+<P>
+Sets the name of the group.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="SetPhrase">SetPhrase</A>(const
+DwString&amp; aPhrase) </B></FONT>
+<P>
+Sets the name of the phrase part of a group as described in RFC-822. The
+phrase is the same as the group name.
+<P>
+<FONT COLOR="teal"><B> Dw<A NAME="MailboxList">MailboxList</A>&amp; MailboxList()
+const </B></FONT>
+<P>
+Provides access to the list of mailboxes that is part of a group as described
+in RFC-822.
+<P>
+<FONT COLOR="teal"><B> static DwGroup* <A NAME="NewGroup">NewGroup</A>(const
+DwString&amp; aStr, DwMessageComponent* aParent) </B></FONT>
+<P>
+Creates a new <B><TT>DwGroup</TT></B> object on the free store. If the static
+data member <B><TT>sNewGroup</TT></B> is <B><TT>NULL</TT></B>, this member
+function will create a new <B><TT>DwGroup</TT></B> and return it. Otherwise,
+<B><TT>NewGroup()</TT></B> will call the user-supplied function pointed to
+by <B><TT>sNewGroup</TT></B>, which is assumed to return an object from a
+class derived from <B><TT>DwGroup</TT></B>, and return that object.
+<P>
+<FONT COLOR="teal"><B> virtual void
+<A NAME="PrintDebugInfo">PrintDebugInfo</A>(ostream&amp; aStrm, int aDepth=0)
+const </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+prints debugging information about this object to <B><TT>aStrm</TT></B>.
+It will also call <B><TT>PrintDebugInfo()</TT></B> for any of its child
+components down to a level of <B><TT>aDepth</TT></B>.
+<P>
+This member function is available only in the debug version of the library.
+<P>
+<FONT COLOR="teal"><B> virtual void
+<A NAME="CheckInvariants">CheckInvariants</A>() const </B></FONT>
+<P>
+Aborts if one of the invariants of the object fails. Use this member function
+to track down bugs.
+<P>
+This member function is available only in the debug version of the library.
+<H2>
+ <FONT COLOR="navy"> Public Data Members </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> static DwGroup*
+(*<A NAME="sNewGroup">sNewGroup</A>)(const DwString&amp;, DwMessageComponent*)
+</B></FONT>
+<P>
+If <B><TT>sNewGroup</TT></B> is not <B><TT>NULL</TT></B>, it is assumed to
+point to a user-supplied function that returns an object from a class derived
+from <B><TT>DwGroup</TT></B>.
+<H2>
+ <FONT COLOR="navy"> Protected Data Members </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> DwMailboxList* <A NAME="mMailboxList">mMailboxList</A>
+</B></FONT>
+<P>
+Points to the <B><TT>DwMailboxList</TT></B> object.
+<P>
+</BODY></HTML>
diff --git a/mimelib/doc/headers.html b/mimelib/doc/headers.html
new file mode 100644
index 000000000..8bf94ad98
--- /dev/null
+++ b/mimelib/doc/headers.html
@@ -0,0 +1,512 @@
+<HTML>
+<HEAD>
+ <TITLE> DwHeaders Man Page </TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<H2>
+ <FONT COLOR="navy"> NAME </FONT>
+</H2>
+<P>
+DwHeaders -- Class representing the collection of header fields in a message
+or body part
+<H2>
+ <FONT COLOR="navy"> SYNOPSIS </FONT>
+</H2>
+<PRE>
+class DW_EXPORT DwHeaders : public <A HREF="msgcmp.html">DwMessageComponent</A> {
+
+public:
+
+ <A HREF="headers.html#DwHeaders">DwHeaders</A>();
+ <A HREF="headers.html#DwHeaders">DwHeaders</A>(const DwHeaders&amp; aHeaders);
+ <A HREF="headers.html#DwHeaders">DwHeaders</A>(const DwString&amp; aStr, DwMessageComponent* aParent=0);
+ virtual ~DwHeaders();
+ const DwHeaders&amp; <A HREF="headers.html#op_eq">operator =</A> (const DwHeaders&amp; aHeaders);
+ virtual void <A HREF="headers.html#Parse">Parse</A>();
+ virtual void <A HREF="headers.html#Assemble">Assemble</A>();
+ virtual DwMessageComponent* <A HREF="headers.html#Clone">Clone</A>() const;
+ DwBool <A HREF="headers.html#HasBcc">HasBcc</A>() const;
+ DwBool <A HREF="headers.html#HasCc">HasCc</A>() const;
+ DwBool <A HREF="headers.html#HasComments">HasComments</A>() const;
+ DwBool <A HREF="headers.html#HasDate">HasDate</A>() const;
+ DwBool <A HREF="headers.html#HasEncrypted">HasEncrypted</A>() const;
+ DwBool <A HREF="headers.html#HasFrom">HasFrom</A>() const;
+ DwBool <A HREF="headers.html#HasInReplyTo">HasInReplyTo</A>() const;
+ DwBool <A HREF="headers.html#HasKeywords">HasKeywords</A>() const;
+ DwBool <A HREF="headers.html#HasMessageId">HasMessageId</A>() const;
+ DwBool <A HREF="headers.html#HasReceived">HasReceived</A>() const;
+ DwBool <A HREF="headers.html#HasReferences">HasReferences</A>() const;
+ DwBool <A HREF="headers.html#HasReplyTo">HasReplyTo</A>() const;
+ DwBool <A HREF="headers.html#HasResentBcc">HasResentBcc</A>() const;
+ DwBool <A HREF="headers.html#HasResentCc">HasResentCc</A>() const;
+ DwBool <A HREF="headers.html#HasResentDate">HasResentDate</A>() const;
+ DwBool <A HREF="headers.html#HasResentFrom">HasResentFrom</A>() const;
+ DwBool <A HREF="headers.html#HasResentMessageId">HasResentMessageId</A>() const;
+ DwBool <A HREF="headers.html#HasResentReplyTo">HasResentReplyTo</A>() const;
+ DwBool <A HREF="headers.html#HasResentSender">HasResentSender</A>() const;
+ DwBool <A HREF="headers.html#HasResentTo">HasResentTo</A>() const;
+ DwBool <A HREF="headers.html#HasReturnPath">HasReturnPath</A>() const;
+ DwBool <A HREF="headers.html#HasSender">HasSender</A>() const;
+ DwBool <A HREF="headers.html#HasSubject">HasSubject</A>() const;
+ DwBool <A HREF="headers.html#HasTo">HasTo</A>() const;
+ DwBool <A HREF="headers.html#HasApproved">HasApproved</A>() const;
+ DwBool <A HREF="headers.html#HasControl">HasControl</A>() const;
+ DwBool <A HREF="headers.html#HasDistribution">HasDistribution</A>() const;
+ DwBool <A HREF="headers.html#HasExpires">HasExpires</A>() const;
+ DwBool <A HREF="headers.html#HasFollowupTo">HasFollowupTo</A>() const;
+ DwBool <A HREF="headers.html#HasLines">HasLines</A>() const;
+ DwBool <A HREF="headers.html#HasNewsgroups">HasNewsgroups</A>() const;
+ DwBool <A HREF="headers.html#HasOrganization">HasOrganization</A>() const;
+ DwBool <A HREF="headers.html#HasPath">HasPath</A>() const;
+ DwBool <A HREF="headers.html#HasSummary">HasSummary</A>() const;
+ DwBool <A HREF="headers.html#HasXref">HasXref</A>() const;
+ DwBool <A HREF="headers.html#HasContentDescription">HasContentDescription</A>() const;
+ DwBool <A HREF="headers.html#HasContentId">HasContentId</A>() const;
+ DwBool <A HREF="headers.html#HasContentTransferEncoding">HasContentTransferEncoding</A>() const;
+ DwBool <A HREF="headers.html#HasCte">HasCte</A>() const;
+ DwBool <A HREF="headers.html#HasContentType">HasContentType</A>() const;
+ DwBool <A HREF="headers.html#HasMimeVersion">HasMimeVersion</A>() const;
+ DwBool <A HREF="headers.html#HasContentDisposition">HasContentDisposition</A>() const;
+ DwBool <A HREF="headers.html#HasField">HasField</A>(const char* aFieldName) const;
+ DwBool <A HREF="headers.html#HasField">HasField</A>(const DwString&amp; aFieldName) const;
+ DwAddressList&amp; <A HREF="headers.html#Bcc">Bcc</A>();
+ DwAddressList&amp; <A HREF="headers.html#Cc">Cc</A>();
+ DwText&amp; <A HREF="headers.html#Comments">Comments</A>();
+ DwDateTime&amp; <A HREF="headers.html#Date">Date</A>();
+ DwText&amp; <A HREF="headers.html#Encrypted">Encrypted</A>();
+ DwMailboxList&amp; <A HREF="headers.html#From">From</A>();
+ DwText&amp; <A HREF="headers.html#InReplyTo">InReplyTo</A>();
+ DwText&amp; <A HREF="headers.html#Keywords">Keywords</A>();
+ DwMsgId&amp; <A HREF="headers.html#MessageId">MessageId</A>();
+ DwText&amp; <A HREF="headers.html#Received">Received</A>();
+ DwText&amp; <A HREF="headers.html#References">References</A>();
+ DwAddressList&amp; <A HREF="headers.html#ReplyTo">ReplyTo</A>();
+ DwAddressList&amp; <A HREF="headers.html#ResentBcc">ResentBcc</A>();
+ DwAddressList&amp; <A HREF="headers.html#ResentCc">ResentCc</A>();
+ DwDateTime&amp; <A HREF="headers.html#ResentDate">ResentDate</A>();
+ DwMailboxList&amp; <A HREF="headers.html#ResentFrom">ResentFrom</A>();
+ DwMsgId&amp; <A HREF="headers.html#ResentMessageId">ResentMessageId</A>();
+ DwAddressList&amp; <A HREF="headers.html#ResentReplyTo">ResentReplyTo</A>();
+ DwMailbox&amp; <A HREF="headers.html#ResentSender">ResentSender</A>();
+ DwAddressList&amp; <A HREF="headers.html#ResentTo">ResentTo</A>();
+ DwAddress&amp; <A HREF="headers.html#ReturnPath">ReturnPath</A>();
+ DwMailbox&amp; <A HREF="headers.html#Sender">Sender</A>();
+ DwText&amp; <A HREF="headers.html#Subject">Subject</A>();
+ DwAddressList&amp; <A HREF="headers.html#To">To</A>();
+ DwText&amp; <A HREF="headers.html#Approved">Approved</A>();
+ DwText&amp; <A HREF="headers.html#Control">Control</A>();
+ DwText&amp; <A HREF="headers.html#Distribution">Distribution</A>();
+ DwText&amp; <A HREF="headers.html#Expires">Expires</A>();
+ DwText&amp; <A HREF="headers.html#FollowupTo">FollowupTo</A>();
+ DwText&amp; <A HREF="headers.html#Lines">Lines</A>();
+ DwText&amp; <A HREF="headers.html#Newsgroups">Newsgroups</A>();
+ DwText&amp; <A HREF="headers.html#Organization">Organization</A>();
+ DwText&amp; <A HREF="headers.html#Path">Path</A>();
+ DwText&amp; <A HREF="headers.html#Summary">Summary</A>();
+ DwText&amp; <A HREF="headers.html#Xref">Xref</A>();
+ DwText&amp; <A HREF="headers.html#ContentDescription">ContentDescription</A>();
+ DwMsgId&amp; <A HREF="headers.html#ContentId">ContentId</A>();
+ DwMechanism&amp; <A HREF="headers.html#ContentTransferEncoding">ContentTransferEncoding</A>();
+ DwMechanism&amp; <A HREF="headers.html#Cte">Cte</A>();
+ DwMediaType&amp; <A HREF="headers.html#ContentType">ContentType</A>();
+ DwText&amp; <A HREF="headers.html#MimeVersion">MimeVersion</A>();
+ DwDispositionType&amp; <A HREF="headers.html#ContentDisposition">ContentDisposition</A>();
+ DwFieldBody&amp; <A HREF="headers.html#FieldBody">FieldBody</A>(const DwString&amp; aFieldName);
+ int <A HREF="headers.html#NumFields">NumFields</A>() const;
+ DwField* <A HREF="headers.html#FirstField">FirstField</A>() const;
+ DwField* <A HREF="headers.html#FindField">FindField</A>(const char* aFieldName) const;
+ DwField* <A HREF="headers.html#FindField">FindField</A>(const DwString&amp; aFieldName) const;
+ void <A HREF="headers.html#AddOrReplaceField">AddOrReplaceField</A>(DwField* aField);
+ void <A HREF="headers.html#AddField">AddField</A>(DwField* aField);
+ void <A HREF="headers.html#AddFieldAt">AddFieldAt</A>(int aPos, DwField* aField);
+ void <A HREF="headers.html#RemoveField">RemoveField</A>(DwField* aField);
+ void <A HREF="headers.html#DeleteAllFields">DeleteAllFields</A>();
+ static DwHeaders* <A HREF="headers.html#NewHeaders">NewHeaders</A>(const DwString&amp; aStr,
+ DwMessageComponent* aParent);
+ static DwHeaders* (*<A HREF="headers.html#sNewHeaders">sNewHeaders</A>)(const DwString&amp;, DwMessageComponent*);
+
+protected:
+
+ void _AddField(DwField* aField);
+ DwField* mFirstField;
+
+protected:
+
+ static const char* const sClassName;
+ void CopyFields(DwField* aFirst);
+
+public:
+
+ virtual void <A HREF="headers.html#PrintDebugInfo">PrintDebugInfo</A>(ostream&amp; aStrm, int aDepth=0) const;
+ virtual void <A HREF="headers.html#CheckInvariants">CheckInvariants</A>() const;
+};
+</PRE>
+<H2>
+ <FONT COLOR="navy"> DESCRIPTION </FONT>
+</H2>
+<P>
+<B><TT>DwHeaders</TT></B> represents the collection of <I>header fields</I>
+(often called just <I>headers</I>) in an <I>entity</I> (either a message
+or body part), as described in RFC-822 and RFC-2045. A
+<B><TT>DwHeaders</TT></B> object manages a list of
+<A HREF="field.html"><B><TT>DwField</TT></B> </A>objects, which represent
+the individual header fields.
+<P>
+In the tree (broken-down) representation of a message, a
+<B><TT>DwHeaders</TT></B> object is an intermediate node, having both a parent
+node and several child nodes. The parent node is the
+<B><TT><A HREF="entity.html">DwEntity</A></TT></B> object that contains it.
+The child nodes are the <B><TT>DwField</TT></B> objects in the list it manages.
+(See the man page for
+<B><TT><A HREF="msgcmp.html">DwMessageComponent</A></TT></B> for a discussion
+of the tree representation of a message.)
+<P>
+Normally, you do not create a <B><TT>DwHeaders</TT></B> object directly,
+but you access it through the <B><TT>Headers()</TT></B> member function of
+<B><TT>DwEntity</TT></B>, which creates the <B><TT>DwHeaders</TT></B> object
+for you.
+<P>
+While <B><TT>DwHeaders</TT></B> has public member functions for managing
+the list of <B><TT>DwField</TT></B> objects it contains, you will normally
+use convenience functions to access the field bodies of the header fields
+directly. You can access the field body for a specific well-known header
+field by using the member function
+<B><TT><Field>&lt;Field&gt;()</TT></B>, where <B><TT><Field></TT></B>
+<B><TT>&lt;Field&gt;</TT></B> is the field name of the header field with
+hyphens removed and the first word following a hyphen capitalized. For example,
+to access the field body for the "MIME-version" header field, use
+<B><TT>MimeVersion()</TT></B>. The member function
+<B><TT><Field>&lt;Field&gt;()</TT></B> will create a header field with field
+name <B><TT><Field></TT></B> <B><TT>&lt;Field&gt;</TT></B> if such a header
+field does not already exist. You can check for the existence of a particular
+well-known header field by using the member function
+<B><TT>Has<Field>&lt;Field&gt;()</TT></B>. For example, to check for the
+existence of the MIME-version header field, use
+<B><TT>HasMimeVersion()</TT></B>. Well-known header fields are those documented
+in RFC-822 (standard email), RFC-1036 (USENET messages), RFC-2045 (MIME
+messages), and possibly other RFCs.
+<P>
+In the case of an extension field or user-defined field, you can access the
+field body of the header field by calling the member function
+<B><TT>FieldBody()</TT></B> with the field name as its argument. If the extension
+field or user-defined field does not exist, <B><TT>FieldBody()</TT></B> will
+create it. You can check for the existence of an extension field or user-defined
+field by using the member function <B><TT>HasField()</TT></B> with the field
+name as its argument.
+<P>
+<B><TT>DwHeaders</TT></B> has several other member functions provided for
+the sake of completeness that are not required for most applications. These
+functions are documented below.
+<H2>
+ <FONT COLOR="navy"> Public Member Functions </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> <A NAME="DwHeaders">DwHeaders</A>() <BR>
+DwHeaders(const DwHeaders&amp; aHeaders) <BR>
+DwHeaders(const DwString&amp; aStr, DwMessageComponent* aParent=0)
+</B></FONT>
+<P>
+The first constructor is the default constructor, which sets the
+<B><TT>DwHeaders</TT></B> object's string representation to the empty string
+and sets its parent to <B><TT>NULL</TT></B>.
+<P>
+The second constructor is the copy constructor, which performs a deep copy
+of <B><TT>aHeaders</TT></B>. The parent of the new
+<B><TT>DwHeaders</TT></B> object is set to <B><TT>NULL</TT></B>.
+<P>
+The third constructor copies <B><TT>aStr</TT></B> to the
+<B><TT>DwHeaders</TT></B> object's string representation and sets
+<B><TT>aParent</TT></B> as its parent. The virtual member function
+<B><TT>Parse()</TT></B> should be called immediately after this constructor
+in order to parse the string representation. Unless it is
+<B><TT>NULL</TT></B>, <B><TT>aParent</TT></B> should point to an object of
+a class derived from <B><TT>DwEntity</TT></B>.
+<P>
+<FONT COLOR="teal"><B> const DwHeaders&amp; <A NAME="op_eq">operator =</A>
+(const DwHeaders&amp; aHeaders) </B></FONT>
+<P>
+This is the assignment operator, which performs a deep copy of
+<B><TT>aHeaders</TT></B>. The parent node of the
+<B><TT>DwHeaders</TT></B> object is not changed.
+<P>
+<FONT COLOR="teal"><B> virtual void <A NAME="Parse">Parse</A>() </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+executes the parse method for <B><TT>DwHeaders</TT></B> objects. The parse
+method creates or updates the broken-down representation from the string
+representation. For <B><TT>DwHeaders</TT></B> objects,
+<B><TT>DwHeaders::Parse()</TT></B> parses the string representation to create
+a list of <B><TT>DwField</TT></B> objects. This member function also calls
+the <B><TT>Parse()</TT></B> member function of each
+<B><TT>DwField</TT></B> object in its list.
+<P>
+You should call this member function after you set or modify the string
+representation, and before you access any of the header fields.
+<P>
+This function clears the is-modified flag.
+<P>
+<FONT COLOR="teal"><B> virtual void <A NAME="Assemble">Assemble</A>()
+</B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+executes the assemble method for <B><TT>DwHeaders</TT></B> objects. The assemble
+method creates or updates the string representation from the broken-down
+representation. That is, the assemble method builds the string representation
+from its list of <B><TT>DwField</TT></B> objects. Before it builds the string
+representation, this function first calls the <B><TT>Assemble()</TT></B>
+member function of each <B><TT>DwField</TT></B> object in its list.
+<P>
+You should call this member function after you set or modify any of the header
+fields, and before you retrieve the string representation.
+<P>
+This function clears the is-modified flag.
+<P>
+<FONT COLOR="teal"><B> virtual DwMessageComponent*
+<A NAME="Clone">Clone</A>() const </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+creates a new <B><TT>DwHeaders</TT></B> on the free store that has the same
+value as this <B><TT>DwHeaders</TT></B> object. The basic idea is that of
+a virtual copy constructor.
+<P>
+<FONT COLOR="teal"><B> DwBool <A NAME="HasBcc">HasBcc</A>() const<BR>
+DwBool <A NAME="HasCc">HasCc</A>() const<BR>
+DwBool <A NAME="HasComments">HasComments</A>() const<BR>
+DwBool <A NAME="HasDate">HasDate</A>() const<BR>
+DwBool <A NAME="HasEncrypted">HasEncrypted</A>() const<BR>
+DwBool <A NAME="HasFrom">HasFrom</A>() const<BR>
+DwBool <A NAME="HasInReplyTo">HasInReplyTo</A>() const<BR>
+DwBool <A NAME="HasKeywords">HasKeywords</A>() const<BR>
+DwBool <A NAME="HasMessageId">HasMessageId</A>() const<BR>
+DwBool <A NAME="HasReceived">HasReceived</A>() const<BR>
+DwBool <A NAME="HasReferences">HasReferences</A>() const<BR>
+DwBool <A NAME="HasReplyTo">HasReplyTo</A>() const<BR>
+DwBool <A NAME="HasResentBcc">HasResentBcc</A>() const<BR>
+DwBool <A NAME="HasResentCc">HasResentCc</A>() const<BR>
+DwBool <A NAME="HasResentDate">HasResentDate</A>() const<BR>
+DwBool <A NAME="HasResentFrom">HasResentFrom</A>() const<BR>
+DwBool <A NAME="HasResentMessageId">HasResentMessageId</A>() const<BR>
+DwBool <A NAME="HasResentReplyTo">HasResentReplyTo</A>() const<BR>
+DwBool <A NAME="HasResentSender">HasResentSender</A>() const<BR>
+DwBool <A NAME="HasResentTo">HasResentTo</A>() const<BR>
+DwBool <A NAME="HasReturnPath">HasReturnPath</A>() const<BR>
+DwBool <A NAME="HasSender">HasSender</A>() const<BR>
+DwBool <A NAME="HasSubject">HasSubject</A>() const<BR>
+DwBool <A NAME="HasTo">HasTo</A>() const<BR>
+DwBool <A NAME="HasApproved">HasApproved</A>() const<BR>
+DwBool <A NAME="HasControl">HasControl</A>() const<BR>
+DwBool <A NAME="HasDistribution">HasDistribution</A>() const<BR>
+DwBool <A NAME="HasExpires">HasExpires</A>() const<BR>
+DwBool <A NAME="HasFollowupTo">HasFollowupTo</A>() const<BR>
+DwBool <A NAME="HasLines">HasLines</A>() const<BR>
+DwBool <A NAME="HasNewsgroups">HasNewsgroups</A>() const<BR>
+DwBool <A NAME="HasOrganization">HasOrganization</A>() const<BR>
+DwBool <A NAME="HasPath">HasPath</A>() const<BR>
+DwBool <A NAME="HasSummary">HasSummary</A>() const<BR>
+DwBool <A NAME="HasXref">HasXref</A>() const<BR>
+DwBool <A NAME="HasContentDescription">HasContentDescription</A>() const<BR>
+DwBool <A NAME="HasContentId">HasContentId</A>() const<BR>
+DwBool <A NAME="HasContentTransferEncoding">HasContentTransferEncoding</A>()
+const<BR>
+DwBool <A NAME="HasCte">HasCte</A>() const<BR>
+DwBool <A NAME="HasContentType">HasContentType</A>() const<BR>
+DwBool <A NAME="HasMimeVersion">HasMimeVersion</A>() const<BR>
+DwBool <A NAME="HasContentDisposition">HasContentDisposition</A>() const
+</B></FONT>
+<P>
+Each member function in this group returns a boolean value indicating whether
+a particular well-known header field is present in this object's collection
+of header fields.
+<P>
+<FONT COLOR="teal"><B> DwBool <A NAME="HasField">HasField</A>(const char*
+aFieldName) const <BR>
+DwBool HasField(const DwString&amp; aFieldName) const </B></FONT>
+<P>
+Returns true if the header field specified by <B><TT>aFieldName</TT></B>
+is present in this object's collection of header fields. These member functions
+are used for extension fields or user-defined fields.
+<P>
+<FONT COLOR="teal"><B> DwAddressList&amp; <A NAME="Bcc">Bcc</A>()<BR>
+DwAddressList&amp; <A NAME="Cc">Cc</A>()<BR>
+DwText&amp; <A NAME="Comments">Comments</A>()<BR>
+Dw<A NAME="Date">Date</A>Time&amp; Date()<BR>
+DwText&amp; <A NAME="Encrypted">Encrypted</A>()<BR>
+DwMailboxList&amp; <A NAME="From">From</A>()<BR>
+DwText&amp; <A NAME="InReplyTo">InReplyTo</A>()<BR>
+DwText&amp; <A NAME="Keywords">Keywords</A>()<BR>
+DwMsgId&amp; <A NAME="MessageId">MessageId</A>()<BR>
+DwText&amp; <A NAME="Received">Received</A>()<BR>
+DwText&amp; <A NAME="References">References</A>()<BR>
+DwAddressList&amp; <A NAME="ReplyTo">ReplyTo</A>()<BR>
+DwAddressList&amp; <A NAME="ResentBcc">ResentBcc</A>()<BR>
+DwAddressList&amp; <A NAME="ResentCc">ResentCc</A>()<BR>
+DwDateTime&amp; <A NAME="ResentDate">ResentDate</A>()<BR>
+DwMailboxList&amp; <A NAME="ResentFrom">ResentFrom</A>()<BR>
+DwMsgId&amp; <A NAME="ResentMessageId">ResentMessageId</A>()<BR>
+DwAddressList&amp; <A NAME="ResentReplyTo">ResentReplyTo</A>()<BR>
+DwMailbox&amp; <A NAME="ResentSender">ResentSender</A>()<BR>
+DwAddressList&amp; <A NAME="ResentTo">ResentTo</A>()<BR>
+DwAddress&amp; <A NAME="ReturnPath">ReturnPath</A>()<BR>
+DwMailbox&amp; <A NAME="Sender">Sender</A>()<BR>
+DwText&amp; <A NAME="Subject">Subject</A>()<BR>
+DwAddressList&amp; <A NAME="To">To</A>()<BR>
+DwText&amp; <A NAME="Approved">Approved</A>()<BR>
+DwText&amp; <A NAME="Control">Control</A>()<BR>
+DwText&amp; <A NAME="Distribution">Distribution</A>()<BR>
+DwText&amp; <A NAME="Expires">Expires</A>()<BR>
+DwText&amp; <A NAME="FollowupTo">FollowupTo</A>()<BR>
+DwText&amp; <A NAME="Lines">Lines</A>()<BR>
+DwText&amp; <A NAME="Newsgroups">Newsgroups</A>()<BR>
+DwText&amp; <A NAME="Organization">Organization</A>()<BR>
+DwText&amp; <A NAME="Path">Path</A>()<BR>
+DwText&amp; <A NAME="Summary">Summary</A>()<BR>
+DwText&amp; <A NAME="Xref">Xref</A>()<BR>
+DwText&amp; <A NAME="ContentDescription">ContentDescription</A>()<BR>
+DwMsgId&amp; <A NAME="ContentId">ContentId</A>()<BR>
+DwMechanism&amp;
+<A NAME="ContentTransferEncoding">ContentTransferEncoding</A>()<BR>
+DwMechanism&amp; <A NAME="Cte">Cte</A>()<BR>
+DwMediaType&amp; <A NAME="ContentType">ContentType</A>()<BR>
+DwText&amp; <A NAME="MimeVersion">MimeVersion</A>()<BR>
+DwDispositionType&amp; <A NAME="ContentDisposition">ContentDisposition</A>()
+</B></FONT>
+<P>
+Each member function in this group returns a reference to a
+<B><TT>DwFieldBody</TT></B> object for a particular header field. If the
+header field does not already exist, it is created. Use the corresponding
+<B><TT>Has&lt;Field&gt;<Field>()</TT></B> function to test if the header
+field already exists without creating it.
+<P>
+<FONT COLOR="teal"><B> Dw<A NAME="FieldBody">FieldBody</A>&amp; FieldBody(const
+DwString&amp; aFieldName) </B></FONT>
+<P>
+Returns a reference to the <B><TT>DwFieldBody</TT></B> object for a particular
+header field with field name <B><TT>aFieldName</TT></B>. If the header field
+does not already exist, it is created. Use <B><TT>HasField()</TT></B> to
+test if the header field already exists without creating it. This member
+function allows access to extension fields or user-defined fields.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="NumFields">NumFields</A>() const
+</B></FONT>
+<P>
+Returns the number of <B><TT>DwField</TT></B> objects contained by this
+<B><TT>DwHeaders</TT></B> object.
+<P>
+<FONT COLOR="teal"><B> DwField* <A NAME="FirstField">FirstField</A>() const
+</B></FONT>
+<P>
+Returns a pointer to the first <B><TT>DwField</TT></B> object contained by
+this <B><TT>DwHeaders</TT></B> object. Use this member function to begin
+an iteration over the entire list of <B><TT>DwField</TT></B> objects. Continue
+the iteration by calling <B><TT>DwField::Next()</TT></B> on each
+<B><TT>DwField</TT></B> object.
+<P>
+<FONT COLOR="teal"><B> DwField* <A NAME="FindField">FindField</A>(const char*
+aFieldName) const <BR>
+DwField* FindField(const DwString&amp; aFieldName) const </B></FONT>
+<P>
+Searches for a header field by its field name. Returns
+<B><TT>NULL</TT></B> if the field is not found. This is an <I>advanced</I>
+function: most applications should use the
+<B><TT><Field>&lt;Field&gt;()</TT></B> or
+<B><TT>Has&lt;Field&gt;()</TT></B> family of functions.
+<P>
+<FONT COLOR="teal"><B> void
+<A NAME="AddOrReplaceField">AddOrReplaceField</A>(DwField* aField)
+</B></FONT>
+<P>
+Adds a <B><TT>DwField</TT></B> object to the list. If a header field with
+the same field name already exists, it is replaced by the new header field.
+<P>
+<B><TT>DwHeaders</TT></B> takes responsibility for deleting the added
+<B><TT>DwField</TT></B> object.
+<P>
+This is an advanced function. Consider using the member functions
+<B><TT><Field>&lt;Field&gt;()</TT></B> (e.g. <B><TT>To()</TT></B>,
+<B><TT>ContentType()</TT></B>, and so on) and <B><TT>FieldBody()</TT></B>
+to add header fields.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="AddField">AddField</A>(DwField* aField)
+</B></FONT>
+<P>
+Adds a <B><TT>DwField</TT></B> object to the list. If a header field with
+the same field name already exists, it is <I>not</I> replaced; thus, duplicate
+header fields may occur when using this member function. (This is what you
+want for some header fields, such as the "Received" header field).
+<P>
+<B><TT>DwHeaders</TT></B> takes responsibility for deleting the added
+<B><TT>DwField</TT></B> object.
+<P>
+This is an advanced function. Consider using the member functions
+<B><TT><Field>&lt;Field&gt;()</TT></B> (e.g. <B><TT>To()</TT></B>,
+<B><TT>ContentType()</TT></B>, and so on) and <B><TT>FieldBody()</TT></B>
+for adding header fields.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="AddFieldAt">AddFieldAt</A>(int aPos,
+DwField* aField) </B></FONT>
+<P>
+This member functions follows the semantics of <B><TT>AddField()</TT></B>
+except that <B><TT>aPos</TT></B> specifies a position for adding the field.
+A position of 1 indicates the beginning of the list. A position of 0 indicates
+the end of the list.
+<P>
+This is an advanced function. Consider using the member functions
+<B><TT><Field>&lt;Field&gt;()</TT></B> (e.g. <B><TT>To()</TT></B>,
+<B><TT>ContentType()</TT></B>, and so on) and <B><TT>FieldBody()</TT></B>
+for adding header fields.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="RemoveField">RemoveField</A>(DwField*
+aField) </B></FONT>
+<P>
+Removes the <B><TT>DwField</TT></B> object from the list. The
+<B><TT>DwField</TT></B> object is not deleted.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="DeleteAllFields">DeleteAllFields</A>()
+</B></FONT>
+<P>
+Removes all <B><TT>DwField</TT></B> objects from the list and deletes them.
+<P>
+<FONT COLOR="teal"><B> static DwHeaders*
+<A NAME="NewHeaders">NewHeaders</A>(const DwString&amp; aStr, DwMessageComponent*
+aParent) </B></FONT>
+<P>
+Creates a new <B><TT>DwHeaders</TT></B> object on the free store. If the
+static data member <B><TT>sNewHeaders</TT></B> is <B><TT>NULL</TT></B>, this
+member function will create a new <B><TT>DwHeaders</TT></B> and return it.
+Otherwise, <B><TT>NewHeaders()</TT></B> will call the user-supplied function
+pointed to by <B><TT>sNewHeaders</TT></B>, which is assumed to return an
+object from a class derived from <B><TT>DwHeaders</TT></B>, and return that
+object.
+<P>
+<FONT COLOR="teal"><B> virtual void
+<A NAME="PrintDebugInfo">PrintDebugInfo</A>(ostream&amp; aStrm, int aDepth=0)
+const </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+prints debugging information about this object to <B><TT>aStrm</TT></B>.
+It will also call <B><TT>PrintDebugInfo()</TT></B> for any of its child
+components down to a level of <B><TT>aDepth</TT></B>.
+<P>
+This member function is available only in the debug version of the library.
+<P>
+<FONT COLOR="teal"><B> virtual void
+<A NAME="CheckInvariants">CheckInvariants</A>() const </B></FONT>
+<P>
+Aborts if one of the invariants of the object fails. Use this member function
+to track down bugs.
+<P>
+This member function is available only in the debug version of the library.
+<P>
+<H2>
+ <FONT COLOR="navy"> Public Data Members </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> static DwHeaders*
+(*<A NAME="sNewHeaders">sNewHeaders</A>)(const DwString&amp;,
+DwMessageComponent*) </B></FONT>
+<P>
+If <B><TT>sNewHeaders</TT></B> is not <B><TT>NULL</TT></B>, it is assumed
+to point to a user-supplied function that returns an object from a class
+derived from <B><TT>DwHeaders</TT></B>.
+<P>
+</BODY></HTML>
diff --git a/mimelib/doc/mailbox.html b/mimelib/doc/mailbox.html
new file mode 100644
index 000000000..492070ccb
--- /dev/null
+++ b/mimelib/doc/mailbox.html
@@ -0,0 +1,238 @@
+<HTML>
+<HEAD>
+ <TITLE> DwMailbox Man Page </TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<H2>
+ <FONT COLOR="navy"> NAME </FONT>
+</H2>
+<P>
+DwMailbox -- Class representing an RFC-822 mailbox
+<H2>
+ <FONT COLOR="navy"> SYNOPSIS </FONT>
+</H2>
+<PRE>class DW_EXPORT DwMailbox : public <A HREF="address.html">DwAddress</A> {
+
+ friend class DwMailboxList;
+
+public:
+
+ <A HREF="mailbox.html#DwMailbox">DwMailbox</A>();
+ <A HREF="mailbox.html#DwMailbox">DwMailbox</A>(const DwMailbox&amp; aMailbox);
+ <A HREF="mailbox.html#DwMailbox">DwMailbox</A>(const DwString&amp; aStr, DwMessageComponent* aParent=0);
+ virtual ~DwMailbox();
+ const DwMailbox&amp; <A HREF="mailbox.html#op_eq">operator =</A> (const DwMailbox&amp; aMailbox);
+ virtual void <A HREF="mailbox.html#Parse">Parse</A>();
+ virtual void <A HREF="mailbox.html#Assemble">Assemble</A>();
+ virtual DwMessageComponent* <A HREF="mailbox.html#Clone">Clone</A>() const;
+ const DwString&amp; <A HREF="mailbox.html#FullName">FullName</A>() const;
+ void <A HREF="mailbox.html#SetFullName">SetFullName</A>(const DwString&amp; aFullName);
+ const DwString&amp; <A HREF="mailbox.html#Route">Route</A>() const;
+ void <A HREF="mailbox.html#SetRoute">SetRoute</A>(const DwString&amp; aRoute);
+ const DwString&amp; <A HREF="mailbox.html#LocalPart">LocalPart</A>() const;
+ void <A HREF="mailbox.html#SetLocalPart">SetLocalPart</A>(const DwString&amp; aLocalPart);
+ const DwString&amp; <A HREF="mailbox.html#Domain">Domain</A>() const;
+ void <A HREF="mailbox.html#SetDomain">SetDomain</A>(const DwString&amp; aDomain);
+ static DwMailbox* <A HREF="mailbox.html#NewMailbox">NewMailbox</A>(const DwString&amp; aStr, DwMessageComponent*
+ aParent);
+ static DwMailbox* (*<A HREF="mailbox.html#sNewMailbox">sNewMailbox</A>)(const DwString&amp;, DwMessageComponent*);
+
+public:
+
+ virtual void <A HREF="mailbox.html#PrintDebugInfo">PrintDebugInfo</A>(ostream&amp; aStrm, int aDepth=0) const;
+ virtual void <A HREF="mailbox.html#CheckInvariants">CheckInvariants</A>() const;
+
+protected:
+
+ void _PrintDebugInfo(ostream&amp; aStrm) const;
+};
+</PRE>
+<H2>
+ <FONT COLOR="navy"> DESCRIPTION </FONT>
+</H2>
+<P>
+RFC-822 defines a <I>mailbox</I> as an entity that can be the recipient of
+a message. A mailbox is more specific than an <I>address</I>, which may be
+either a mailbox or a <I>group</I>. An RFC-822 mailbox contains a full name,
+a <I>local-part</I>, an optional <I>route</I>, and a <I>domain</I>. For example,
+in the mailbox
+<P>
+Joe Schmoe &lt;jschmoe@aol.co&gt;
+<P>
+"Joe Schmoe" is the full name, "jschmoe" is the local-part, and "aol.com"
+is the domain. The optional route is rarely seen in current usage, and is
+deprecated according to RFC-1123.
+<P>
+In MIME++, an RFC-822 mailbox is represented by a
+<B><TT>DwMailbox</TT></B> object. <B><TT>DwMailbox</TT></B> is a subclass
+of <B><TT><A HREF="address.html">DwAddress</A></TT></B>, which reflects the
+fact that a mailbox is also an address. A <B><TT>DwMailbox</TT></B> contains
+strings representing the full name, local-part, route, and domain of a mailbox.
+<P>
+In the tree (broken-down) representation of message, a
+<B><TT>DwMailbox</TT></B> object may be only a leaf node, having a parent
+but no child nodes. Its parent node must be a
+<B><TT><A HREF="field.html">DwField</A></TT></B>, a
+<B><TT><A HREF="addrlist.html">DwAddressList</A></TT></B>, or a
+<B><TT><A HREF="mboxlist.html">DwMailboxList</A></TT></B> object.
+<P>
+<B><TT>DwMailbox</TT></B> has member functions for getting or setting the
+strings it contains.
+<P>
+<B><TT>DwMailbox</TT></B> object can be included in a list of
+<B><TT>DwMailbox</TT></B> objects. To get the next
+<B><TT>DwMailbox</TT></B> object in a list, use the inherited member function
+<B><TT>DwAddress::Next()</TT></B>.
+<H2>
+ <FONT COLOR="navy"> Public Member Functions </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> <A NAME="DwMailbox">DwMailbox</A>() <BR>
+DwMailbox(const DwMailbox&amp; aMailbox) <BR>
+DwMailbox(const DwString&amp; aStr, DwMessageComponent* aParent=0)
+</B></FONT>
+<P>
+The first constructor is the default constructor, which sets the
+<B><TT>DwMailbox</TT></B> object's string representation to the empty string
+and sets its parent to <B><TT>NULL</TT></B>.
+<P>
+The second constructor is the copy constructor, which performs a deep copy
+of <B><TT>aMailbox</TT></B>. The parent of the new
+<B><TT>DwMailbox</TT></B> is set to <B><TT>NULL</TT></B>.
+<P>
+The third constructor copies <B><TT>aStr</TT></B> to the
+<B><TT>DwMailbox</TT></B> object's string representation and sets
+<B><TT>aParent</TT></B> as its parent. The virtual member function
+<B><TT>Parse()</TT></B> should be called immediately after this constructor
+in order to parse the string representation. Unless it is
+<B><TT>NULL</TT></B>, <B><TT>aParent</TT></B> should point to an object of
+a class derived from <B><TT>DwField</TT></B>.
+<P>
+<FONT COLOR="teal"><B> const DwMailbox&amp; <A NAME="op_eq">operator =</A>
+(const DwMailbox&amp; aMailbox) </B></FONT>
+<P>
+This is the assignment operator, which performs a deep copy of
+<B><TT>aMailbox</TT></B>. The parent node of the
+<B><TT>DwMailbox</TT></B> object is not changed.
+<P>
+<FONT COLOR="teal"><B> virtual void <A NAME="Parse">Parse</A>() </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+executes the parse method for <B><TT>DwMailbox</TT></B> objects. The parse
+method creates or updates the broken-down representation from the string
+representation. For <B><TT>DwMailbox</TT></B> objects, the parse method parses
+the string representation into the substrings for the full name, local-part,
+route, and domain.
+<P>
+You should call this member function after you set or modify the string
+representation, and before you retrieve the full name, local-part, route,
+or domain.
+<P>
+This function clears the is-modified flag.
+<P>
+<FONT COLOR="teal"><B> virtual void <A NAME="Assemble">Assemble</A>()
+</B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+executes the assemble method for <B><TT>DwMailbox</TT></B> objects. The assemble
+method creates or updates the string representation from the broken-down
+representation. For <B><TT>DwMailbox</TT></B> objects, the assemble method
+builds the string representation from the full name, local-part, route, and
+domain strings.
+<P>
+You should call this member function after you modify the full name, local-part,
+route, or domain, and before you retrieve the string representation.
+<P>
+This function clears the is-modified flag.
+<P>
+<FONT COLOR="teal"><B> virtual DwMessageComponent*
+<A NAME="Clone">Clone</A>() const </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+creates a new <B><TT>DwMailbox</TT></B> on the free store that has the same
+value as this <B><TT>DwMailbox</TT></B> object. The basic idea is that of
+a virtual copy constructor.
+<P>
+<FONT COLOR="teal"><B> const DwString&amp; <A NAME="FullName">FullName</A>()
+const </B></FONT>
+<P>
+Returns the full name for this <B><TT>DwMailbox</TT></B> object.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="SetFullName">SetFullName</A>(const
+DwString&amp; aFullName) </B></FONT>
+<P>
+Sets the full name for this <B><TT>DwMailbox</TT></B> object.
+<P>
+<FONT COLOR="teal"><B> const DwString&amp; <A NAME="Route">Route</A>() const
+</B></FONT>
+<P>
+Returns the route for this <B><TT>DwMailbox</TT></B> object.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="SetRoute">SetRoute</A>(const DwString&amp;
+aRoute) </B></FONT>
+<P>
+Sets the route for this <B><TT>DwMailbox</TT></B> object.
+<P>
+<FONT COLOR="teal"><B> const DwString&amp;
+<A NAME="LocalPart">LocalPart</A>() const </B></FONT>
+<P>
+Returns the local-part for this <B><TT>DwMailbox</TT></B> object.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="SetLocalPart">SetLocalPart</A>(const
+DwString&amp; aLocalPart) </B></FONT>
+<P>
+Sets the local-part for this <B><TT>DwMailbox</TT></B> object.
+<P>
+<FONT COLOR="teal"><B> const DwString&amp; <A NAME="Domain">Domain</A>()
+const </B></FONT>
+<P>
+Returns the domain for this <B><TT>DwMailbox</TT></B> object.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="SetDomain">SetDomain</A>(const
+DwString&amp; aDomain) </B></FONT>
+<P>
+Sets the domain for this <B><TT>DwMailbox</TT></B> object.
+<P>
+<FONT COLOR="teal"><B> static DwMailbox*
+<A NAME="NewMailbox">NewMailbox</A>(const DwString&amp; aStr, DwMessageComponent*
+aParent) </B></FONT>
+<P>
+Creates a new <B><TT>DwMailbox</TT></B> object on the free store. If the
+static data member <B><TT>sNewMailbox</TT></B> is <B><TT>NULL</TT></B>, this
+member function will create a new <B><TT>DwMailbox</TT></B> and return it.
+Otherwise, <B><TT>NewMailbox()</TT></B> will call the user-supplied function
+pointed to by <B><TT>sNewMailbox</TT></B>, which is assumed to return an
+object from a class derived from <B><TT>DwMailbox</TT></B>, and return that
+object.
+<P>
+<FONT COLOR="teal"><B> virtual void
+<A NAME="PrintDebugInfo">PrintDebugInfo</A>(ostream&amp; aStrm, int aDepth=0)
+const </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+prints debugging information about this object to <B><TT>aStrm</TT></B>.
+It will also call <B><TT>PrintDebugInfo()</TT></B> for any of its child
+components down to a level of <B><TT>aDepth</TT></B>.
+<P>
+This member function is available only in the debug version of the library.
+<P>
+<FONT COLOR="teal"><B> virtual void
+<A NAME="CheckInvariants">CheckInvariants</A>() const </B></FONT>
+<P>
+Aborts if one of the invariants of the object fails. Use this member function
+to track down bugs.
+<P>
+This member function is available only in the debug version of the library.
+<H2>
+ <FONT COLOR="navy"> Public Data Members </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> static DwMailbox*
+(*<A NAME="sNewMailbox">sNewMailbox</A>)(const DwString&amp;,
+DwMessageComponent*) </B></FONT>
+<P>
+If <B><TT>sNewMailbox</TT></B> is not <B><TT>NULL</TT></B>, it is assumed
+to point to a user-supplied function that returns an object from a class
+derived from <B><TT>DwMailbox</TT></B>.
+<P>
+</BODY></HTML>
diff --git a/mimelib/doc/mboxlist.html b/mimelib/doc/mboxlist.html
new file mode 100644
index 000000000..2bae2b4e3
--- /dev/null
+++ b/mimelib/doc/mboxlist.html
@@ -0,0 +1,232 @@
+<HTML>
+<HEAD>
+ <TITLE> DwMailboxList Man Page </TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<H2>
+ <FONT COLOR="navy"> NAME </FONT>
+</H2>
+<P>
+DwMailboxList -- Class representing a list of RFC-822 mailboxes
+<H2>
+ <FONT COLOR="navy"> SYNOPSIS </FONT>
+</H2>
+<PRE>class DW_EXPORT DwMailboxList : public <A HREF="fieldbdy.html">DwFieldBody</A> {
+
+public:
+
+ <A HREF="mboxlist.html#DwMailboxList">DwMailboxList</A>();
+ <A HREF="mboxlist.html#DwMailboxList">DwMailboxList</A>(const DwMailboxList&amp; aList);
+ <A HREF="mboxlist.html#DwMailboxList">DwMailboxList</A>(const DwString&amp; aStr, DwMessageComponent* aParent=0);
+ virtual ~DwMailboxList();
+ const DwMailboxList&amp; <A HREF="mboxlist.html#op_eq">operator =</A> (const DwMailboxList&amp; aList);
+ virtual void <A HREF="mboxlist.html#Parse">Parse</A>();
+ virtual void <A HREF="mboxlist.html#Assemble">Assemble</A>();
+ virtual DwMessageComponent* <A HREF="mboxlist.html#Clone">Clone</A>() const;
+ DwMailbox* <A HREF="mboxlist.html#FirstMailbox">FirstMailbox</A>() const;
+ void <A HREF="mboxlist.html#Add">Add</A>(DwMailbox* aMailbox);
+ void <A HREF="mboxlist.html#Remove">Remove</A>(DwMailbox* aMailbox);
+ void <A HREF="mboxlist.html#DeleteAll">DeleteAll</A>();
+ static DwMailboxList* <A HREF="mboxlist.html#NewMailboxList">NewMailboxList</A>(const DwString&amp; aStr,
+ DwMessageComponent* aParent);
+ static DwMailboxList* (*<A HREF="mboxlist.html#sNewMailboxList">sNewMailboxList</A>)(const DwString&amp;,
+ DwMessageComponent*);
+
+protected:
+
+ DwMailbox* <A HREF="mboxlist.html#mFirstMailbox">mFirstMailbox</A>;
+ void <A HREF="mboxlist.html#_AddMailbox">_AddMailbox</A>(DwMailbox* aMailbox);
+ void <A HREF="mboxlist.html#_DeleteAll">_DeleteAll</A>();
+
+public:
+
+ virtual void <A HREF="mboxlist.html#PrintDebugInfo">PrintDebugInfo</A>(ostream&amp; aStrm, int aDepth=0) const;
+ virtual void <A HREF="mboxlist.html#CheckInvariants">CheckInvariants</A>() const;
+
+protected:
+
+ void _PrintDebugInfo(ostream&amp; aStrm) const;
+};
+</PRE>
+<H2>
+ <FONT COLOR="navy"> DESCRIPTION </FONT>
+</H2>
+<P>
+<B><TT>DwMailboxList</TT></B> represents a list of <I>mailboxes</I> as described
+in RFC-822. In MIME++, <B><TT>DwMailboxList</TT></B> is a container for objects
+of type <B><TT><A HREF="mailbox.html">DwMailbox</A></TT></B>, and it contains
+various member functions to manage its contained objects.
+<B><TT><A HREF="addrlist.html">DwAddressList</A></TT></B> is also a
+<B><TT><A HREF="fieldbdy.html">DwFieldBody</A></TT></B>. This reflects the
+fact that certain RFC-822 header fields, such as the "From" header field,
+have a list of mailboxes as their field bodies.
+<H2>
+ <FONT COLOR="navy"> Public Member Functions </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> <A NAME="DwMailboxList">DwMailboxList</A>() <BR>
+DwMailboxList(const DwMailboxList&amp; aList) <BR>
+DwMailboxList(const DwString&amp; aStr, DwMessageComponent* aParent=0)
+</B></FONT>
+<P>
+The first constructor is the default constructor, which sets the
+<B><TT>DwMailboxList</TT></B> object's string representation to the empty
+string and sets its parent to <B><TT>NULL</TT></B>.
+<P>
+The second constructor is the copy constructor, which copies the string
+representation and all <B><TT>DwMailbox</TT></B> objects from
+<B><TT>aList</TT></B>. The parent of the new
+<B><TT>DwMailboxList</TT></B> object is set to <B><TT>NULL</TT></B>.
+<P>
+The third constructor copies <B><TT>aStr</TT></B> to the
+<B><TT>DwMailboxList</TT></B> object's string representation and sets
+<B><TT>aParent</TT></B> as its parent. The virtual member function
+<B><TT>Parse()</TT></B> should be called immediately after this constructor
+in order to parse the string representation. Unless it is
+<B><TT>NULL</TT></B>, <B><TT>aParent</TT></B> should point to an object of
+a class derived from <B><TT>DwField</TT></B>.
+<P>
+<FONT COLOR="teal"><B> const DwMailboxList&amp; <A NAME="op_eq">operator
+=</A> (const DwMailboxList&amp; aList) </B></FONT>
+<P>
+This is the assignment operator, which performs a deep copy of
+<B><TT>aList</TT></B>. The parent node of the
+<B><TT>DwMailboxList</TT></B> object is not changed.
+<P>
+<FONT COLOR="teal"><B> virtual void <A NAME="Parse">Parse</A>() </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+executes the parse method for <B><TT>DwMailboxList</TT></B> objects. The
+parse method creates or updates the broken-down representation from the string
+representation. For <B><TT>DwMailboxList</TT></B> objects, the parse method
+parses the string representation to create a list of
+<B><TT>DwMailbox</TT></B> objects. This member function also calls the
+<B><TT>Parse()</TT></B> member function of each <B><TT>DwMailbox</TT></B>
+object in its list.
+<P>
+You should call this member function after you set or modify the string
+representation, and before you access any of the contained
+<B><TT>DwMailbox</TT></B> objects.
+<P>
+This function clears the is-modified flag.
+<P>
+<FONT COLOR="teal"><B> virtual void <A NAME="Assemble">Assemble</A>()
+</B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+executes the assemble method for <B><TT>DwMailboxList</TT></B> objects. The
+assemble method creates or updates the string representation from the broken-down
+representation. For <B><TT>DwMailboxList</TT></B> objects, the assemble method
+builds the string representation from its list of
+<B><TT>DwMailbox</TT></B> objects. Before it builds the string representation
+for the <B><TT>DwMailboxList</TT></B> object, this function first calls the
+<B><TT>Assemble()</TT></B> member function of each
+<B><TT>DwMailbox</TT></B> object in its list.
+<P>
+You should call this member function after you set or modify any of the contained
+<B><TT>DwMailbox</TT></B> objects, and before you retrieve the string
+representation.
+<P>
+This function clears the is-modified flag.
+<P>
+<FONT COLOR="teal"><B> virtual DwMessageComponent*
+<A NAME="Clone">Clone</A>() const </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+creates a new <B><TT>DwMailboxList</TT></B> on the free store that has the
+same value as this <B><TT>DwMailboxList</TT></B> object. The basic idea is
+that of a virtual copy constructor.
+<P>
+<FONT COLOR="teal"><B> DwMailbox* <A NAME="FirstMailbox">FirstMailbox</A>()
+const </B></FONT>
+<P>
+Gets the first <B><TT>DwMailbox</TT></B> object in the list. Use the member
+function <B><TT>DwMailbox::Next()</TT></B> to iterate. Returns
+<B><TT>NULL</TT></B> if the list is empty.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="Add">Add</A>(DwMailbox* aMailbox)
+</B></FONT>
+<P>
+Adds <B><TT>aMailbox</TT></B> to the end of the list of
+<B><TT>DwMailbox</TT></B> objects maintained by this
+<B><TT>DwMailboxList</TT></B> object.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="Remove">Remove</A>(DwMailbox* aMailbox)
+</B></FONT>
+<P>
+Removes <B><TT>aMailbox</TT></B> from the list of
+<B><TT>DwMailbox</TT></B> objects maintained by this
+<B><TT>DwMailboxList</TT></B> object. The <B><TT>DwMailbox</TT></B> object
+is not deleted by this member function.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="DeleteAll">DeleteAll</A>() </B></FONT>
+<P>
+Removes and deletes all <B><TT>DwMailbox</TT></B> objects from the list
+maintained by this <B><TT>DwMailboxList</TT></B> object.
+<P>
+<FONT COLOR="teal"><B> static DwMailboxList*
+<A NAME="NewMailboxList">NewMailboxList</A>(const DwString&amp; aStr,
+DwMessageComponent* aParent) </B></FONT>
+<P>
+Creates a new <B><TT>DwMailboxList</TT></B> object on the free store. If
+the static data member <B><TT>sNewMailboxList</TT></B> is
+<B><TT>NULL</TT></B>, this member function will create a new
+<B><TT>DwMailboxList</TT></B> and return it. Otherwise,
+<B><TT>NewMailboxList()</TT></B> will call the user-supplied function pointed
+to by <B><TT>sNewMailboxList</TT></B>, which is assumed to return an object
+from a class derived from <B><TT>DwMailboxList</TT></B>, and return that
+object.
+<P>
+<FONT COLOR="teal"><B> virtual void
+<A NAME="PrintDebugInfo">PrintDebugInfo</A>(ostream&amp; aStrm, int aDepth=0)
+const </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+prints debugging information about this object to <B><TT>aStrm</TT></B>.
+It will also call <B><TT>PrintDebugInfo()</TT></B> for any of its child
+components down to a level of <B><TT>aDepth</TT></B>.
+<P>
+This member function is available only in the debug version of the library.
+<P>
+<FONT COLOR="teal"><B> virtual void
+<A NAME="CheckInvariants">CheckInvariants</A>() const </B></FONT>
+<P>
+Aborts if one of the invariants of the object fails. Use this member function
+to track down bugs.
+<P>
+This member function is available only in the debug version of the library.
+<H2>
+ <FONT COLOR="navy"> Public Data Members </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> static DwMailboxList*
+(*<A NAME="sNewMailboxList">sNewMailboxList</A>)(const DwString&amp;,
+DwMessageComponent*) </B></FONT>
+<P>
+If <B><TT>sNewMailboxList</TT></B> is not <B><TT>NULL</TT></B>, it is assumed
+to point to a user-supplied function that returns an object from a class
+derived from <B><TT>DwMailboxList</TT></B>.
+<H2>
+ <FONT COLOR="navy"> Protected Member Functions </FONT>
+</H2>
+<P>
+<B><FONT COLOR="teal"> void <A NAME="_AddMailbox">_AddMailbox</A>(DwMailbox*
+aMailbox) </FONT></B>
+<P>
+Adds a mailbox, but does not set the is-modified flag.
+<P>
+<B><FONT COLOR="teal"> void <A NAME="_DeleteAll">_DeleteAll</A>() </FONT></B>
+<P>
+Removes and deletes all <B><TT>DwMailbox</TT></B> objects from the list
+maintained by this <B><TT>DwMailboxList</TT></B> object. Doesn't set the
+is-modified flag.
+<H2>
+ <FONT COLOR="navy"> Protected Data Members </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> DwMailbox* <A NAME="mFirstMailbox">mFirstMailbox</A>
+</B></FONT>
+<P>
+Points to first <B><TT>DwMailbox</TT></B> object in list.
+<P>
+</BODY></HTML>
diff --git a/mimelib/doc/mechansm.html b/mimelib/doc/mechansm.html
new file mode 100644
index 000000000..9880b5fa2
--- /dev/null
+++ b/mimelib/doc/mechansm.html
@@ -0,0 +1,172 @@
+<HTML>
+<HEAD>
+ <TITLE> DwMechanism Man Page </TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<H2>
+ <FONT COLOR="navy"> NAME </FONT>
+</H2>
+<P>
+DwMechanism -- Class representing a MIME content-transfer-encoding field-body
+<H2>
+ <FONT COLOR="navy"> SYNOPSIS </FONT>
+</H2>
+<PRE>class DW_EXPORT DwMechanism : public <A HREF="fieldbdy.html">DwFieldBody</A> {
+
+public:
+
+ <A HREF="mechansm.html#DwMechanism">DwMechanism</A>();
+ <A HREF="mechansm.html#DwMechanism">DwMechanism</A>(const DwMechanism&amp; aCte);
+ <A HREF="mechansm.html#DwMechanism">DwMechanism</A>(const DwString&amp; aStr, DwMessageComponent* aParent=0);
+ virtual ~DwMechanism();
+ const DwMechanism&amp; <A HREF="mechansm.html#op_eq">operator =</A> (const DwMechanism&amp; aCte);
+ virtual void <A HREF="mechansm.html#Parse">Parse</A>();
+ virtual void <A HREF="mechansm.html#Assemble">Assemble</A>();
+ virtual DwMessageComponent* <A HREF="mechansm.html#Clone">Clone</A>() const;
+ int <A HREF="mechansm.html#AsEnum">AsEnum</A>() const;
+ void <A HREF="mechansm.html#FromEnum">FromEnum</A>(int aCte);
+ static DwMechanism*
+ <A HREF="mechansm.html#NewMechanism">NewMechanism</A>(const DwString&amp; aStr, DwMessageComponent* aParent);
+ static DwMechanism*
+ (*<A HREF="mechansm.html#sNewMechanism">sNewMechanism</A>)(const DwString&amp;, DwMessageComponent*);
+
+public:
+
+ virtual void <A HREF="mechansm.html#PrintDebugInfo">PrintDebugInfo</A>(ostream&amp; aStrm, int aDepth=0) const;
+ virtual void <A HREF="mechansm.html#CheckInvariants">CheckInvariants</A>() const;
+
+protected:
+
+ void _PrintDebugInfo(ostream&amp; aStrm) const;
+};
+</PRE>
+<H2>
+ <FONT COLOR="navy"> DESCRIPTION </FONT>
+</H2>
+<P>
+<B><TT>DwMechanism</TT></B> represents a field body for the
+Content-Transfer-Encoding header field as described in RFC-2045.
+<B><TT>DwMechanism</TT></B> provides convenience functions that allow you
+to set or get the content-transfer-encoding attribute as an enumerated value.
+<H2>
+ <FONT COLOR="navy"> Public Member Functions </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> <A NAME="DwMechanism">DwMechanism</A>() <BR>
+DwMechanism(const DwMechanism&amp; aCte) <BR>
+DwMechanism(const DwString&amp; aStr, DwMessageComponent* aParent=0)
+</B></FONT>
+<P>
+The first constructor is the default constructor, which sets the
+<B><TT>DwMechanism</TT></B> object's string representation to the empty string
+and sets its parent to <B><TT>NULL</TT></B>.
+<P>
+The second constructor is the copy constructor, which copies the string
+representation from <B><TT>aCte</TT></B>. The parent of the new
+<B><TT>DwMechanism</TT></B> object is set to <B><TT>NULL</TT></B>.
+<P>
+The third constructor copies <B><TT>aStr</TT></B> to the
+<B><TT>DwMechanism</TT></B> object's string representation and sets
+<B><TT>aParent</TT></B> as its parent. The virtual member function
+<B><TT>Parse()</TT></B> should be called immediately after this constructor
+in order to parse the string representation. Unless it is
+<B><TT>NULL</TT></B>, <B><TT>aParent</TT></B> should point to an object of
+a class derived from <B><TT>DwField</TT></B>.
+<P>
+<FONT COLOR="teal"><B> const DwMechanism&amp; <A NAME="op_eq">operator =</A>
+(const DwMechanism&amp; aCte) </B></FONT>
+<P>
+This is the assignment operator, which performs a deep copy of
+<B><TT>aCte</TT></B>. The parent node of the <B><TT>DwMechanism</TT></B>
+object is not changed.
+<P>
+<FONT COLOR="teal"><B> virtual void <A NAME="Parse">Parse</A>() </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+executes the parse method for <B><TT>DwMechanism</TT></B> objects. It should
+be called immediately after the string representation is modified and before
+any of the object's attributes are retrieved.
+<P>
+This function clears the is-modified flag.
+<P>
+<FONT COLOR="teal"><B> virtual void <A NAME="Assemble">Assemble</A>()
+</B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+executes the assemble method for <B><TT>DwMechanism</TT></B> objects. It
+should be called whenever one of the object's attributes is changed in order
+to assemble the string representation. It will be called automatically for
+this object by the parent object's <B><TT>Assemble()</TT></B> member function
+if the is-modified flag is set.
+<P>
+This function clears the is-modified flag.
+<P>
+<FONT COLOR="teal"><B> virtual DwMessageComponent*
+<A NAME="Clone">Clone</A>() const </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+creates a new <B><TT>DwMechanism</TT></B> object on the free store that has
+the same value as this <B><TT>DwMechanism</TT></B> object. The basic idea
+is that of a virtual copy constructor.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="AsEnum">AsEnum</A>() const </B></FONT>
+<P>
+Returns the content transfer encoding as an enumerated value. Enumerated
+values are defined for all standard content transfer encodings in the file
+enum.h. If the content transfer encoding is non-standard
+<B><TT>DwMime::kCteUnknown</TT></B> is returned. The inherited member function
+<B><TT>DwMessageComponent::AsString()</TT></B> may be used to get the content
+transfer encoding, standard or non-standard, as a string.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="FromEnum">FromEnum</A>(int aCte)
+</B></FONT>
+<P>
+Sets the content transfer encoding from an enumerated value. Enumerated values
+are defined for all standard content transfer encodings in the file enum.h.
+You may set the content transfer encoding to any string value, standard or
+non-standard, by using the inherited member function
+<B><TT>DwMessageComponent::FromString()</TT></B>.
+<P>
+<FONT COLOR="teal"><B> static DwMechanism*
+<A NAME="NewMechanism">NewMechanism</A>(const DwString&amp; aStr,
+DwMessageComponent* aParent) </B></FONT>
+<P>
+Creates a new <B><TT>DwMechanism</TT></B> object on the free store. If the
+static data member <B><TT>sNewMechanism</TT></B> is <B><TT>NULL</TT></B>,
+this member function will create a new <B><TT>DwMechanism</TT></B> and return
+it. Otherwise, <B><TT>NewMechanism()</TT></B> will call the user-supplied
+function pointed to by <B><TT>sNewMechanism</TT></B>, which is assumed to
+return an object from a class derived from <B><TT>DwMechanism</TT></B>, and
+return that object.
+<P>
+<FONT COLOR="teal"><B> virtual void
+<A NAME="PrintDebugInfo">PrintDebugInfo</A>(ostream&amp; aStrm, int aDepth=0)
+const </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+prints debugging information about this object to <B><TT>aStrm</TT></B>.
+It will also call <B><TT>PrintDebugInfo()</TT></B> for any of its child
+components down to a level of <B><TT>aDepth</TT></B>.
+<P>
+This member function is available only in the debug version of the library.
+<P>
+<FONT COLOR="teal"><B> virtual void
+<A NAME="CheckInvariants">CheckInvariants</A>() const </B></FONT>
+<P>
+Aborts if one of the invariants of the object fails. Use this member function
+to track down bugs.
+<P>
+This member function is available only in the debug version of the library.
+<H2>
+ <FONT COLOR="navy"> Public Data Members </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> static DwMechanism*
+(*<A NAME="sNewMechanism">sNewMechanism</A>)(const DwString&amp;,
+DwMessageComponent*) </B></FONT>
+<P>
+If <B><TT>sNewMechanism</TT></B> is not <B><TT>NULL</TT></B>, it is assumed
+to point to a user-supplied function that returns an object from a class
+derived from <B><TT>DwMechanism</TT></B>.
+<P>
+</BODY></HTML>
diff --git a/mimelib/doc/mediatyp.html b/mimelib/doc/mediatyp.html
new file mode 100644
index 000000000..01696084b
--- /dev/null
+++ b/mimelib/doc/mediatyp.html
@@ -0,0 +1,311 @@
+<HTML>
+<HEAD>
+ <TITLE> DwMediaType Man Page </TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<H2>
+ <FONT COLOR="navy"> NAME </FONT>
+</H2>
+<P>
+DwMediaType -- Class representing a MIME media-type
+<H2>
+ <FONT COLOR="navy"> SYNOPSIS </FONT>
+</H2>
+<PRE>class DW_EXPORT DwMediaType : public <A HREF="fieldbdy.html">DwFieldBody</A> {
+
+public:
+
+ <A HREF="mediatyp.html#DwMediaType">DwMediaType</A>();
+ <A HREF="mediatyp.html#DwMediaType">DwMediaType</A>(const DwMediaType&amp; aMediaType);
+ <A HREF="mediatyp.html#DwMediaType">DwMediaType</A>(const DwString&amp; aStr, DwMessageComponent* aParent=0);
+ virtual ~DwMediaType();
+ const DwMediaType&amp; <A HREF="mediatyp.html#op_eq">operator =</A> (const DwMediaType&amp; aMediaType);
+ virtual void <A HREF="mediatyp.html#Parse">Parse</A>();
+ virtual void <A HREF="mediatyp.html#Assemble">Assemble</A>();
+ virtual DwMessageComponent* <A HREF="mediatyp.html#Clone">Clone</A>() const;
+ int <A HREF="mediatyp.html#Type">Type</A>() const;
+ void <A HREF="mediatyp.html#SetType">SetType</A>(int aType);
+ const DwString&amp; <A HREF="mediatyp.html#TypeStr">TypeStr</A>() const;
+ void <A HREF="mediatyp.html#SetTypeStr">SetTypeStr</A>(const DwString&amp; aStr);
+ int <A HREF="mediatyp.html#Subtype">Subtype</A>() const;
+ void <A HREF="mediatyp.html#SetSubtype">SetSubtype</A>(int aSubtype);
+ const DwString&amp; <A HREF="mediatyp.html#SubtypeStr">SubtypeStr</A>() const;
+ void <A HREF="mediatyp.html#SetSubtypeStr">SetSubtypeStr</A>(const DwString&amp; aStr);
+ const DwString&amp; <A HREF="mediatyp.html#Boundary">Boundary</A>() const;
+ void <A HREF="mediatyp.html#SetBoundary">SetBoundary</A>(const DwString&amp; aStr);
+ virtual void <A HREF="mediatyp.html#CreateBoundary">CreateBoundary</A>(unsigned aLevel=0);
+ const DwString&amp; <A HREF="mediatyp.html#Name">Name</A>() const;
+ void <A HREF="mediatyp.html#SetName">SetName</A>(const DwString&amp; aStr);
+ DwParameter* <A HREF="mediatyp.html#FirstParameter">FirstParameter</A>() const;
+ void <A HREF="mediatyp.html#AddParameter">AddParameter</A>(DwParameter* aParam);
+ static DwMediaType* <A HREF="mediatyp.html#NewMediaType">NewMediaType</A>(const DwString&amp; aStr,
+ DwMessageComponent* aParent);
+ static DwMediaType* (*<A HREF="mediatyp.html#sNewMediaType">sNewMediaType</A>)(const DwString&amp;,
+ DwMessageComponent*);
+
+protected:
+
+ void _AddParameter(DwParameter* aParam);
+ virtual void TypeEnumToStr();
+ virtual void TypeStrToEnum();
+ virtual void SubtypeEnumToStr();
+ virtual void SubtypeStrToEnum();
+ void DeleteParameterList();
+ void CopyParameterList(DwParameter* aFirst);
+ int mType;
+ int mSubtype;
+ DwString mTypeStr;
+ DwString mSubtypeStr;
+ DwString mBoundaryStr;
+ DwString <A HREF="mediatyp.html#mNameStr">mNameStr</A>;
+ DwParameter* mFirstParameter;
+
+public:
+
+ virtual void <A HREF="mediatyp.html#PrintDebugInfo">PrintDebugInfo</A>(ostream&amp; aStrm, int aDepth=0) const;
+ virtual void <A HREF="mediatyp.html#CheckInvariants">CheckInvariants</A>() const;
+
+protected:
+
+ void _PrintDebugInfo(ostream&amp; aStrm) const;
+};
+</PRE>
+<H2>
+ <FONT COLOR="navy"> DESCRIPTION </FONT>
+</H2>
+<P>
+<B><TT>DwMediaType</TT></B> represents a field body for the Content-Type
+header field as described in RFC-2045. This field body specifies the kind
+of data contained in the body of a message or a body part. A media type is
+described by two keywords: a primary type (or just <I>type</I>) and a
+<I>subtype</I>. RFC-2046 specifies the seven primary types text, multipart,
+message, image, audio, video, and application. RFC-2077 adds the new primary
+type model.
+<P>
+<B><TT>DwMediaType</TT></B> has member functions that allow you to set or
+get the type and subtype as either enumerated values or as strings. It also
+contains a list of
+<B><TT><A HREF="param.html">DwParameter</A></TT></B> objects that represent
+the parameters of the field body. You can use convenience functions to directly
+access the boundary parameter of a multipart media type, or to access the
+name parameter that is often used with several media types, such as
+application/octet-stream.
+<P>
+Some MIME parsers have problems with folded header fields, and this especially
+seems to be a problem with the Content-Type field. To disable folding when
+the <B><TT>DwMediaType</TT></B> object is assembled, call the inherited member
+function <B><TT>DwFieldBody::SetFolding()</TT></B> with an argument of
+<B><TT>DwFalse</TT></B>.
+<H2>
+ <FONT COLOR="navy"> Public Member Functions </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> <A NAME="DwMediaType">DwMediaType</A>() <BR>
+DwMediaType(const DwMediaType&amp; aMediaType) <BR>
+DwMediaType(const DwString&amp; aStr, DwMessageComponent* aParent=0)
+</B></FONT>
+<P>
+The first constructor is the default constructor, which sets the
+<B><TT>DwMediaType</TT></B> object's string representation to the empty string
+and sets its parent to <B><TT>NULL</TT></B>.
+<P>
+The second constructor is the copy constructor, which performs deep copy
+of <B><TT>aMediaType</TT></B>. The parent of the new
+<B><TT>DwMediaType</TT></B> object is set to <B><TT>NULL</TT></B>.
+<P>
+The third constructor copies <B><TT>aStr</TT></B> to the
+<B><TT>DwMediaType</TT></B> object's string representation and sets
+<B><TT>aParent</TT></B> as its parent. The virtual member function
+<B><TT>Parse()</TT></B> should be called immediately after this constructor
+in order to parse the string representation. Unless it is
+<B><TT>NULL</TT></B>, <B><TT>aParent</TT></B> should point to an object of
+a class derived from <B><TT>DwField</TT></B>.
+<P>
+<FONT COLOR="teal"><B> const DwMediaType&amp; <A NAME="op_eq">operator =</A>
+(const DwMediaType&amp; aMediaType) </B></FONT>
+<P>
+This is the assignment operator, which performs a deep copy of
+<B><TT>aMediaType</TT></B>. The parent node of the
+<B><TT>DwMediaType</TT></B> object is not changed.
+<P>
+<FONT COLOR="teal"><B> virtual void <A NAME="Parse">Parse</A>() </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+executes the parse method for <B><TT>DwMediaType</TT></B> objects. It should
+be called immediately after the string representation is modified and before
+the parts of the broken-down representation are accessed.
+<P>
+This function clears the is-modified flag.
+<P>
+<FONT COLOR="teal"><B> virtual void <A NAME="Assemble">Assemble</A>()
+</B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+executes the assemble method for <B><TT>DwMediaType</TT></B> objects. It
+should be called whenever one of the object's attributes is changed in order
+to assemble the string representation from its broken-down representation.
+It will be called automatically for this object by the parent object's
+<B><TT>Assemble()</TT></B> member function if the is-modified flag is set.
+<P>
+This function clears the is-modified flag.
+<P>
+<FONT COLOR="teal"><B> virtual DwMessageComponent*
+<A NAME="Clone">Clone</A>() const </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+creates a new <B><TT>DwMediaType</TT></B> object on the free store that has
+the same value as this <B><TT>DwMediaType</TT></B> object. The basic idea
+is that of a virtual copy constructor.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="Type">Type</A>() const </B></FONT>
+<P>
+Returns the primary type as an enumerated value. Enumerated values are defined
+for all standard types in the file enum.h. If the type is non-standard,
+<B><TT>DwMime::kTypeUnknown</TT></B> is returned. The member function
+<B><TT>TypeStr()</TT></B> may be used to get the value of any type, standard
+or non-standard, as a string.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="SetType">SetType</A>(int aType)
+</B></FONT>
+<P>
+Sets the primary type from the enumerated value <B><TT>aType</TT></B>. Enumerated
+values are defined for all standard types in the file enum.h. The member
+function <B><TT>SetTypeStr()</TT></B> may be used to set the value of any
+type, standard or non-standard, from a string.
+<P>
+<FONT COLOR="teal"><B> const DwString&amp; <A NAME="TypeStr">TypeStr</A>()
+const </B></FONT>
+<P>
+Returns the primary type as a string.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="SetTypeStr">SetTypeStr</A>(const
+DwString&amp; aStr) </B></FONT>
+<P>
+Sets the primary type from a string.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="Subtype">Subtype</A>() const </B></FONT>
+<P>
+Returns the subtype as an enumerated value. Enumerated values are defined
+for all standard subtypes in the file enum.h. If the subtype is non-standard,
+<B><TT>DwMime::kSubtypeUnknown</TT></B> is returned. The member function
+<B><TT>SubtypeStr()</TT></B> may be used to get the value of any subtype,
+standard or non-standard, as a string.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="SetSubtype">SetSubtype</A>(int aSubtype)
+</B></FONT>
+<P>
+Sets the subtype from the enumerated value <B><TT>aSubtype</TT></B>. Enumerated
+values are defined for all standard subtypes in the file enum.h. The member
+function <B><TT>SetSubtypeStr()</TT></B> may be used to set the value of
+any subtype, standard or non-standard, from a string.
+<P>
+<FONT COLOR="teal"><B> const DwString&amp;
+<A NAME="SubtypeStr">SubtypeStr</A>() const </B></FONT>
+<P>
+Returns the subtype as a string.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="SetSubtypeStr">SetSubtypeStr</A>(const
+DwString&amp; aStr) </B></FONT>
+<P>
+Sets the subtype from a string.
+<P>
+<FONT COLOR="teal"><B> const DwString&amp; <A NAME="Boundary">Boundary</A>()
+const </B></FONT>
+<P>
+For the multipart type only, returns the value of the boundary parameter.
+This member function is a convenience function that searches the list of
+<B><TT>DwParameter</TT></B> objects.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="SetBoundary">SetBoundary</A>(const
+DwString&amp; aStr) </B></FONT>
+<P>
+For the multipart type only, sets the value of the boundary parameter. This
+member function is a convenience function that accesses the list of
+<B><TT>DwParameter</TT></B> objects.
+<P>
+<FONT COLOR="teal"><B> virtual void
+<A NAME="CreateBoundary">CreateBoundary</A>(unsigned aLevel=0) </B></FONT>
+<P>
+For the multipart type only, creates a boundary string.
+<B><TT>aLevel</TT></B> indicates the level of a nested multipart body part;
+if it is positive, it is used to form part of the created boundary string.
+This member function is a convenience function that accesses the list of
+child <B><TT>DwParameter</TT></B> objects.
+<P>
+<FONT COLOR="teal"><B> const DwString&amp; <A NAME="Name">Name</A>() const
+</B></FONT>
+<P>
+Returns the value of the "name" parameter, if such a parameter is present.
+The name parameter is often found in several media types, including the
+application/octet-stream media type; it suggests a file name for saving to
+a disk file. (The filename parameter in the Content-Disposition header field
+is an alternative way to indicate a file name.) This member function is a
+convenience function that searches the list of
+<B><TT>DwParameter</TT></B> objects.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="SetName">SetName</A>(const DwString&amp;
+aStr) </B></FONT>
+<P>
+Sets the value of the "name" parameter. If a name parameter is not already
+present, it is added. The name parameter is often found in several media
+types, including the application/octet-stream media type; it suggests a file
+name for saving to a disk file. (The filename parameter in the
+Content-Disposition header field is an alternative way to indicate a file
+name.) This member function is a convenience function that accesses the list
+of <B><TT>DwParameter</TT></B> objects.
+<P>
+<FONT COLOR="teal"><B> DwParameter*
+<A NAME="FirstParameter">FirstParameter</A>() const </B></FONT>
+<P>
+Returns the first <B><TT>DwParameter</TT></B> object in the list managed
+by this <B><TT>DwMediaType</TT></B> object. Use
+<B><TT>DwParameter::Next()</TT></B> to iterate through the list.
+<P>
+<FONT COLOR="teal"><B> void
+<A NAME="AddParameter">AddParameter</A>(DwParameter* aParam) </B></FONT>
+<P>
+Adds a <B><TT>DwParameter</TT></B> object to the list managed by this
+<B><TT>DwMediaType</TT></B> object.
+<P>
+<FONT COLOR="teal"><B> static DwMediaType*
+<A NAME="NewMediaType">NewMediaType</A>(const DwString&amp; aStr,
+DwMessageComponent* aParent) </B></FONT>
+<P>
+Creates a new <B><TT>DwMediaType</TT></B> object on the free store. If the
+static data member <B><TT>sNewMediaType</TT></B> is <B><TT>NULL</TT></B>,
+this member function will create a new <B><TT>DwMediaType</TT></B> and return
+it. Otherwise, <B><TT>NewMediaType()</TT></B> will call the user-supplied
+function pointed to by <B><TT>sNewMediaType</TT></B>, which is assumed to
+return an object from a class derived from <B><TT>DwMediaType</TT></B>, and
+return that object.
+<P>
+<FONT COLOR="teal"><B> virtual void
+<A NAME="PrintDebugInfo">PrintDebugInfo</A>(ostream&amp; aStrm, int aDepth=0)
+const </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+prints debugging information about this object to <B><TT>aStrm</TT></B>.
+It will also call <B><TT>PrintDebugInfo()</TT></B> for any of its child
+components down to a level of <B><TT>aDepth</TT></B>.
+<P>
+This member function is available only in the debug version of the library.
+<P>
+<FONT COLOR="teal"><B> virtual void
+<A NAME="CheckInvariants">CheckInvariants</A>() const </B></FONT>
+<P>
+Aborts if one of the invariants of the object fails. Use this member function
+to track down bugs.
+<P>
+This member function is available only in the debug version of the library.
+<H2>
+ <FONT COLOR="navy"> Public Data Members </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> static DwMediaType*
+(*<A NAME="sNewMediaType">sNewMediaType</A>)(const DwString&amp;,
+DwMessageComponent*) </B></FONT>
+<P>
+If <B><TT>sNewMediaType</TT></B> is not <B><TT>NULL</TT></B>, it is assumed
+to point to a user-supplied function that returns an object from a class
+derived from <B><TT>DwMediaType</TT></B>.
+</BODY></HTML>
diff --git a/mimelib/doc/message.html b/mimelib/doc/message.html
new file mode 100644
index 000000000..d08d5af4e
--- /dev/null
+++ b/mimelib/doc/message.html
@@ -0,0 +1,136 @@
+<HTML>
+<HEAD>
+ <TITLE> DwMessage Man Page </TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<H2>
+ <FONT COLOR="navy"> NAME </FONT>
+</H2>
+<P>
+DwMessage -- Class representing an RFC-822/MIME message
+<H2>
+ <FONT COLOR="navy"> SYNOPSIS </FONT>
+</H2>
+<PRE>class DW_EXPORT DwMessage : public <A HREF="entity.html">DwEntity</A> {
+
+public:
+
+ <A HREF="message.html#DwMessage">DwMessage</A>();
+ <A HREF="message.html#DwMessage">DwMessage</A>(const DwMessage&amp; aMessage);
+ <A HREF="message.html#DwMessage">DwMessage</A>(const DwString&amp; aStr, DwMessageComponent* aParent=0);
+ virtual ~DwMessage();
+ const DwMessage&amp; <A HREF="message.html#op_eq">operator =</A> (const DwMessage&amp; aMessage);
+ virtual DwMessageComponent* <A HREF="message.html#Clone">Clone</A>() const;
+ static DwMessage* <A HREF="message.html#NewMessage">NewMessage</A>(const DwString&amp; aStr,
+ DwMessageComponent* aParent);
+ static DwMessage* (*<A HREF="message.html#sNewMessage">sNewMessage</A>)(const DwString&amp;, DwMessageComponent*);
+
+public:
+
+ virtual void <A HREF="message.html#PrintDebugInfo">PrintDebugInfo</A>(ostream&amp; aStrm, int aDepth=0) const;
+
+protected:
+
+ void _PrintDebugInfo(ostream&amp; aStrm) const;
+};
+</PRE>
+<H2>
+ <FONT COLOR="navy"> DESCRIPTION </FONT>
+</H2>
+<P>
+<B><TT>DwMessage</TT></B> represents an RFC-822/MIME <I>message</I>.
+<P>
+A <I>message</I> contains both a collection of <I>header fields</I> and a
+<I>body</I>. In the terminology of RFC-2045, the general term for the
+headers-body combination is <I>entity</I>. In MIME++,
+<B><TT>DwMessage</TT></B> is a direct subclass of
+<B><TT><A HREF="entity.html">DwEntity</A></TT></B>, and therefore contains
+both a <B><TT><A HREF="headers.html">DwHeaders</A></TT></B> object and a
+<B><TT><A HREF="body.html">DwBody</A></TT></B> object.
+<P>
+In the tree (broken-down) representation of message, a
+<B><TT>DwMessage</TT></B> object is almost always a root node, having child
+nodes but no parent node. The child nodes are the
+<B><TT>DwHeaders</TT></B> object and the <B><TT>DwBody</TT></B> object it
+contains. A <B><TT>DwMessage</TT></B> may sometimes be an intermediate node.
+In this special case, the parent node is a <B><TT>DwBody</TT></B> object
+of type "message/*" and the <B><TT>DwMessage</TT></B> object represents an
+encapsulated message.
+<P>
+To access the contained <B><TT>DwHeaders</TT></B> object, use the inherited
+member function <B><TT>DwEntity::Headers()</TT></B>. To access the contained
+<B><TT>DwBody</TT></B> object, use the inherited member function
+<B><TT>DwEntity::Body()</TT></B>.
+<H2>
+ <FONT COLOR="navy"> Public Member Functions </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> <A NAME="DwMessage">DwMessage</A>() <BR>
+DwMessage(const DwMessage&amp; aMessage) <BR>
+DwMessage(const DwString&amp; aStr, DwMessageComponent* aParent=0)
+</B></FONT>
+<P>
+The first constructor is the default constructor, which sets the
+<B><TT>DwMessage</TT></B> object's string representation to the empty string
+and sets its parent to <B><TT>NULL</TT></B>.
+<P>
+The second constructor is the copy constructor, which performs a deep copy
+of <B><TT>aMessage</TT></B>. The parent of the new
+<B><TT>DwMessage</TT></B> object is set to <B><TT>NULL</TT></B>.
+<P>
+The third constructor copies <B><TT>aStr</TT></B> to the
+<B><TT>DwMessage</TT></B> object's string representation and sets
+<B><TT>aParent</TT></B> as its parent. The virtual member function
+<B><TT>Parse()</TT></B> should be called immediately after this constructor
+in order to parse the string representation.
+<P>
+<FONT COLOR="teal"><B> const DwMessage&amp; <A NAME="op_eq">operator =</A>
+(const DwMessage&amp; aMessage) </B></FONT>
+<P>
+This is the assignment operator, which performs a deep copy of
+<B><TT>aMessage</TT></B>. The parent node of the
+<B><TT>DwMessage</TT></B> object is not changed.
+<P>
+<FONT COLOR="teal"><B> virtual DwMessageComponent*
+<A NAME="Clone">Clone</A>() const </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+creates a new <B><TT>DwMessage</TT></B> on the free store that has the same
+value as this <B><TT>DwMessage</TT></B> object. The basic idea is that of
+a ``virtual copy constructor.''
+<P>
+<FONT COLOR="teal"><B> static DwMessage*
+<A NAME="NewMessage">NewMessage</A>(const DwString&amp; aStr, DwMessageComponent*
+aParent) </B></FONT>
+<P>
+Creates a new <B><TT>DwMessage</TT></B> object on the free store. If the
+static data member <B><TT>sNewMessage</TT></B> is <B><TT>NULL</TT></B>, this
+member function will create a new <B><TT>DwMessage</TT></B> and return it.
+Otherwise, <B><TT>NewMessage()</TT></B> will call the user-supplied function
+pointed to by <B><TT>sNewMessage</TT></B>, which is assumed to return an
+object from a class derived from <B><TT>DwMessage</TT></B>, and return that
+object.
+<P>
+<FONT COLOR="teal"><B> virtual void
+<A NAME="PrintDebugInfo">PrintDebugInfo</A>(ostream&amp; aStrm, int aDepth=0)
+const </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+prints debugging information about this object to <B><TT>aStrm</TT></B>.
+It will also call <B><TT>PrintDebugInfo()</TT></B> for any of its child
+components down to a level of <B><TT>aDepth</TT></B>.
+<P>
+This member function is available only in the debug version of the library.
+<H2>
+ <FONT COLOR="navy"> Public Data Members </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> static DwMessage*
+(*<A NAME="sNewMessage">sNewMessage</A>)(const DwString&amp;,
+DwMessageComponent*) </B></FONT>
+<P>
+If <B><TT>sNewMessage</TT></B> is not <B><TT>NULL</TT></B>, it is assumed
+to point to a user supplied function that returns an object from a class
+derived from <B><TT>DwMessage</TT></B>.
+<P>
+</BODY></HTML>
diff --git a/mimelib/doc/mimepp.html b/mimelib/doc/mimepp.html
new file mode 100644
index 000000000..3545ccfbe
--- /dev/null
+++ b/mimelib/doc/mimepp.html
@@ -0,0 +1,80 @@
+<!-- $Revision$ -->
+<!-- $Date$ -->
+<HTML>
+<HEAD>
+<TITLE>
+ MIME++ Man Page
+</TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+
+<FONT COLOR="navy">
+<H2>NAME</H2>
+</FONT>
+MIME++ -- C++ class library for creating, parsing, or modifying messages
+in MIME format
+
+<FONT COLOR="navy">
+<H2>SYNOPSIS</H2>
+</FONT>
+<PRE>
+#include &ltmimepp/mimepp.h&gt;
+</PRE>
+
+<FONT COLOR="navy">
+<H2>DESCRIPTION</H2>
+</FONT>
+MIME++ is a C++ class library for creating, parsing, or modifying messages
+in Multipurpose Internet Mail Extensions (MIME) format. For information
+on the MIME standards, see RFC-822, RFC-1123, RFC-1521, RFC-1522, and
+RFC-1523.
+
+<FONT COLOR="navy">
+<H3>Class Inheritance</H3>
+</FONT>
+<UL>
+<LI><A HREF="string.html">DwString</A>
+<LI><A HREF="msgcmp.html">DwMessageComponent</A>
+ <UL>
+ <LI><A HREF="body.html">DwBody</A>
+ <LI><A HREF="entity.html">DwEntity</A>
+ <UL>
+ <LI><A HREF="bodypart.html">DwBodyPart</A>
+ <LI><A HREF="message.html">DwMessage</A>
+ </UL>
+ <LI><A HREF="field.html">DwField</A>
+ <LI><A HREF="fieldbdy.html">DwFieldBody</A>
+ <UL>
+ <LI><A HREF="address.html">DwAddress</A>
+ <UL>
+ <LI><A HREF="group.html">DwGroup</A>
+ <LI><A HREF="mailbox.html">DwMailbox</A>
+ </UL>
+ <LI><A HREF="addrlist.html">DwAddressList</A>
+ <LI><A HREF="disptype.html">DwDispositionType</A>
+ <LI><A HREF="mediatyp.html">DwMediaType</A>
+ <LI><A HREF="mechansm.html">DwMechanism</A>
+ <LI><A HREF="datetime.html">DwDateTime</A>
+ <LI><A HREF="mboxlist.html">DwMailboxList</A>
+ <LI><A HREF="msgid.html">DwMsgId</A>
+ <LI><A HREF="text.html">DwText</A>
+ </UL>
+ <LI><A HREF="headers.html">DwHeader</A>
+ <LI><A HREF="param.html">DwParameter</A>
+ </UL>
+<LI><A HREF="protocol.html">DwProtocolClient</A>
+ <UL>
+ <LI><A HREF="smtp.html">DwSmtpClient</A>
+ <LI><A HREF="nntp.html">DwNntpClient</A>
+ <LI><A HREF="pop.html">DwPopClient</A>
+</UL>
+<LI><A HREF="binhex.html">DwBinhex</A>
+<LI><A HREF="binhex.html">DwUuencode</A>
+<LI><A HREF="boyermor.html">DwBoyerMoore</A>
+
+<FONT COLOR="navy">
+<H3><A HREF="util.html">Utility Functions</A></H3>
+</FONT>
+
+</BODY>
+</HTML>
diff --git a/mimelib/doc/msgcmp.html b/mimelib/doc/msgcmp.html
new file mode 100644
index 000000000..48a7ab549
--- /dev/null
+++ b/mimelib/doc/msgcmp.html
@@ -0,0 +1,298 @@
+<HTML>
+<HEAD>
+ <TITLE> DwMessageComponent Man Page </TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<H2>
+ <FONT COLOR="navy"> NAME </FONT>
+</H2>
+<P>
+DwMessageComponent -- Abstract base class for all message components
+<H2>
+ <FONT COLOR="navy"> SYNOPSIS </FONT>
+</H2>
+<PRE>class DW_EXPORT DwMessageComponent {
+
+public:
+
+ enum componentType {
+ kCidError=-1,
+ kCidUnknown=0,
+ kCidAddress,
+ kCidAddressList,
+ kCidBody,
+ kCidBodyPart,
+ kCidDispositionType,
+ kCidMechanism,
+ kCidMediaType,
+ kCidParameter,
+ kCidDateTime,
+ kCidEntity,
+ kCidField,
+ kCidFieldBody,
+ kCidGroup,
+ kCidHeaders,
+ kCidMailbox,
+ kCidMailboxList,
+ kCidMessage,
+ kCidMessageComponent,
+ kCidMsgId,
+ kCidText
+ };
+ <A HREF="msgcmp.html#DwMessageComponent">DwMessageComponent</A>();
+ <A HREF="msgcmp.html#DwMessageComponent">DwMessageComponent</A>(const DwMessageComponent&amp; aCmp);
+ <A HREF="msgcmp.html#DwMessageComponent">DwMessageComponent</A>(const DwString&amp; aStr, DwMessageComponent* aParent=0);
+ virtual ~DwMessageComponent();
+ const DwMessageComponent&amp; <A HREF="msgcmp.html#op_eq">operator =</A> (const DwMessageComponent&amp; aCmp);
+ virtual void <A HREF="msgcmp.html#Parse">Parse</A>() = 0;
+ virtual void <A HREF="msgcmp.html#Assemble">Assemble</A>() = 0;
+ virtual DwMessageComponent* <A HREF="msgcmp.html#Clone">Clone</A>() const = 0;
+ void <A HREF="msgcmp.html#FromString">FromString</A>(const DwString&amp; aStr);
+ void <A HREF="msgcmp.html#FromString">FromString</A>(const char* aCstr);
+ const DwString&amp; <A HREF="msgcmp.html#AsString">AsString</A>();
+ DwMessageComponent* <A HREF="msgcmp.html#Parent">Parent</A>();
+ void <A HREF="msgcmp.html#SetParent">SetParent</A>(DwMessageComponent* aParent);
+ DwBool <A HREF="msgcmp.html#IsModified">IsModified</A>() const;
+ void <A HREF="msgcmp.html#SetModified">SetModified</A>();
+ int <A HREF="msgcmp.html#ClassId">ClassId</A>() const;
+ const char* <A HREF="msgcmp.html#ClassName">ClassName</A>() const;
+ int <A HREF="msgcmp.html#ObjectId">ObjectId</A>() const;
+
+protected:
+
+ DwString mString;
+ DwBool mIsModified;
+ DwMessageComponent* mParent;
+ componentType mClassId;
+ const char* mClassName;
+
+public:
+
+ virtual void <A HREF="msgcmp.html#PrintDebugInfo">PrintDebugInfo</A>(ostream&amp; aStrm, int aDepth=0) const;
+ virtual void <A HREF="msgcmp.html#CheckInvariants">CheckInvariants</A>() const;
+
+protected:
+
+ void _PrintDebugInfo(ostream&amp; aStrm) const;
+};
+</PRE>
+<H2>
+ <FONT COLOR="navy"> DESCRIPTION </FONT>
+</H2>
+<P>
+<B><TT>DwMessageComponent</TT></B> is the root of an inheritance hierarchy
+from which all MIME message components are derived. Thus,
+<B><TT>DwMessageComponent</TT></B> defines important features that are inherited
+by nearly all other classes that represent components of a MIME message.
+These features are the following:
+<P>
+<UL>
+ <LI>
+ A string representation. The <B><TT>DwMessageComponent</TT></B> class provides
+ a member function <B><TT>FromString(const DwString&amp;)</TT></B> to set
+ the string representation and a member function
+ <B><TT>AsString()</TT></B> to get the string representation.
+ <P>
+ <LI>
+ A broken-down, or parsed, representation. An RFC-822 date-time, for example,
+ has a year, month, day, hour, minute, second, and time zone as elements of
+ its broken-down representation. <B><TT>DwMessageComponent</TT></B> does not
+ deal directly with the broken-down representation, since it is
+ component-specific. Derived classes bear all the responsibility for their
+ broken-down representations.
+ <P>
+ <LI>
+ A parse method to extract the broken-down representation from the string
+ representation. In the <B><TT>DwDateTime</TT></B> class, for example, the
+ parse method extracts the year, month, day, hour, minute, second, and time
+ zone from the RFC-822 <I>date-time</I> contained in the string representation.
+ <B><TT>DwMessageComponent</TT></B> provides a pure virtual function
+ <B><TT>Parse()</TT></B>, which executes the parse method for a derived class.
+ <P>
+ <LI>
+ An assemble method to convert the broken-down representation to a string
+ representation. This is the opposite of the parse method. In the
+ <B><TT>DwDateTime</TT></B> class, for example, the assemble method creates
+ an RFC-822 <I>date-time</I> string from values of the year, month, day, hour,
+ minute, second, and time zone. <B><TT>DwMessageComponent</TT></B> provides
+ a pure virtual function <B><TT>Assemble()</TT></B>, which executes the assemble
+ method for a derived class.
+ <P>
+ <LI>
+ An is-modified flag. When the string representation and the broken-down
+ representation are consistent, the assemble method does not need to be executed.
+ The is-modified flag is cleared when the two representations are consistent,
+ and is set when they are inconsistent. The flag is set automatically whenever
+ a <B><TT>DwMessageComponent</TT></B> object's broken-down representation
+ is changed by calling one of the object's member functions, and it is cleared
+ when the assemble or parse method is executed.
+ <B><TT>DwMessageComponent</TT></B> also provides a member function
+ <B><TT>SetModified()</TT></B> which forces the is-modified flag to be set.
+ <P>
+ <LI>
+ A parent. Most message components are part of another component. A collection
+ of headers is part of a message or body part, a header field is part of a
+ collection of headers, a field-body is part of a header field, and so on.
+ The parent of a component is the component that contains it. This tree structure
+ is important, since a component's parent must be parsed before the component
+ can be. Also, a component's string representation must be assembled before
+ its parent's. To maintain consistency in the tree, whenever a component's
+ is-modified flag is set, the component notifies its parent to also set its
+ is-modified flag. In this way, an is-modified flag set anywhere in the tree
+ always propagates up to the root component.
+ <P>
+ <LI>
+ Children. The preceding discussion about a component's parent is relevant
+ to an understanding of a component's children. A component's parse method
+ calls the parse methods of its children after it has executed its own parse
+ method (and, in some cases, created all of its children). Also, a component
+ typically calls the assemble method of its children before it executes its
+ own. A component's child may request that the component set its is-modified
+ flag. <B><TT>DwMessageComponent</TT></B> does not deal directly with children.
+ Derived classes bear all the responsibility for handling their children.
+</UL>
+<H2>
+ <FONT COLOR="navy"> Public Member Functions </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> <A NAME="DwMessageComponent">DwMessageComponent</A>()
+<BR>
+DwMessageComponent(const DwMessageComponent&amp; aCmp) <BR>
+DwMessageComponent(const DwString&amp; aStr, DwMessageComponent* aParent=0)
+</B></FONT>
+<P>
+The first constructor is the default constructor, which sets the
+<B><TT>DwMessageComponent</TT></B> object's string representation to the
+empty string and sets its parent to NULL.
+<P>
+The second constructor is the copy constructor, which performs a deep copy
+of <B><TT>aCmp</TT></B>. The parent of the new
+<B><TT>DwMessageComponent</TT></B> object is set to NULL.
+<P>
+The third constructor copies <B><TT>aStr</TT></B> to the new
+<B><TT>DwMessageComponent</TT></B> object's string representation and sets
+<B><TT>aParent</TT></B> as its parent. In typical cases, the virtual member
+function <B><TT>Parse()</TT></B> should be called immediately after this
+constructor to parse the new <B><TT>DwMessageComponent</TT></B> object and
+all of its children into their broken-down representations.
+<P>
+<FONT COLOR="teal"><B> const DwMessageComponent&amp; <A NAME="op_eq">operator
+=</A> (const DwMessageComponent&amp; aCmp) </B></FONT>
+<P>
+This is the assignment operator, which performs a deep copy of
+<B><TT>aCmp</TT></B>.
+<P>
+<FONT COLOR="teal"><B> virtual void <A NAME="Parse">Parse</A>() = 0
+</B></FONT>
+<P>
+A pure virtual function which provides an interface to the parse method.
+The parse method, implemented in derived classes, is responsible for extracting
+the broken-down representation from the string representation. In some derived
+classes, such as <B><TT>DwHeaders</TT></B>, the parse method is also responsible
+for creating the children of the object. (In the case of
+<B><TT>DwHeaders</TT></B>, the children created are the
+<B><TT>DwField</TT></B> objects that represent the <I>field</I>s contained
+in the <I>headers</I>.) The <B><TT>Parse()</TT></B> function always calls
+the <B><TT>Parse()</TT></B> function of all of its children.
+<P>
+<FONT COLOR="teal"><B> virtual void <A NAME="Assemble">Assemble</A>() = 0
+</B></FONT>
+<P>
+A pure virtual function which provides an interface to the assemble method.
+The assemble method, implemented in derived classes, is responsible for creating
+the string representation from the broken-down representation. In other words,
+the assemble method is the opposite of the parse method. Before assembling
+its string representation, the assemble method calls the assemble method
+of each of its children. In this way, the entire tree structure that represents
+a message may be traversed. If the is-modifed flag for a
+<B><TT>DwMessageComponent</TT></B> is cleared, the
+<B><TT>Assemble()</TT></B> function will return immediately without calling
+the <B><TT>Assemble()</TT></B> function of any of its children.
+<P>
+<FONT COLOR="teal"><B> virtual DwMessageComponent*
+<A NAME="Clone">Clone</A>() const = 0 </B></FONT>
+<P>
+Creates a new <B><TT>DwMessageComponent</TT></B> on the free store that is
+of the same type as, and has the same value as, this object. The basic idea
+is that of a ``virtual copy constructor.''
+<P>
+<FONT COLOR="teal"><B> void <A NAME="FromString">FromString</A>(const
+DwString&amp; aStr) <BR>
+void FromString(const char* aCstr) </B></FONT>
+<P>
+Sets the object's string representation. <B><TT>aCstr</TT></B> must be
+NUL-terminated. This member function does not invoke the parse method. Typically,
+the virtual member function <B><TT>Parse()</TT></B> should be called immediately
+after this member function to parse the
+<B><TT>DwMessageComponent</TT></B> object and all of its children into their
+broken-down representations. See also
+<B><TT>DwMessageComponent::Parse()</TT></B>
+<P>
+<FONT COLOR="teal"><B> const DwString&amp; <A NAME="AsString">AsString</A>()
+</B></FONT>
+<P>
+Returns the <B><TT>DwMessageComponent</TT></B> object's string representation.
+The assemble method is not called automatically. Typically, the
+<B><TT>Assemble()</TT></B> member function should be called immediately before
+this member function to insure that the broken-down representation and the
+string representation are consistent. See also
+<B><TT>DwMessageComponent::Assemble()</TT></B>.
+<P>
+<FONT COLOR="teal"><B> DwMessageComponent* <A NAME="Parent">Parent</A>()
+</B></FONT>
+<P>
+Returns the <B><TT>DwMessageComponent</TT></B> object that is the parent
+of this object.
+<P>
+<FONT COLOR="teal"><B> void
+<A NAME="SetParent">SetParent</A>(DwMessageComponent* aParent) </B></FONT>
+<P>
+Sets <B><TT>aParent</TT></B> as the <B><TT>DwMessageComponent</TT></B> object's
+parent.
+<P>
+<FONT COLOR="teal"><B> DwBool <A NAME="IsModified">IsModified</A>() const
+</B></FONT>
+<P>
+Returns 1 if the is-modified flag is set for this
+<B><TT>DwMessageComponent</TT></B> object.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="SetModified">SetModified</A>()
+</B></FONT>
+<P>
+Sets the is-modified (dirty) flag for this
+<B><TT>DwMessageComponent</TT></B> object and notifies the object's parent
+to also set its is-modified flag.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="ClassId">ClassId</A>() const </B></FONT>
+<P>
+Returns an integer id for the object's class.
+<P>
+<FONT COLOR="teal"><B> const char* <A NAME="ClassName">ClassName</A>() const
+</B></FONT>
+<P>
+Returns the name of the class as a NUL-terminated char string.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="ObjectId">ObjectId</A>() const
+</B></FONT>
+<P>
+Returns a object id that is unique among all DwMessageComponent objects.
+<P>
+<FONT COLOR="teal"><B> virtual void
+<A NAME="PrintDebugInfo">PrintDebugInfo</A>(ostream&amp; aStrm, int aDepth=0)
+const </B></FONT>
+<P>
+This virtual function prints debugging information about this object to
+<B><TT>aStrm</TT></B>. It will also call <B><TT>PrintDebugInfo()</TT></B>
+for any of its child components down to a level of
+<B><TT>aDepth</TT></B>.
+<P>
+This member function is available only in the debug version of the library.
+<P>
+<FONT COLOR="teal"><B> virtual void
+<A NAME="CheckInvariants">CheckInvariants</A>() const </B></FONT>
+<P>
+Aborts if one of the invariants of the object fails. Use this member function
+to track down bugs.
+<P>
+This member function is available only in the debug version of the library.
+</BODY></HTML>
diff --git a/mimelib/doc/msgid.html b/mimelib/doc/msgid.html
new file mode 100644
index 000000000..69d10ef59
--- /dev/null
+++ b/mimelib/doc/msgid.html
@@ -0,0 +1,198 @@
+<HTML>
+<HEAD>
+ <TITLE> DwMsgId Man Page </TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<H2>
+ <FONT COLOR="navy"> NAME </FONT>
+</H2>
+<P>
+DwMsgId -- Class representing an RFC-822 msg-id
+<H2>
+ <FONT COLOR="navy"> SYNOPSIS </FONT>
+</H2>
+<PRE>class DW_EXPORT DwMsgId : public <A HREF="fieldbdy.html">DwFieldBody</A> {
+
+public:
+
+ <A HREF="msgid.html#DwMsgId">DwMsgId</A>();
+ <A HREF="msgid.html#DwMsgId">DwMsgId</A>(const DwMsgId&amp; aMsgId);
+ <A HREF="msgid.html#DwMsgId">DwMsgId</A>(const DwString&amp; aStr, DwMessageComponent* aParent=0);
+ virtual ~DwMsgId();
+ const DwMsgId&amp; <A HREF="msgid.html#op_eq">operator =</A> (const DwMsgId&amp; aMsgId);
+ virtual void <A HREF="msgid.html#Parse">Parse</A>();
+ virtual void <A HREF="msgid.html#Assemble">Assemble</A>();
+ virtual DwMessageComponent* <A HREF="msgid.html#Clone">Clone</A>() const;
+ virtual void <A HREF="msgid.html#CreateDefault">CreateDefault</A>();
+ const DwString&amp; <A HREF="msgid.html#LocalPart">LocalPart</A>() const;
+ void <A HREF="msgid.html#SetLocalPart">SetLocalPart</A>(const DwString&amp; aLocalPart);
+ const DwString&amp; <A HREF="msgid.html#Domain">Domain</A>() const;
+ void <A HREF="msgid.html#SetDomain">SetDomain</A>(const DwString&amp; aDomain);
+ static DwMsgId* <A HREF="msgid.html#NewMsgId">NewMsgId</A>(const DwString&amp; aStr,
+ DwMessageComponent* aParent);
+ static DwMsgId* (*<A HREF="msgid.html#sNewMsgId">sNewMsgId</A>)(const DwString&amp;, DwMessageComponent*);
+ static const char* <A HREF="msgid.html#sHostName">sHostName</A>;
+
+public:
+
+ virtual void <A HREF="msgid.html#PrintDebugInfo">PrintDebugInfo</A>(ostream&amp; aStrm, int aDepth=0) const;
+ virtual void <A HREF="msgid.html#CheckInvariants">CheckInvariants</A>() const;
+
+protected:
+
+ void _PrintDebugInfo(ostream&amp; aStrm) const;
+};
+</PRE>
+<H2>
+ <FONT COLOR="navy"> DESCRIPTION </FONT>
+</H2>
+<P>
+<B><TT>DwMsgId</TT></B> represents a <I>msg-id</I> as described in RFC-822.
+In the BNF grammar in RFC-822, a msg-id has a <I>local-part</I> and a
+<I>domain</I>. In MIME++, a <B><TT>DwMsgId</TT></B> contains strings that
+contain the local-part and the domain.
+<P>
+In the tree (broken-down) representation of message, a
+<B><TT>DwMsgId</TT></B> object may only be a leaf node, having a parent but
+no child nodes. Its parent node must be a
+<A HREF="field.html"><B><TT>DwField</TT></B> </A>object.
+<P>
+<B><TT>DwMsgId</TT></B> has member functions for getting or setting its
+local-part and its domain. You can have the library to create the contents
+of a <B><TT>DwMsgId</TT></B> object for you by calling the member function
+<B><TT>CreateDefault()</TT></B>.
+<H2>
+ <FONT COLOR="navy"> Public Member Functions </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> <A NAME="DwMsgId">DwMsgId</A>() <BR>
+DwMsgId(const DwMsgId&amp; aMsgId) <BR>
+DwMsgId(const DwString&amp; aStr, DwMessageComponent* aParent=0) </B></FONT>
+<P>
+The first constructor is the default constructor, which sets the
+<B><TT>DwMsgId</TT></B> object's string representation to the empty string
+and sets its parent to NULL.
+<P>
+The second constructor is the copy constructor, which performs a deep copy
+of <B><TT>aMsgId</TT></B>. The parent of the new <B><TT>DwMsgId</TT></B>
+object is set to NULL.
+<P>
+The third constructor copies <B><TT>aStr</TT></B> to the
+<B><TT>DwMsgId</TT></B> object's string representation and sets
+<B><TT>aParent</TT></B> as its parent. The virtual member function
+<B><TT>Parse()</TT></B> should be called immediately after this constructor
+in order to parse the string representation. Unless it is NULL,
+<B><TT>aParent</TT></B> should point to an object of a class derived from
+<B><TT>DwField</TT></B>.
+<P>
+<FONT COLOR="teal"><B> const DwMsgId&amp; <A NAME="op_eq">operator =</A>
+(const DwMsgId&amp; aMsgId) </B></FONT>
+<P>
+This is the assignment operator, which performs a deep copy of
+<B><TT>aMsgId</TT></B>. The parent node of the <B><TT>DwMsgId</TT></B> object
+is not changed.
+<P>
+<FONT COLOR="teal"><B> virtual void <A NAME="Parse">Parse</A>() </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+executes the parse method for <B><TT>DwMsgId</TT></B> objects. The parse
+method parses the local-part and the domain from the string representation.
+<P>
+You should call this member function after you set or modify the string
+representation, and before you retrieve local-part or domain.
+<P>
+This function clears the is-modified flag.
+<P>
+<FONT COLOR="teal"><B> virtual void <A NAME="Assemble">Assemble</A>()
+</B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+executes the assemble method for <B><TT>DwMsgId</TT></B> objects. The assemble
+method creates or updates the string representation from the local-part and
+the domain.
+<P>
+You should call this member function after you modify the local-part or the
+domain, and before you retrieve the string representation.
+<P>
+This function clears the is-modified flag.
+<P>
+<FONT COLOR="teal"><B> virtual DwMessageComponent*
+<A NAME="Clone">Clone</A>() const </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+creates a new <B><TT>DwMsgId</TT></B> on the free store that has the same
+value as this <B><TT>DwMsgId</TT></B> object. The basic idea is that of a
+``virtual copy constructor.''
+<P>
+<FONT COLOR="teal"><B> virtual void
+<A NAME="CreateDefault">CreateDefault</A>() </B></FONT>
+<P>
+Creates a value for the msg-id. Uses the current time, process id, and fully
+qualified domain name for the host.
+<P>
+<FONT COLOR="teal"><B> const DwString&amp;
+<A NAME="LocalPart">LocalPart</A>() const </B></FONT>
+<P>
+Returns the local-part of the msg-id.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="SetLocalPart">SetLocalPart</A>(const
+DwString&amp; aLocalPart) </B></FONT>
+<P>
+Sets the local-part of the msg-id.
+<P>
+<FONT COLOR="teal"><B> const DwString&amp; <A NAME="Domain">Domain</A>()
+const </B></FONT>
+<P>
+Returns the domain of the msg-id.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="SetDomain">SetDomain</A>(const
+DwString&amp; aDomain) </B></FONT>
+<P>
+Sets the domain of the msg-id.
+<P>
+<FONT COLOR="teal"><B> static DwMsgId* <A NAME="NewMsgId">NewMsgId</A>(const
+DwString&amp; aStr, DwMessageComponent* aParent) </B></FONT>
+<P>
+Creates a new <B><TT>DwMsgId</TT></B> object on the free store. If the static
+data member <B><TT>sNewMsgId</TT></B> is NULL, this member function will
+create a new <B><TT>DwMsgId</TT></B> and return it. Otherwise,
+<B><TT>NewMsgId()</TT></B> will call the user-supplied function pointed to
+by <B><TT>sNewMsgId</TT></B>, which is assumed to return an object from a
+class derived from <B><TT>DwMsgId</TT></B>, and return that object.
+<P>
+<FONT COLOR="teal"><B> virtual void
+<A NAME="PrintDebugInfo">PrintDebugInfo</A>(ostream&amp; aStrm, int aDepth=0)
+const </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+prints debugging information about this object to <B><TT>aStrm</TT></B>.
+It will also call <B><TT>PrintDebugInfo()</TT></B> for any of its child
+components down to a level of <B><TT>aDepth</TT></B>.
+<P>
+This member function is available only in the debug version of the library.
+<P>
+<FONT COLOR="teal"><B> virtual void
+<A NAME="CheckInvariants">CheckInvariants</A>() const </B></FONT>
+<P>
+Aborts if one of the invariants of the object fails. Use this member function
+to track down bugs.
+<P>
+This member function is available only in the debug version of the library.
+<H2>
+ <FONT COLOR="navy"> Public Data Members </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> static DwMsgId*
+(*<A NAME="sNewMsgId">sNewMsgId</A>)(const DwString&amp;, DwMessageComponent*)
+</B></FONT>
+<P>
+If <B><TT>sNewMsgId</TT></B> is not NULL, it is assumed to point to a
+user-supplied function that returns an object from a class derived from
+<B><TT>DwMsgId</TT></B>.
+<P>
+<FONT COLOR="teal"><B> static const char* <A NAME="sHostName">sHostName</A>
+</B></FONT>
+<P>
+Host name of machine, used to create msg-id string. This data member is ignored
+if the platform supports a gethostname() function call.
+</BODY></HTML>
diff --git a/mimelib/doc/nntp.html b/mimelib/doc/nntp.html
new file mode 100644
index 000000000..75b8b71fb
--- /dev/null
+++ b/mimelib/doc/nntp.html
@@ -0,0 +1,384 @@
+<HTML>
+<HEAD>
+ <TITLE> DwNntpClient Man Page </TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<H2>
+ <FONT COLOR="navy"> NAME </FONT>
+</H2>
+<P>
+DwNntpClient -- Class for handling the client side of an NNTP session
+<H2>
+ <FONT COLOR="navy"> SYNOPSIS </FONT>
+</H2>
+<PRE>class DW_EXPORT DwNntpClient : public <A HREF="protocol.html">DwProtocolClient</A> {
+
+public:
+
+ enum {
+ kCmdNoCommand=0,
+ kCmdArticle,
+ kCmdBody,
+ kCmdHead,
+ kCmdStat,
+ kCmdGroup,
+ kCmdHelp,
+ kCmdIhave,
+ kCmdLast,
+ kCmdList,
+ kCmdNewgroups,
+ kCmdNewnews,
+ kCmdNext,
+ kCmdPost,
+ kCmdQuit,
+ kCmdSlave
+ };
+ <A HREF="nntp.html#DwNntpClient">DwNntpClient</A>();
+ virtual ~DwNntpClient();
+ virtual int <A HREF="nntp.html#Open">Open</A>(const char* aServer, DwUint16 aPort=119);
+ DwObserver* <A HREF="nntp.html#SetObserver">SetObserver</A>(DwObserver* aObserver);
+ int <A HREF="nntp.html#ReplyCode">ReplyCode</A>() const;
+ const DwString&amp; <A HREF="nntp.html#StatusResponse">StatusResponse</A>() const;
+ const DwString&amp; <A HREF="nntp.html#TextResponse">TextResponse</A>() const;
+ int <A HREF="nntp.html#Article">Article</A>(int aNumber=(-1));
+ int <A HREF="nntp.html#Article">Article</A>(const char* aMsgid);
+ int <A HREF="nntp.html#Body">Body</A>(int aNumber=(-1));
+ int <A HREF="nntp.html#Body">Body</A>(const char* aMsgid);
+ int <A HREF="nntp.html#Head">Head</A>(int aNumber=(-1));
+ int <A HREF="nntp.html#Head">Head</A>(const char* aMsgid);
+ int <A HREF="nntp.html#Stat">Stat</A>(int aNumber=(-1));
+ int <A HREF="nntp.html#Stat">Stat</A>(const char* aMsgid);
+ int <A HREF="nntp.html#Group">Group</A>(const char* aNewsgroupName);
+ int <A HREF="nntp.html#Help">Help</A>();
+ int <A HREF="nntp.html#Ihave">Ihave</A>(const char* aMsgId);
+ int <A HREF="nntp.html#Last">Last</A>();
+ int <A HREF="nntp.html#List">List</A>();
+ int <A HREF="nntp.html#Newgroups">Newgroups</A>(const char* aDate, const char* aTime,
+ DwBool aIsGmt=DwFalse, const char* aDistributions=0);
+ int <A HREF="nntp.html#Newnews">Newnews</A>(const char* aNewsgroups, const char* aDate,
+ const char* aTime, DwBool aIsGmt=DwFalse, const char* aDistribution=0);
+ int <A HREF="nntp.html#Next">Next</A>();
+ int <A HREF="nntp.html#Post">Post</A>();
+ int <A HREF="nntp.html#Quit">Quit</A>();
+ int <A HREF="nntp.html#Slave">Slave</A>();
+ int <A HREF="nntp.html#SendData">SendData</A>(const DwString&amp; aStr);
+ int <A HREF="nntp.html#SendData">SendData</A>(const char* aBuf, int aBufLen);
+};
+</PRE>
+<H2>
+ <FONT COLOR="navy"> DESCRIPTION </FONT>
+</H2>
+<P>
+<B><TT>DwNntpClient</TT></B> is a class that handles the client side of an
+NNTP session. Specifically, <B><TT>DwNntpClient</TT></B> provides facilities
+for opening a connection to an NNTP server, sending commands and data to
+the server, receiving responses and data from the server, and closing the
+connection. The protocol implemented is the Network News Transport Protocol,
+as specified in RFC-977.
+<P>
+<B><TT>DwNntpClient</TT></B> is derived from
+<B><TT><A HREF="protocol.html">DwProtocolClient</A></TT></B>. For information
+about inherited member functions, especially member functions for detecting
+failures or errors, see the man page for
+<B><TT>DwProtocolClient</TT></B>.
+<P>
+In an NNTP session, the client sends commands to the server and receives
+responses from the server. A client command consists of a command word and
+zero or more argument words. A server response consists of a status line
+and possibly some additional lines of text. The status line consists of a
+three-digit numeric reply code followed by additional information. The reply
+code indicates a success or failure condition. In some cases, the server
+sends lines of text immediately after the status line.
+<B><TT>DwNntpClient</TT></B> provides facilities for you to send commands
+to the server and receive responses from the server.
+<P>
+<B><TT>DwNntpClient</TT></B> has only a default constructor. On Win32 platforms,
+it is possible for the constructor to fail. (It calls WSAStartup().) You
+should verify that the constructor succeeded by calling the inherited member
+function <B><TT>DwProtocolClient::LastError()</TT></B> and checking for a
+zero return value.
+<P>
+To open a connection to the server, call the member function
+<B><TT>Open()</TT></B> with the name of the server as an argument.
+<B><TT>Open()</TT></B> accepts an optional argument that specifies the TCP
+port that the server listens to. The default port is the standard NNTP port
+(119). <B><TT>Open()</TT></B> may fail, so you should check the return value
+to verify that it succeeded. To close the connection, call the inherited
+member function <B><TT>DwProtocolClient::Close()</TT></B>. To check if a
+connection is open, call the inherited member function
+<B><TT>DwProtocolClient::IsOpen()</TT></B>. <B><TT>IsOpen()</TT></B> returns
+a boolean value that indicates whether or not a call to
+<B><TT>Open()</TT></B> was successful; it will not detect failure in the
+network or a close operation by the remote host.
+<P>
+For each NNTP command, <B><TT>DwNntpClient</TT></B> has a member function
+that sends that command and receives the server's response. If the command
+takes any arguments, then those arguments are passed as function arguments
+to the command function. The command functions return the numeric value of
+the three-digit reply code returned by the server. Your program must check
+the reply code to determine whether or not the command was accepted and performed
+by the server. In some cases, because of a communications error or some other
+error, it is not possible for the command function to send the command or
+receive the response. When this happens, the command function will return
+0. You can determine the precise error or failure by calling the inherited
+member functions <B><TT>DwProtocolClient::LastError()</TT></B> or
+<B><TT>DwProtocolClient::LastFailure()</TT></B>.
+<P>
+After each command is sent, <B><TT>DwNntpClient</TT></B> receives the server's
+response and remembers it. The member function
+<B><TT>ReplyCode()</TT></B> returns the numeric value of the reply code received
+in response to the last command. <B><TT>StatusResponse()</TT></B> returns
+the entire status response from the server, including the reply code. If
+no status response is received, possibly because of a communications error
+or failure, <B><TT>ReplyCode()</TT></B> returns zero and
+<B><TT>StatusResponse()</TT></B> returns an empty string.
+<P>
+The server sends a status response, including a reply code, for all all NNTP
+commands. For some commands, such as when the client requests an article
+body, the server sends a multi-line text response immediately following the
+status response. Multi-line text responses can be received in either of two
+ways. The simplest way is to call the member function
+<B><TT>TextResponse()</TT></B> after a command completes successfully. This
+simple method works fine for non-interactive applications. It can be a problem
+in interactive applications, however, because there is no data to display
+to a user until the entire text response is retrieved. An alternative method
+allows your program to retrieve the text response one line at a time as it
+is received. To use this method, you must define a subclass of
+<B><TT>DwObserver</TT></B> and assign an object of that class to the
+<B><TT>DwNntpClient</TT></B> object using the member function
+<B><TT>SetObserver()</TT></B>. <B><TT>DwObserver</TT></B> is an abstract
+class, declared in protocol.h, that has just one pure virtual member function
+<B><TT>Notify()</TT></B>. After each line of the text response is received,
+<B><TT>DwNntpClient</TT></B> will call the <B><TT>Notify()</TT></B> member
+function of its assigned <B><TT>DwObserver</TT></B> object. Each invocation
+of <B><TT>Notify()</TT></B> should call the <B><TT>DwNntpClient</TT></B>
+member function <B><TT>TextResponse()</TT></B> to retrieve the next line
+of the text response. Note that you cannot use both of these methods at the
+same time: if an observer is assigned, <B><TT>TextResponse()</TT></B> returns
+only the last line received, not the entire multi-line text response.
+<P>
+Certain NNTP commands, such as the POST command, require the NNTP client
+to send multiple lines of text to the server. To perform this bulk data transfer,
+<B><TT>DwNntpClient</TT></B> provides the member function
+<B><TT>SendData()</TT></B>. In the current implementation,
+<B><TT>SendData()</TT></B> does not convert end of line characters, so it
+is your responsibility to convert the end of line characters to CR LF, if
+necessary. (You may use the utility function
+<B><TT>DwToCrLfEol()</TT></B> to do the conversion.)
+<B><TT>SendData()</TT></B> will perform the character stuffing to protect
+'.' at the beginning of a line, and it will append the final [CR LF] '.'
+CR LF. It is possible to divide data and make multiple calls to
+<B><TT>SendData()</TT></B>; however, if you do so, please note the following
+paragraph.
+<P>
+Note: Because of a feature (some might say bug) in the current implementation,
+<B><TT>SendData()</TT></B> will not detect a '.' at the beginning of a line
+if the CR LF '.' sequence is split between two calls to
+<B><TT>SendData()</TT></B>. This problem will probably be resolved in a future
+version, but be aware that such a change will require a change in
+<B><TT>DwNntpClient</TT></B>'s interface.
+<H2>
+ <FONT COLOR="navy"> Public Member Functions </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> <A NAME="DwNntpClient">DwNntpClient</A>() </B></FONT>
+<P>
+Initializes the <B><TT>DwNntpClient</TT></B> object. It is possible for the
+constructor to fail. To verify that the constructor succeeded, call the member
+function <B><TT>LastError()</TT></B> and check that it returns zero. (In
+the Win32 implementation, the constructor calls the Winsock function
+<B><TT>WSAStartup()</TT></B>, which may fail.)
+<P>
+<FONT COLOR="teal"><B> virtual int <A NAME="Open">Open</A>(const char* aServer,
+DwUint16 aPort=119) </B></FONT>
+<P>
+Opens a TCP connection to the server <B><TT>aServer</TT></B> at port
+<B><TT>aPort</TT></B>. <B><TT>aServer</TT></B> may be either a host name,
+such as "news.acme.com" or an IP number in dotted decimal format, such as
+"147.81.64.60". The default value for <B><TT>aPort</TT></B> is 119, the
+well-known port for NNTP assigned by the Internet Assigned Numbers Authority
+(IANA).
+<P>
+If the connection attempt succeeds, the server sends a response.
+<B><TT>Open()</TT></B> returns the server's numeric reply code. The full
+response from the server can be retrieved by calling
+<B><TT>StatusResponse()</TT></B>.
+<P>
+If the connection attempt fails, <B><TT>Open()</TT></B> returns 0. To determine
+what error occurred when a connection attempt fails, call the inherited member
+function <B><TT>DwProtocolClient::LastError()</TT></B>. To determine if a
+failure also occurred, call the inherited member function
+<B><TT>DwProtocolClient::LastFailure()</TT></B>.
+<P>
+<FONT COLOR="teal"><B> DwObserver*
+<A NAME="SetObserver">SetObserver</A>(DwObserver* aObserver) </B></FONT>
+<P>
+Sets the observer object that interacts with the
+<B><TT>DwNntpClient</TT></B> object to retrieve a multi-line text response.
+If an observer is set, <B><TT>DwNntpClient</TT></B> will call the observer's
+<B><TT>Notify()</TT></B> method after each line of the text response is received.
+To remove an observer, call <B><TT>SetObserver()</TT></B> with a NULL argument.
+<B><TT>SetObserver()</TT></B> returns the previously set observer, or NULL
+if no observer was previously set.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="ReplyCode">ReplyCode</A>() const
+</B></FONT>
+<P>
+Returns the numeric value of the three-digit reply code received from the
+server in response to the last client command. If no response was received,
+<B><TT>ReplyCode()</TT></B> returns zero.
+<P>
+<FONT COLOR="teal"><B> const DwString&amp;
+<A NAME="StatusResponse">StatusResponse</A>() const </B></FONT>
+<P>
+Returns the entire status response last received from the server. If no response
+was received, perhaps because of a communications failure,
+<B><TT>StatusResponse()</TT></B> returns an empty string.
+<P>
+<FONT COLOR="teal"><B> const DwString&amp;
+<A NAME="TextResponse">TextResponse</A>() const </B></FONT>
+<P>
+If no observer is set for this object, <B><TT>TextResponse()</TT></B> returns
+a string that comprises the entire sequence of lines received from the server.
+Otherwise, if an observer <B><TT>is</TT></B> set for this object,
+<B><TT>TextResponse()</TT></B> returns only the most recent line received.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="Article">Article</A>(int aNumber=(-1))
+<BR>
+int Article(const char* aMsgid) </B></FONT>
+<P>
+Sends the NNTP ARTICLE command and returns the reply code received from the
+server. If no response is received, the function returns zero. The optional
+argument <B><TT>aNumber</TT></B> specifies the number of an article to retrieve.
+If <B><TT>Article()</TT></B> is called with the default argument, the ARTICLE
+command is sent to the server with no argument. <B><TT>aMsgId</TT></B> specifies
+the message id of an article to retrieve.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="Body">Body</A>(int aNumber=(-1)) <BR>
+int Body(const char* aMsgid) </B></FONT>
+<P>
+Sends the NNTP BODY command and returns the reply code received from the
+server. If no response is received, the function returns zero. The optional
+argument <B><TT>aNumber</TT></B> specifies the number of an article whose
+body should be retrieved. If <B><TT>Body()</TT></B> is called with the default
+argument, the BODY command is sent to the server with no argument.
+<B><TT>aMsgId</TT></B> specifies the message id of the article to access.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="Head">Head</A>(int aNumber=(-1)) <BR>
+int Head(const char* aMsgid) </B></FONT>
+<P>
+Sends the NNTP HEAD command and returns the reply code received from the
+server. If no response is received, the function returns zero. The optional
+argument <B><TT>aNumber</TT></B> specifies the number of an article whose
+header lines should be retrieved. If <B><TT>Head()</TT></B> is called with
+the default argument, the HEAD command is sent to the server with no argument.
+<B><TT>aMsgId</TT></B> specifies the message id of the article to access.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="Stat">Stat</A>(int aNumber=(-1)) <BR>
+int Stat(const char* aMsgid) </B></FONT>
+<P>
+Sends the NNTP STAT command and returns the reply code received from the
+server. If no response is received, the function returns zero. The optional
+argument <B><TT>aNumber</TT></B> specifies the number of an article to access.
+If <B><TT>Stat()</TT></B> is called with the default argument, the STAT command
+is sent to the server with no argument. <B><TT>aMsgId</TT></B> specifies
+the message id of the article to access.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="Group">Group</A>(const char* aNewsgroupName)
+</B></FONT>
+<P>
+Sends the NNTP GROUP command and returns the reply code received from the
+server. The argument <B><TT>aNewsgroupName</TT></B> specifies the newgroup
+to be selected. If no response is received, the function returns zero.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="Help">Help</A>() </B></FONT>
+<P>
+Sends the NNTP HELP command and returns the reply code received from the
+server. If no response is received, the function returns zero.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="Ihave">Ihave</A>(const char* aMsgId)
+</B></FONT>
+<P>
+Sends the NNTP IHAVE command and returns the reply code received from the
+server. <B><TT>aMsgId</TT></B> specifies the message id of the article to
+be sent. If no response is received, the function returns zero.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="Last">Last</A>() </B></FONT>
+<P>
+Sends the NNTP LAST command and returns the reply code received from the
+server. If no response is received, the function returns zero.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="List">List</A>() </B></FONT>
+<P>
+Sends the NNTP LIST command and returns the reply code received from the
+server. If no response is received, the function returns zero.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="Newgroups">Newgroups</A>(const char*
+aDate, const char* aTime, DwBool aIsGmt=DwFalse, const char* aDistributions=0)
+</B></FONT>
+<P>
+Sends the NNTP NEWGROUPS command and returns the reply code received from
+the server. If no response is received, the function returns zero.
+<B><TT>aDate</TT></B> is the date in the form YYMMDD, where YY is the two
+digit year, MM is the month, and DD is the day of the month.
+<B><TT>aTime</TT></B> is the time in the form HHMMSS, where HH is hours,
+MM is minutes, and SS is seconds. If <B><TT>aIsGmt</TT></B> is true, the
+optional GMT argument will be sent. <B><TT>aDistributions</TT></B> specifies
+the optional list of distribution groups.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="Newnews">Newnews</A>(const char* aNewsgroups,
+const char* aDate, const char* aTime, DwBool aIsGmt=DwFalse, const char*
+aDistribution=0) </B></FONT>
+<P>
+Sends the NNTP NEWNEWS command and returns the reply code received from the
+server. If no response is received, the function returns zero.
+<B><TT>aNewsgroups</TT></B> is the newsgroups argument for the command.
+<B><TT>aDate</TT></B> is the date in the form YYMMDD, where YY is the two
+digit year, MM is the month, and DD is the day of the month.
+<B><TT>aTime</TT></B> is the time in the form HHMMSS, where HH is hours,
+MM is minutes, and SS is seconds. If <B><TT>aIsGmt</TT></B> is true, the
+optional GMT argument will be sent. <B><TT>aDistributions</TT></B> specifies
+the optional list of distribution groups.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="Next">Next</A>() </B></FONT>
+<P>
+Sends the NNTP NEXT command and returns the reply code received from the
+server. If no response is received, perhaps because of an error, the function
+returns zero.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="Post">Post</A>() </B></FONT>
+<P>
+Sends the NNTP POST command and returns the reply code received from the
+server. If no response is received, perhaps because of an error, the function
+returns zero.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="Quit">Quit</A>() </B></FONT>
+<P>
+Sends the NNTP QUIT command and returns the reply code received from the
+server. If no response is received, perhaps because of an error, the function
+returns zero.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="Slave">Slave</A>() </B></FONT>
+<P>
+Sends the NNTP SLAVE command and returns the reply code received from the
+server. If no response is received, perhaps because of an error, the function
+returns zero.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="SendData">SendData</A>(const DwString&amp;
+aStr) <BR>
+int SendData(const char* aBuf, int aBufLen) </B></FONT>
+<P>
+Sends bulk data to the server and returns the reply code received. A bulk
+data transfer follows a POST or IHAVE command and is used to send a complete
+article to the server.
+<P>
+In the current implementation, <B><TT>SendData()</TT></B> does not convert
+end of line characters, so it is your responsibility to convert the end of
+line characters to CR LF, if necessary. (You may use the utility function
+<B><TT>DwToCrLfEol()</TT></B> to do the conversion.)
+<B><TT>SendData()</TT></B> will perform the character stuffing to protect
+'.' at the beginning of a line, and it will append the final [CR LF] '.'
+CR LF. It is possible to divide the data and make multiple calls to
+<B><TT>SendData()</TT></B>; however, this may cause problems in the current
+implementation if a CR LF '.' sequence is split between calls.
+</BODY></HTML>
diff --git a/mimelib/doc/param.html b/mimelib/doc/param.html
new file mode 100644
index 000000000..786f65bc5
--- /dev/null
+++ b/mimelib/doc/param.html
@@ -0,0 +1,189 @@
+<HTML>
+<HEAD>
+ <TITLE> DwParameter Man Page </TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<H2>
+ <FONT COLOR="navy"> NAME </FONT>
+</H2>
+<P>
+DwParameter -- Class representing a MIME field body parameter
+<H2>
+ <FONT COLOR="navy"> SYNOPSIS </FONT>
+</H2>
+<PRE>class DW_EXPORT DwParameter : public <A HREF="msgcmp.html">DwMessageComponent</A> {
+
+ friend class DwMediaType;
+
+public:
+
+ <A HREF="param.html#DwParameter">DwParameter</A>();
+ <A HREF="param.html#DwParameter">DwParameter</A>(const DwParameter&amp; aParam);
+ <A HREF="param.html#DwParameter">DwParameter</A>(const DwString&amp; aStr, DwMessageComponent* aParent=0);
+ virtual ~DwParameter();
+ const DwParameter&amp; <A HREF="param.html#op_eq">operator =</A> (const DwParameter&amp; aParam);
+ virtual void <A HREF="param.html#Parse">Parse</A>();
+ virtual void <A HREF="param.html#Assemble">Assemble</A>();
+ virtual DwMessageComponent* <A HREF="param.html#Clone">Clone</A>() const;
+ const DwString&amp; <A HREF="param.html#Attribute">Attribute</A>() const;
+ void <A HREF="param.html#SetAttribute">SetAttribute</A>(const DwString&amp; aAttribute);
+ const DwString&amp; <A HREF="param.html#Value">Value</A>() const;
+ void <A HREF="param.html#SetValue">SetValue</A>(const DwString&amp; aValue);
+ DwParameter* <A HREF="param.html#Next">Next</A>() const ;
+ void <A HREF="param.html#SetNext">SetNext</A>(DwParameter* aParam);
+ static DwParameter* <A HREF="param.html#NewParameter">NewParameter</A>(const DwString&amp; aStr,
+ DwMessageComponent* aParent);
+ static DwParameter* (*<A HREF="param.html#sNewParameter">sNewParameter</A>)(const DwString&amp;, DwMessageComponent*);
+
+public:
+
+ virtual void <A HREF="param.html#PrintDebugInfo">PrintDebugInfo</A>(ostream&amp; aStrm, int aDepth=0) const;
+ virtual void <A HREF="param.html#CheckInvariants">CheckInvariants</A>() const;
+
+protected:
+
+ void _PrintDebugInfo(ostream&amp; aStrm) const;
+};
+</PRE>
+<H2>
+ <FONT COLOR="navy"> DESCRIPTION </FONT>
+</H2>
+<P>
+<B><TT>DwParameter</TT></B> represents the <I>parameter</I> component of
+the Content-Type header field as described in RFC-2045. A parameter consists
+of an attribute/value pair. <B><TT>DwParameter</TT></B> has member functions
+for getting or setting a parameter's attribute and value.
+<P>
+A <B><TT>DwParameter</TT></B> object may be included in a list of
+<B><TT>DwParameter</TT></B> objects. You can get the next
+<B><TT>DwParameter</TT></B> object in the list by calling the member function
+<B><TT>Next()</TT></B>.
+<H2>
+ <FONT COLOR="navy"> Public Member Functions </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> <A NAME="DwParameter">DwParameter</A>() <BR>
+DwParameter(const DwParameter&amp; aParam) <BR>
+DwParameter(const DwString&amp; aStr, DwMessageComponent* aParent=0)
+</B></FONT>
+<P>
+The first constructor is the default constructor, which sets the
+<B><TT>DwParameter</TT></B> object's string representation to the empty string
+and sets its parent to NULL.
+<P>
+The second constructor is the copy constructor, which copies the string
+representation, attribute, and value from <B><TT>aParam</TT></B>. The parent
+of the new <B><TT>DwParameter</TT></B> object is set to NULL.
+<P>
+The third constructor copies <B><TT>aStr</TT></B> to the
+<B><TT>DwParameter</TT></B> object's string representation and sets
+<B><TT>aParent</TT></B> as its parent. The virtual member function
+<B><TT>Parse()</TT></B> should be called immediately after this constructor
+in order to parse the string representation. Unless it is NULL,
+<B><TT>aParent</TT></B> should point to an object of a class derived from
+<B><TT>DwMediaType</TT></B>.
+<P>
+<FONT COLOR="teal"><B> const DwParameter&amp; <A NAME="op_eq">operator =</A>
+(const DwParameter&amp; aParam) </B></FONT>
+<P>
+This is the assignment operator.
+<P>
+<FONT COLOR="teal"><B> virtual void <A NAME="Parse">Parse</A>() </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+executes the parse method for <B><TT>DwParameter</TT></B> objects. It should
+be called immediately after the string representation is modified and before
+the parts of the broken-down representation are accessed.
+<P>
+<FONT COLOR="teal"><B> virtual void <A NAME="Assemble">Assemble</A>()
+</B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+executes the assemble method for <B><TT>DwParameter</TT></B> objects. It
+should be called whenever one of the object's attributes is changed in order
+to assemble the string representation from its broken-down representation.
+It will be called automatically for this object by the parent object's
+<B><TT>Assemble()</TT></B> member function if the is-modified flag is set.
+<P>
+<FONT COLOR="teal"><B> virtual DwMessageComponent*
+<A NAME="Clone">Clone</A>() const </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+creates a new <B><TT>DwParameter</TT></B> on the free store that has the
+same value as this <B><TT>DwParameter</TT></B> object. The basic idea is
+that of a ``virtual copy constructor.''
+<P>
+<FONT COLOR="teal"><B> const DwString&amp;
+<A NAME="Attribute">Attribute</A>() const </B></FONT>
+<P>
+Returns the attribute contained by this parameter.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="SetAttribute">SetAttribute</A>(const
+DwString&amp; aAttribute) </B></FONT>
+<P>
+Sets the attribute contained by this parameter.
+<P>
+<FONT COLOR="teal"><B> const DwString&amp; <A NAME="Value">Value</A>() const
+</B></FONT>
+<P>
+Returns the value contained by this parameter.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="SetValue">SetValue</A>(const DwString&amp;
+aValue) </B></FONT>
+<P>
+Sets the value contained by this parameter.
+<P>
+<FONT COLOR="teal"><B> DwParameter* <A NAME="Next">Next</A>() const
+</B></FONT>
+<P>
+Returns the next <B><TT>DwParameter</TT></B> object in the list.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="SetNext">SetNext</A>(DwParameter* aParam)
+</B></FONT>
+<P>
+Returns the next <B><TT>DwParameter</TT></B> object in the list. Since
+<B><TT>DwMediaType</TT></B> has member functions for adding
+<B><TT>DwParameter</TT></B> objects to its list, you should avoid using this
+function.
+<P>
+<FONT COLOR="teal"><B> static DwParameter*
+<A NAME="NewParameter">NewParameter</A>(const DwString&amp; aStr,
+DwMessageComponent* aParent) </B></FONT>
+<P>
+Creates a new <B><TT>DwParameter</TT></B> object on the free store. If the
+static data member <B><TT>sNewParameter</TT></B> is NULL, this member function
+will create a new <B><TT>DwParameter</TT></B> and return it. Otherwise,
+<B><TT>NewParameter()</TT></B> will call the user-supplied function pointed
+to by <B><TT>sNewParameter</TT></B>, which is assumed to return an object
+from a class derived from <B><TT>DwParameter</TT></B>, and return that object.
+<P>
+<FONT COLOR="teal"><B> virtual void
+<A NAME="PrintDebugInfo">PrintDebugInfo</A>(ostream&amp; aStrm, int aDepth=0)
+const </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+prints debugging information about this object to <B><TT>aStrm</TT></B>.
+It will also call <B><TT>PrintDebugInfo()</TT></B> for any of its child
+components down to a level of <B><TT>aDepth</TT></B>.
+<P>
+This member function is available only in the debug version of the library.
+<P>
+<FONT COLOR="teal"><B> virtual void
+<A NAME="CheckInvariants">CheckInvariants</A>() const </B></FONT>
+<P>
+Aborts if one of the invariants of the object fails. Use this member function
+to track down bugs.
+<P>
+This member function is available only in the debug version of the library.
+<H2>
+ <FONT COLOR="navy"> Public Data Members </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> static DwParameter*
+(*<A NAME="sNewParameter">sNewParameter</A>)(const DwString&amp;,
+DwMessageComponent*) </B></FONT>
+<P>
+If <B><TT>sNewParameter</TT></B> is not NULL, it is assumed to point to a
+user-supplied function that returns an object from a class derived from
+<B><TT>DwParameter</TT></B>.
+</BODY></HTML>
diff --git a/mimelib/doc/pop.html b/mimelib/doc/pop.html
new file mode 100644
index 000000000..5bb4ed67c
--- /dev/null
+++ b/mimelib/doc/pop.html
@@ -0,0 +1,286 @@
+<HTML>
+<HEAD>
+ <TITLE> DwPopClient Man Page </TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<H2>
+ <FONT COLOR="navy"> NAME </FONT>
+</H2>
+<P>
+DwPopClient -- Class for handling the client side of a POP session
+<H2>
+ <FONT COLOR="navy"> SYNOPSIS </FONT>
+</H2>
+<PRE>class DW_EXPORT DwPopClient : public <A HREF="protocol.html">DwProtocolClient</A> {
+
+public:
+
+ enum {
+ kCmdNoCommand=0,
+ kCmdUser,
+ kCmdPass,
+ kCmdQuit,
+ kCmdStat,
+ kCmdList,
+ kCmdRetr,
+ kCmdDele,
+ kCmdNoop,
+ kCmdRset,
+ kCmdApop,
+ kCmdTop,
+ kCmdUidl
+ };
+ <A HREF="pop.html#DwPopClient">DwPopClient</A>();
+ virtual ~DwPopClient();
+ virtual int <A HREF="pop.html#Open">Open</A>(const char* aServer, DwUint16 aPort=110);
+ DwObserver* <A HREF="pop.html#SetObserver">SetObserver</A>(DwObserver* aObserver);
+ int <A HREF="pop.html#StatusCode">StatusCode</A>() const;
+ const DwString&amp; <A HREF="pop.html#SingleLineResponse">SingleLineResponse</A>() const;
+ const DwString&amp; <A HREF="pop.html#MultiLineResponse">MultiLineResponse</A>() const;
+ int <A HREF="pop.html#User">User</A>(const char* aName);
+ int Pass(const char* a<A HREF="pop.html#Pass">Pass</A>wd);
+ int <A HREF="pop.html#Quit">Quit</A>();
+ int <A HREF="pop.html#Stat">Stat</A>();
+ int <A HREF="pop.html#List">List</A>();
+ int <A HREF="pop.html#List">List</A>(int aMsg);
+ int <A HREF="pop.html#Retr">Retr</A>(int aMsg);
+ int <A HREF="pop.html#Dele">Dele</A>(int aMsg);
+ int <A HREF="pop.html#Noop">Noop</A>();
+ int <A HREF="pop.html#Rset">Rset</A>();
+ int <A HREF="pop.html#Apop">Apop</A>(const char* aName, const char* aDigest);
+ int <A HREF="pop.html#Top">Top</A>(int aMsg, int aNumLines);
+ int <A HREF="pop.html#Uidl">Uidl</A>();
+ int <A HREF="pop.html#Uidl">Uidl</A>(int aMsg);
+};
+</PRE>
+<H2>
+ <FONT COLOR="navy"> DESCRIPTION </FONT>
+</H2>
+<P>
+<B><TT>DwPopClient</TT></B> is a class that handles the client side of a
+POP session. Specifically, <B><TT>DwPopClient</TT></B> provides facilities
+for opening a connection to a POP server, sending commands to the server,
+receiving responses from the server, and closing the connection. The protocol
+implemented is the Post Office Protocol version 3, as specified in RFC-1939.
+<P>
+<B><TT>DwPopClient</TT></B> is derived from
+<B><TT><A HREF="protocol.html">DwProtocolClient</A></TT></B>. For information
+about inherited member functions, especially member functions for detecting
+failures or errors, see the man page for
+<B><TT>DwProtocolClient</TT></B>.
+<P>
+In a POP session, the client sends commands to the server and receives responses
+from the server. A client command consists of a command word and zero or
+more argument words. A server response consists of a single line status response,
+which may be followed immediately by a multi-line response. The first word
+of the status response is either +OK or -ERR, indicating the success or failure
+of the command. The status line may also contain other information requested
+by the client.
+<P>
+<B><TT>DwPopClient</TT></B> has only a default constructor. On Win32 platforms,
+it is possible for the constructor to fail. (It calls WSAStartup().) You
+should verify that the constructor succeeded by calling the inherited member
+function <B><TT>DwProtocolClient::LastError()</TT></B> and checking for a
+zero return value.
+<P>
+To open a connection to the server, call the member function
+<B><TT>Open()</TT></B> with the name of the server as an argument.
+<B><TT>Open()</TT></B> accepts an optional argument that specifies the TCP
+port that the server listens to. The default port is the standard POP port
+(110). <B><TT>Open()</TT></B> may fail, so you should check the return value
+to verify that it succeeded. To close the connection, call the inherited
+member function <B><TT>DwProtocolClient::Close()</TT></B>. To check if a
+connection is open, call the inherited member function
+<B><TT>DwProtocolClient::IsOpen()</TT></B>. <B><TT>IsOpen()</TT></B> returns
+a boolean value that indicates whether or not a call to
+<B><TT>Open()</TT></B> was successful; it will not detect failure in the
+network or a close operation by the remote host.
+<P>
+For each POP command, <B><TT>DwPopClient</TT></B> has a member function that
+sends that command and receives the server's response. If the command takes
+any arguments, then those arguments are passed as function arguments to the
+command function. The command functions return the first character of the
+server's response, which will be '+' if the command succeeded or '-' if the
+command failed. In some cases, because of a communications error or some
+other error, it is not possible for the command function to send the command
+or receive the response. When this happens, the command function will return
+0. You can determine the precise error or failure by calling the inherited
+member functions <B><TT>DwProtocolClient::LastError()</TT></B> or
+<B><TT>DwProtocolClient::LastFailure()</TT></B>.
+<P>
+After each command is sent, <B><TT>DwPopClient</TT></B> receives the server's
+response and remembers it. The member function
+<B><TT>StatusCode()</TT></B> returns the first character of the server's
+status response; it will be '+' or '-', indicating success or failure, or
+zero if no response was received from the server.
+<B><TT>SingleLineResponse()</TT></B> returns the entire single line status
+response from the server, including the initial "+OK" or "-ERR" status word.
+<P>
+The server sends a single-line response, including a status code, for all
+POP commands. For some commands, such as when the client requests a mail
+message, the server sends a multi-line text response immediately following
+the single-line status response. Multi-line text responses can be received
+in either of two ways. The simplest way is to call the member function
+<B><TT>MultiLineResponse()</TT></B> after a command completes successfully.
+This simple method works fine for non-interactive applications. It can be
+a problem in interactive applications, however, because there is no data
+to display to a user until the entire multi-line response is retrieved. An
+alternative method allows your program to retrieve the multi-line response
+one line at a time as it is received. To use this method, you must define
+a subclass of <B><TT>DwObserver</TT></B> and assign an object of that class
+to the <B><TT>DwPopClient</TT></B> object using the member function
+<B><TT>SetObserver()</TT></B>. <B><TT>DwObserver</TT></B> is an abstract
+class, declared in protocol.h, that has just one pure virtual member function
+<B><TT>Notify()</TT></B>. After each line of the multi-line response is received,
+<B><TT>DwPopClient</TT></B> will call the <B><TT>Notify()</TT></B> member
+function of its assigned <B><TT>DwObserver</TT></B> object. Each invocation
+of <B><TT>Notify()</TT></B> should call the <B><TT>DwPopClient</TT></B> member
+function <B><TT>MultiLineResponse()</TT></B> to retrieve the next line of
+the text response. Note that you cannot use both of these methods at the
+same time: if an observer is assigned,
+<B><TT>MultiLineResponse()</TT></B> returns only the last line received,
+not the entire multi-line response.
+<H2>
+ <FONT COLOR="navy"> Public Member Functions </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> <A NAME="DwPopClient">DwPopClient</A>() </B></FONT>
+<P>
+Initializes the <B><TT>DwPopClient</TT></B> object. It is possible for the
+constructor to fail. To verify that the constructor succeeded, call the member
+function <B><TT>LastError()</TT></B> and check that it returns zero. (In
+the Win32 implementation, the constructor calls the Winsock function
+<B><TT>WSAStartup()</TT></B>, which may fail.)
+<P>
+<FONT COLOR="teal"><B> virtual int <A NAME="Open">Open</A>(const char* aServer,
+DwUint16 aPort=110) </B></FONT>
+<P>
+Opens a TCP connection to the server <B><TT>aServer</TT></B> at port
+<B><TT>aPort</TT></B>. <B><TT>aServer</TT></B> may be either a host name,
+such as "news.acme.com" or an IP number in dotted decimal format, such as
+"147.81.64.60". The default value for <B><TT>aPort</TT></B> is 110, the
+well-known port for POP3 assigned by the Internet Assigned Numbers Authority
+(IANA).
+<P>
+If the connection attempt succeeds, the server sends a response.
+<B><TT>Open()</TT></B> returns the server's status code ('+' or '-'). The
+full response from the server can be retrieved by calling
+<B><TT>SingleLineResponse()</TT></B>.
+<P>
+If the connection attempt fails, <B><TT>Open()</TT></B> returns 0. To determine
+what error occurred when a connection attempt fails, call the inherited member
+function <B><TT>DwProtocolClient::LastError()</TT></B>. To determine if a
+failure also occurred, call the inherited member function
+<B><TT>DwProtocolClient::LastFailure()</TT></B>.
+<P>
+<FONT COLOR="teal"><B> DwObserver*
+<A NAME="SetObserver">SetObserver</A>(DwObserver* aObserver) </B></FONT>
+<P>
+Sets the observer object that interacts with the
+<B><TT>DwPopClient</TT></B> object to retrieve a multi-line response. If
+an observer is set, <B><TT>DwPopClient</TT></B> will call the observer's
+<B><TT>Notify()</TT></B> method after each line of the multi-line response
+is received. To remove an observer, call <B><TT>SetObserver()</TT></B> with
+a NULL argument. <B><TT>SetObserver()</TT></B> returns the previously set
+observer, or NULL if no observer was previously set.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="StatusCode">StatusCode</A>() const
+</B></FONT>
+<P>
+Returns the status code received from the server in response to the last
+client command. The status codes in POP3 are '+', indicating success, and
+'-', indicating failure. If no response was received,
+<B><TT>StatusCode()</TT></B> returns zero.
+<P>
+<FONT COLOR="teal"><B> const DwString&amp;
+<A NAME="SingleLineResponse">SingleLineResponse</A>() const </B></FONT>
+<P>
+Returns the single line status response last received from the server. If
+no response was received, perhaps because of a communications failure,
+<B><TT>SingleLineResponse()</TT></B> returns an empty string.
+<P>
+<FONT COLOR="teal"><B> const DwString&amp;
+<A NAME="MultiLineResponse">MultiLineResponse</A>() const </B></FONT>
+<P>
+If no observer is set for this object,
+<B><TT>MultiLineResponse()</TT></B> returns a string that comprises the entire
+sequence of lines received from the server. Otherwise, if an observer
+<I>is</I> set for this object, <B><TT>MultiLineResponse()</TT></B> returns
+only the most recent line received.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="User">User</A>(const char* aName)
+</B></FONT>
+<P>
+Sends the USER command and returns the status code received from the server.
+If no response is received, the function returns zero.
+<B><TT>aName</TT></B> is the name of the user, which is sent in the command.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="Pass">Pass</A>(const char* aPasswd)
+</B></FONT>
+<P>
+Sends the PASS command and returns the status code received from the server.
+If no response is received, the function returns zero.
+<B><TT>aPasswd</TT></B> is the password, which is sent in the command.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="Quit">Quit</A>() </B></FONT>
+<P>
+Sends the QUIT command and returns the status code received from the server.
+If no response is received, the function returns zero.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="Stat">Stat</A>() </B></FONT>
+<P>
+Sends the STAT command and returns the status code received from the server.
+If no response is received, the function returns zero.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="List">List</A>() <BR>
+int List(int aMsg) </B></FONT>
+<P>
+Sends the LIST command, with or without a message number, and returns the
+status code received from the server. If no response is received, the function
+returns zero.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="Retr">Retr</A>(int aMsg) </B></FONT>
+<P>
+Sends the RETR command and returns the status code received from the server.
+If no response is received, the function returns zero.
+<B><TT>aMsg</TT></B> is the message number, which is sent in the command.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="Dele">Dele</A>(int aMsg) </B></FONT>
+<P>
+Sends the DELE command and returns the status code received from the server.
+If no response is received, the function returns zero.
+<B><TT>aMsg</TT></B> is the message number, which is sent in the command.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="Noop">Noop</A>() </B></FONT>
+<P>
+Sends the NOOP command and returns the status code received from the server.
+If no response is received, the function returns zero.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="Rset">Rset</A>() </B></FONT>
+<P>
+Sends the RSET command and returns the status code received from the server.
+If no response is received, the function returns zero.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="Apop">Apop</A>(const char* aName, const
+char* aDigest) </B></FONT>
+<P>
+Sends the APOP command and returns the status code received from the server.
+If no response is received, the function returns zero.
+<B><TT>aName</TT></B> is the name of the user, which is sent in the command.
+<B><TT>aDigest</TT></B> is the digest argument for the command.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="Top">Top</A>(int aMsg, int aNumLines)
+</B></FONT>
+<P>
+Sends the TOP command and returns the status code received from the server.
+If no response is received, the function returns zero.
+<B><TT>aMsg</TT></B> is the message number. <B><TT>aNumLines</TT></B> is
+the number of lines to send.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="Uidl">Uidl</A>() <BR>
+int Uidl(int aMsg) </B></FONT>
+<P>
+Sends the TOP command, with or without a message number, and returns the
+status code received from the server. If no response is received, the function
+returns zero.
+</BODY></HTML>
diff --git a/mimelib/doc/protocol.html b/mimelib/doc/protocol.html
new file mode 100644
index 000000000..28bb81db6
--- /dev/null
+++ b/mimelib/doc/protocol.html
@@ -0,0 +1,274 @@
+<HTML>
+<HEAD>
+ <TITLE> DwProtocolClient Man Page </TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<H2>
+ <FONT COLOR="navy"> NAME </FONT>
+</H2>
+<P>
+DwProtocolClient -- Base class for all protocol clients
+<H2>
+ <FONT COLOR="navy"> SYNOPSIS </FONT>
+</H2>
+<PRE>class DW_EXPORT DwProtocolClient {
+
+public:
+
+ enum Failure {
+ kFailNoFailure = 0, // No failure
+ kFailNoWinsock = 1, // A usable Winsock DLL could not be found
+ kFailNetDown = 2, // The network is down
+ kFailHostNotFound = 3, // The server was not found
+ kFailConnReset = 4, // The connection was reset
+ kFailNetUnreachable = 5, // The network is unreachable
+ kFailTimedOut = 6, // Timed out while waiting for an operation
+ // to complete
+ kFailConnDropped = 7,
+ kFailConnRefused = 8,
+ kFailNoResources = 9
+ };
+
+ enum Error {
+ kErrNoError = 0,
+ kErrUnknownError = 0x4000,
+ kErrBadParameter = 0x4001,
+ kErrBadUsage = 0x4002,
+ kErrNoWinsock = 0x4003, // Win32
+ kErrHostNotFound = 0x5000, // UNIX
+ kErrTryAgain = 0x5001, // UNIX
+ kErrNoRecovery = 0x5002, // UNIX
+ kErrNoData = 0x5003, // UNIX
+ kErrNoAddress = 0x5004, // UNIX
+ };
+
+protected:
+
+ <A HREF="protocol.html#DwProtocolClient">DwProtocolClient</A>();
+
+public:
+
+ virtual <A HREF="protocol.html#~DwProtocolClient">~DwProtocolClient</A>();
+ virtual int <A HREF="protocol.html#Open">Open</A>(const char* aServer, DwUint16 aPort);
+ DwBool <A HREF="protocol.html#IsOpen">IsOpen</A>() const;
+ int <A HREF="protocol.html#Close">Close</A>();
+ int <A HREF="protocol.html#SetReceiveTimeout">SetReceiveTimeout</A>(int aSecs);
+ int <A HREF="protocol.html#LastCommand">LastCommand</A>() const;
+ int <A HREF="protocol.html#LastFailure">LastFailure</A>() const;
+ const char* <A HREF="protocol.html#LastFailureStr">LastFailureStr</A>() const;
+ int <A HREF="protocol.html#LastError">LastError</A>() const;
+ const char* <A HREF="protocol.html#LastErrorStr">LastErrorStr</A>() const;
+
+protected:
+
+ enum {
+ kWSAStartup=1, // Win32
+ kgethostbyname,
+ ksocket,
+ ksetsockopt,
+ kconnect,
+ ksend,
+ krecv,
+ kclose, // UNIX
+ kclosesocket, // Win32
+ kselect
+ };
+ DwBool mIsDllOpen;
+ DwBool mIsOpen;
+ SOCKET mSocket;
+ DwUint16 mPort;
+ char* mServerName;
+ int mReceiveTimeout;
+ int mLastCommand;
+ int mFailureCode;
+ const char* mFailureStr;
+ int mErrorCode;
+ const char* mErrorStr;
+ virtual void <A HREF="protocol.html#HandleError">HandleError</A>(int aErrorCode, int aSystemCall);
+ int <A HREF="protocol.html#PSend">PSend</A>(const char* aBuf, int aBufLen);
+ int <A HREF="protocol.html#PReceive">PReceive</A>(char* aBuf, int aBufSize);
+};
+</PRE>
+<H2>
+ <FONT COLOR="navy"> DESCRIPTION </FONT>
+</H2>
+<P>
+<B><TT>DwProtocolClient</TT></B> is the base class for other classes that
+implement specific protocols, such as SMTP, POP, and NNTP.
+<B><TT>DwProtocolClient</TT></B> serves two purposes. First, It combines
+operations common to all its derived classes, such as opening a TCP connection
+to the server. Second, it provides a platform-independent interface to the
+network services required by its subclasses.
+<P>
+There are two separate implementations of
+<B><TT>DwProtocolClient</TT></B>: one for Berkeley sockets under UNIX, and
+one for Winsock under Win32. The interface is the same for both implementations,
+thus providing platform independence.
+<P>
+There are two platform-specific details that you should be aware of. First,
+if you are writing a UNIX program, you should be sure to handle the SIGPIPE
+signal. This signal is raised when a program tries to write to a TCP connection
+that was shutdown by the remote host. The default action for this signal
+is to terminate the program. To prevent this from happening in your program,
+you should either catch the signal or tell the operating system to ignore
+it. Second, if you are writing a Win32 application for Windows NT or Windows95,
+you should be aware of the fact that the constructor calls the Winsock function
+<B><TT>WSAStartup()</TT></B> to initialize the Winsock DLL. (The destructor
+calls <B><TT>WSACleanup()</TT></B>.) Because it is possible for
+<B><TT>WSAStartup()</TT></B> to fail, it is also possible that the constructor
+may fail. To verify that the constructor has succeeded, call the member function
+<B><TT>LastError()</TT></B> and check that it returns zero.
+<P>
+To open a connection to a server, call <B><TT>Open()</TT></B> with the server
+name and TCP port number as arguments. <B><TT>Open()</TT></B> is declared
+virtual; derived classes may override this member function.
+<B><TT>Open()</TT></B> may fail, so you should check the return value to
+verify that it succeeded. To close the connection, call
+<B><TT>Close()</TT></B>. To check if a connection is open, call
+<B><TT>IsOpen()</TT></B>. <B><TT>IsOpen()</TT></B> returns a value that indicates
+whether or not a call to <B><TT>Open()</TT></B> was successful; it will not
+detect failure in the network or a close operation by the remote host.
+<P>
+<B><TT>DwProtocolClient</TT></B> sets a timeout on receive operations on
+the TCP connection. The default value of the timeout period is 90 seconds.
+To change the default value, call <B><TT>SetReceiveTimeout()</TT></B> and
+pass the new value as an argument.
+<P>
+Whenever <B><TT>DwProtocolClient</TT></B> cannot complete an operation, it
+is because an error has occurred. Most member functions indicate that an
+error has occurred via their return values. For most member functions, a
+return value of -1 indicates an error. To get the specific error that has
+occurred, call <B><TT>LastError()</TT></B>, which returns either the system
+error code or a MIME++ defined error code. To get a text string that describes
+the error, call <B><TT>LastErrorStr()</TT></B>.
+<P>
+Some errors are also considered "failures." A failure occurs when an operation
+cannot be completed because of conditions external to the program. For example,
+a failure occurs when the network is down or when an application's user enters
+bad input. Errors that occur because of programmer error are not considered
+failures. If an error occurs, you should call <B><TT>LastError()</TT></B>
+to determine the error, but you should also call
+<B><TT>LastFailure()</TT></B> to determine if a failure occurred. In interactive
+applications, failures should always be reported to the application's user.
+To get a text string that describes a failure, call
+<B><TT>LastFailureStr()</TT></B>.
+<P>
+It is possible to translate the error and failure message strings to a language
+other than English. To do this, you may override the virtual function
+<B><TT>HandleError()</TT></B>.
+<H2>
+ <FONT COLOR="navy"> Public Member Functions </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> virtual
+<A NAME="~DwProtocolClient">~DwProtocolClient</A>() </B></FONT>
+<P>
+Frees the resources used by this object. In a Win32 environment, the destructor
+calls <B><TT>WSACleanup()</TT></B>.
+<P>
+<FONT COLOR="teal"><B> virtual int <A NAME="Open">Open</A>(const char* aServer,
+DwUint16 aPort) </B></FONT>
+<P>
+Opens a TCP connection to the server <B><TT>aServer</TT></B> at port
+<B><TT>aPort</TT></B>. <B><TT>aServer</TT></B> may be either a host name,
+such as "smtp.acme.com" or an IP number in dotted decimal format, such as
+"147.81.64.59". If the connection attempt succeeds,
+<B><TT>Open()</TT></B> returns 0; othewise, it returns -1. To determine what
+error occurred when the connection attempt fails, call the member function
+<B><TT>LastError()</TT></B>. To determine if a failure also occurred, call
+the member function <B><TT>LastFailure()</TT></B>.
+<P>
+<FONT COLOR="teal"><B> DwBool <A NAME="IsOpen">IsOpen</A>() const </B></FONT>
+<P>
+Returns true value if a connection to the server is open.
+<B><TT>IsOpen()</TT></B> will return a true value if a call to
+<B><TT>Open()</TT></B> was successful; it will not detect failure in the
+network or a close operation by the remote host.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="Close">Close</A>() </B></FONT>
+<P>
+Closes the connection to the server. Returns 0 if successful, or returns
+-1 if unsuccessful.
+<P>
+<FONT COLOR="teal"><B> int
+<A NAME="SetReceiveTimeout">SetReceiveTimeout</A>(int aSecs) </B></FONT>
+<P>
+Changes the default timeout for receive operations on the socket to
+<B><TT>aSecs</TT></B> seconds. The default value is 90 seconds.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="LastCommand">LastCommand</A>() const
+</B></FONT>
+<P>
+Returns an enumerated value indicating the last command sent to the server.
+Enumerated values are defined in subclasses of
+<B><TT>DwProtocolClient</TT></B>.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="LastFailure">LastFailure</A>() const
+</B></FONT>
+<P>
+Returns an enumerated value indicating what failure last occurred.
+<P>
+<FONT COLOR="teal"><B> const char*
+<A NAME="LastFailureStr">LastFailureStr</A>() const </B></FONT>
+<P>
+Returns a failure message string associated with the failure code returned
+by <B><TT>LastFailure()</TT></B>.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="LastError">LastError</A>() const
+</B></FONT>
+<P>
+Returns an error code for the last error that occurred. Normally, the error
+code returned is an error code returned by a system call;
+<B><TT>DwProtocolClient</TT></B> does no translation of error codes returned
+by system calls. In some cases, an error code defined by MIME++ may returned
+to indicate improper use of the <B><TT>DwProtocolClient</TT></B> class.
+<P>
+<FONT COLOR="teal"><B> const char* <A NAME="LastErrorStr">LastErrorStr</A>()
+const </B></FONT>
+<P>
+Returns an error message string associated with the error code returned by
+<B><TT>LastError()</TT></B>.
+<H2>
+ <FONT COLOR="navy"> Protected Member Functions </FONT>
+</H2>
+<P>
+<B><FONT COLOR="teal"> <A NAME="DwProtocolClient">DwProtocolClient</A>()
+</FONT></B>
+<P>
+Initializes the <B><TT>DwProtocolClient</TT></B> object. In a Win32 environment,
+this constructor calls <B><TT>WSAStartup()</TT></B> to initialize the Winsock
+DLL. To verify that the DLL was initialized successfully, call the member
+function <B><TT>LastError()</TT></B> and verify that it returns zero.
+<P>
+<B><FONT COLOR="teal"> virtual void <A NAME="HandleError">HandleError</A>(int
+aErrorCode, int aSystemCall) </FONT></B>
+<P>
+Interprets error codes. <B><TT>aErrorCode</TT></B> is an error code, which
+may be a system error code, or an error code defined by
+<B><TT>DwProtocolClient</TT></B>. <B><TT>aSystemCall</TT></B> is an enumerated
+value defined by <B><TT>DwProtocolClient</TT></B> that indicates the last
+system call made, which should be the system call that set the error code.
+<B><TT>HandleError()</TT></B> sets values for <B><TT>mErrorStr</TT></B>,
+<B><TT>mFailureCode</TT></B>, and <B><TT>mFailureStr</TT></B>.
+<P>
+<B><FONT COLOR="teal"> int <A NAME="PSend">PSend</A>(const char* aBuf, int
+aBufLen) </FONT></B>
+<P>
+Sends <B><TT>aBufLen</TT></B> characters from the buffer
+<B><TT>aBuf</TT></B>. Returns the number of characters sent. If the number
+of characters sent is less than the number of characters specified in
+<B><TT>aBufLen</TT></B>, the caller should call
+<B><TT>LastError()</TT></B> to determine what, if any, error occurred. To
+determine if a failure also occurred, call the member function
+<B><TT>LastFailure()</TT></B>.
+<P>
+<B><FONT COLOR="teal"> int <A NAME="PReceive">PReceive</A>(char* aBuf, int
+aBufSize) </FONT></B>
+<P>
+Receives up to <B><TT>aBufSize</TT></B> characters into the buffer
+<B><TT>aBuf</TT></B>. Returns the number of characters received. If zero
+is returned, the caller should call the member function
+<B><TT>LastError()</TT></B> to determine what, if any, error occurred. To
+determine if a failure also occurred, call the member function
+<B><TT>LastFailure()</TT></B>.
+</BODY></HTML>
diff --git a/mimelib/doc/string.html b/mimelib/doc/string.html
new file mode 100644
index 000000000..80db3700c
--- /dev/null
+++ b/mimelib/doc/string.html
@@ -0,0 +1,717 @@
+<HTML>
+<HEAD>
+ <TITLE> DwString Man Page </TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<H2>
+ <FONT COLOR="navy"> NAME </FONT>
+</H2>
+<P>
+DwString -- String class
+<H2>
+ <FONT COLOR="navy"> SYNOPSIS </FONT>
+</H2>
+<PRE>class DW_EXPORT DwString {
+
+public:
+
+ static const size_t <A HREF="string.html#npos">npos</A>;
+ <A HREF="string.html#DwString">DwString</A>();
+ <A HREF="string.html#DwString">DwString</A>(const DwString&amp; aStr, size_t aPos=0, size_t aLen=npos);
+ <A HREF="string.html#DwString">DwString</A>(const char* aBuf, size_t aLen);
+ <A HREF="string.html#DwString">DwString</A>(const char* aCstr);
+ <A HREF="string.html#DwString">DwString</A>(size_t aLen, char aChar);
+ <A HREF="string.html#DwString">DwString</A>(char* aBuf, size_t aSize, size_t aStart, size_t aLen);
+ virtual ~DwString();
+ DwString&amp; <A HREF="string.html#op_eq">operator =</A> (const DwString&amp; aStr);
+ DwString&amp; <A HREF="string.html#op_eq">operator =</A> (const char* aCstr);
+ DwString&amp; <A HREF="string.html#op_eq">operator =</A> (char aChar);
+ size_t <A HREF="string.html#size">size</A>() const;
+ size_t <A HREF="string.html#length">length</A>() const;
+ size_t <A HREF="string.html#max_size">max_size</A>() const;
+ void <A HREF="string.html#resize">resize</A>(size_t aLen, char aChar);
+ void <A HREF="string.html#resize">resize</A>(size_t aLen);
+ size_t <A HREF="string.html#capacity">capacity</A>() const;
+ void <A HREF="string.html#reserve">reserve</A>(size_t aSize);
+ void <A HREF="string.html#clear">clear</A>();
+ DwBool <A HREF="string.html#empty">empty</A>() const;
+ const char&amp; <A HREF="string.html#op_brackets">operator []</A> (size_t aPos) const;
+ char&amp; <A HREF="string.html#op_brackets">operator []</A> (size_t aPos);
+ const char&amp; <A HREF="string.html#at">at</A>(size_t aPos) const;
+ char&amp; <A HREF="string.html#at">at</A>(size_t aPos);
+ DwString&amp; <A HREF="string.html#op_plus_eq">operator +=</A> (const DwString&amp; aStr);
+ DwString&amp; <A HREF="string.html#op_plus_eq">operator +=</A> (const char* aCstr);
+ DwString&amp; <A HREF="string.html#op_plus_eq">operator +=</A> (char aChar);
+ DwString&amp; <A HREF="string.html#append">append</A>(const DwString&amp; aStr);
+ DwString&amp; <A HREF="string.html#append">append</A>(const DwString&amp; aStr, size_t aPos, size_t aLen);
+ DwString&amp; <A HREF="string.html#append">append</A>(const char* aBuf, size_t aLen);
+ DwString&amp; <A HREF="string.html#append">append</A>(const char* aCstr);
+ DwString&amp; <A HREF="string.html#append">append</A>(size_t aLen, char aChar);
+ DwString&amp; <A HREF="string.html#assign">assign</A>(const DwString&amp; aStr);
+ DwString&amp; <A HREF="string.html#assign">assign</A>(const DwString&amp; aStr, size_t aPos, size_t aLen);
+ DwString&amp; <A HREF="string.html#assign">assign</A>(const char* aBuf, size_t aLen);
+ DwString&amp; <A HREF="string.html#assign">assign</A>(const char* aCstr);
+ DwString&amp; <A HREF="string.html#assign">assign</A>(size_t aLen, char aChar);
+ DwString&amp; <A HREF="string.html#insert">insert</A>(size_t aPos1, const DwString&amp; aStr);
+ DwString&amp; <A HREF="string.html#insert">insert</A>(size_t aPos1, const DwString&amp; aStr, size_t aPos2,
+ size_t aLen2);
+ DwString&amp; <A HREF="string.html#insert">insert</A>(size_t aPos1, const char* aBuf, size_t aLen2);
+ DwString&amp; <A HREF="string.html#insert">insert</A>(size_t aPos1, const char* aCstr);
+ DwString&amp; <A HREF="string.html#insert">insert</A>(size_t aPos1, size_t aLen2, char aChar);
+ DwString&amp; <A HREF="string.html#erase">erase</A>(size_t aPos=0, size_t aLen=npos);
+ DwString&amp; <A HREF="string.html#replace">replace</A>(size_t aPos1, size_t aLen1, const DwString&amp; aStr);
+ DwString&amp; <A HREF="string.html#replace">replace</A>(size_t aPos1, size_t aLen1, const DwString&amp; aStr,
+ size_t aPos2, size_t aLen2);
+ DwString&amp; <A HREF="string.html#replace">replace</A>(size_t aPos1, size_t aLen1, const char* aBuf,
+ size_t aLen2);
+ DwString&amp; <A HREF="string.html#replace">replace</A>(size_t aPos1, size_t aLen1, const char* aCstr);
+ DwString&amp; <A HREF="string.html#replace">replace</A>(size_t aPos1, size_t aLen1, size_t aLen2, char aChar);
+ size_t <A HREF="string.html#copy">copy</A>(char* aBuf, size_t aLen, size_t aPos=0) const;
+ void <A HREF="string.html#swap">swap</A>(DwString&amp; aStr);
+ const char* <A HREF="string.html#c_str">c_str</A>() const;
+ const char* <A HREF="string.html#data">data</A>() const;
+ size_t <A HREF="string.html#find">find</A>(const DwString&amp; aStr, size_t aPos=0) const;
+ size_t <A HREF="string.html#find">find</A>(const char* aBuf, size_t aPos, size_t aLen) const;
+ size_t <A HREF="string.html#find">find</A>(const char* aCstr, size_t aPos=0) const;
+ size_t <A HREF="string.html#find">find</A>(char aChar, size_t aPos=0) const;
+ size_t <A HREF="string.html#rfind">rfind</A>(const DwString&amp; aStr, size_t aPos=npos) const;
+ size_t <A HREF="string.html#rfind">rfind</A>(const char* aBuf, size_t aPos, size_t aLen) const;
+ size_t <A HREF="string.html#rfind">rfind</A>(const char* aCstr, size_t aPos=npos) const;
+ size_t <A HREF="string.html#rfind">rfind</A>(char aChar, size_t aPos=npos) const;
+ size_t <A HREF="string.html#find_first_of">find_first_of</A>(const DwString&amp; aStr, size_t aPos=0) const;
+ size_t <A HREF="string.html#find_first_of">find_first_of</A>(const char* aBuf, size_t aPos, size_t aLen) const;
+ size_t <A HREF="string.html#find_first_of">find_first_of</A>(const char* aCstr, size_t aPos=0) const;
+ size_t <A HREF="string.html#find_last_of">find_last_of</A>(const DwString&amp; aStr, size_t aPos=npos) const;
+ size_t <A HREF="string.html#find_last_of">find_last_of</A>(const char* aBuf, size_t aPos, size_t aLen) const;
+ size_t <A HREF="string.html#find_last_of">find_last_of</A>(const char* aCstr, size_t aPos=npos) const;
+ size_t <A HREF="string.html#find_first_not_of">find_first_not_of</A>(const DwString&amp; aStr, size_t aPos=0) const;
+ size_t <A HREF="string.html#find_first_not_of">find_first_not_of</A>(const char* aBuf, size_t aPos, size_t aLen) const;
+ size_t <A HREF="string.html#find_first_not_of">find_first_not_of</A>(const char* aCstr, size_t aPos=0) const;
+ size_t <A HREF="string.html#find_last_not_of">find_last_not_of</A>(const DwString&amp; aStr, size_t aPos=npos) const;
+ size_t <A HREF="string.html#find_last_not_of">find_last_not_of</A>(const char* aBuf, size_t aPos, size_t aLen) const;
+ size_t <A HREF="string.html#find_last_not_of">find_last_not_of</A>(const char* aCstr, size_t aPos=npos) const;
+ DwString <A HREF="string.html#substr">substr</A>(size_t aPos=0, size_t aLen=npos) const;
+ int <A HREF="string.html#compare">compare</A>(const DwString&amp; aStr) const;
+ int <A HREF="string.html#compare">compare</A>(size_t aPos1, size_t aLen1, const DwString&amp; aStr) const;
+ int <A HREF="string.html#compare">compare</A>(size_t aPos1, size_t aLen1, const DwString&amp; aStr,
+ size_t aPos2, size_t aLen2) const;
+ int <A HREF="string.html#compare">compare</A>(const char* aCstr) const;
+ int <A HREF="string.html#compare">compare</A>(size_t aPos1, size_t aLen1, const char* aBuf,
+ size_t aLen2=npos) const;
+ virtual const char* <A HREF="string.html#ClassName">ClassName</A>() const;
+ int <A HREF="string.html#ObjectId">ObjectId</A>() const;
+ void <A HREF="string.html#ConvertToLowerCase">ConvertToLowerCase</A>();
+ void <A HREF="string.html#ConvertToUpperCase">ConvertToUpperCase</A>();
+ void <A HREF="string.html#Trim">Trim</A>();
+ void <A HREF="string.html#WriteTo">WriteTo</A>(ostream&amp; aStrm) const;
+ int <A HREF="string.html#RefCount">RefCount</A>() const;
+ void <A HREF="string.html#TakeBuffer">TakeBuffer</A>(char* aBuf, size_t aSize, size_t aStart, size_t aLen);
+ void <A HREF="string.html#ReleaseBuffer">ReleaseBuffer</A>(char** aBuf, size_t* aSize, size_t* aStart, size_t* aLen);
+ void <A HREF="string.html#CopyTo">CopyTo</A>(DwString* aStr) const;
+
+protected:
+
+ DwStringRep* mRep;
+ size_t mStart;
+ size_t mLength;
+ void _copy();
+ void _replace(size_t aPos1, size_t aLen1, const char* aBuf, size_t aLen2);
+ void _replace(size_t aPos1, size_t aLen1, size_t aLen2, char aChar);
+ friend void mem_free(char*);
+
+public:
+
+ virtual void <A HREF="string.html#PrintDebugInfo">PrintDebugInfo</A>(ostream&amp; aStrm) const;
+ virtual void <A HREF="string.html#CheckInvariants">CheckInvariants</A>() const;
+};
+</PRE>
+<H2>
+ <FONT COLOR="navy"> DESCRIPTION </FONT>
+</H2>
+<P>
+<B><TT>DwString</TT></B> is the workhorse of the MIME++ library. Creating,
+parsing, or otherwise manipulating MIME messages is basically a matter of
+manipulating strings. <B><TT>DwString</TT></B> provides all the basic
+functionality required of a string object, including copying, comparing,
+concatenating, and so on.
+<P>
+<B><TT>DwString</TT></B> is similar to the <B><TT>string</TT></B> class that
+is part of the proposed ANSI standard C++ library. Some of the member functions
+present in the ANSI <B><TT>string</TT></B> are not present in
+<B><TT>DwString</TT></B>: mostly these are the functions that deal with
+iterators. <B><TT>DwString</TT></B> also includes some member functions and
+class utility functions that are not a part of the ANSI
+<B><TT>string</TT></B> class. These non-ANSI functions are easy to distinguish:
+they all begin with upper-case letters, and all ANSI functions begin with
+lower-case letters. The library classes themselves use only the ANSI
+<B><TT>string</TT></B> functions. At some point in the future, MIME++ will
+probably allow the option to substitute the ANSI <B><TT>string</TT></B> class
+for <B><TT>DwString</TT></B>.
+<P>
+<B><TT>DwString</TT></B> makes extensive use of copy-on-write, even when
+extracting substrings. It is this feature that distiguishes
+<B><TT>DwString</TT></B> from most other string classes.
+<B><TT>DwString</TT></B> also handles binary data, which can contain embedded
+NUL characters.
+<H2>
+ <FONT COLOR="navy"> Public Member Functions </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> <A NAME="DwString">DwString</A>() <BR>
+DwString(const DwString&amp; aStr, size_t aPos=0, size_t aLen=npos) <BR>
+DwString(const char* aBuf, size_t aLen) <BR>
+DwString(const char* aCstr) <BR>
+DwString(size_t aLen, char aChar) <BR>
+DwString(char* aBuf, size_t aSize, size_t aStart, size_t aLen) </B></FONT>
+<P>
+The first constructor is the default constructor, which sets the
+<B><TT>DwString</TT></B> object's contents to be empty.
+<P>
+The second constructor is the copy constructor, which copies at most
+<B><TT>aLen</TT></B> characters beginning at position
+<B><TT>aPos</TT></B> from <B><TT>aStr</TT></B> to the new
+<B><TT>DwString</TT></B> object. It will not copy more characters than what
+are available in <B><TT>aStr</TT></B>. <B><TT>aPos</TT></B> must be less
+than or equal to <B><TT>aStr.size()</TT></B>.
+<P>
+The third constructor copies <B><TT>aLen</TT></B> characters from the buffer
+<B><TT>aBuf</TT></B> into the new <B><TT>DwString</TT></B> object.
+<B><TT>aBuf</TT></B> need not be NUL-terminated and may contain NUL characters.
+<P>
+The fourth constructor copies the contents of the NUL-terminated string
+<B><TT>aCstr</TT></B> into the new <B><TT>DwString</TT></B> object.
+<P>
+The fifth constructor sets the contents of the new
+<B><TT>DwString</TT></B> object to be the character <B><TT>aChar</TT></B>
+repeated <B><TT>aLen</TT></B> times.
+<P>
+The sixth constructor is an <I>advanced</I> constructor that sets the contents
+of the new <B><TT>DwString</TT></B> object to the <B><TT>aLen</TT></B> characters
+starting at offset <B><TT>aStart</TT></B> in the buffer
+<B><TT>aBuf</TT></B>. <B><TT>aSize</TT></B> is the allocated size of
+<B><TT>aBuf</TT></B>. This constructor is provided for efficiency in setting
+a new <B><TT>DwString</TT></B>'s contents from a large buffer. It is efficient
+because no copying takes place. Instead, <B><TT>aBuf</TT></B> becomes the
+buffer used internally by the <B><TT>DwString</TT></B> object, which takes
+responsibility for deleting the buffer. Because <B><TT>DwString</TT></B>
+will free the buffer using <B><TT>delete []</TT></B>, the buffer should have
+been allocated using <B><TT>new</TT></B>. See also: TakeBuffer(), and
+ReleaseBuffer().
+<P>
+<FONT COLOR="teal"><B> DwString&amp; <A NAME="op_eq">operator =</A> (const
+DwString&amp; aStr) <BR>
+DwString&amp; operator = (const char* aCstr) <BR>
+DwString&amp; operator = (char aChar) </B></FONT>
+<P>
+Assigns the contents of the operand to this string. <B><TT>aCstr</TT></B>
+must point to a NUL-terminated array of characters (a C string). Returns
+<B><TT>*this</TT></B>.
+<P>
+<FONT COLOR="teal"><B> <A NAME="size">size</A>_t size() const </B></FONT>
+<P>
+Returns the number of characters in this string's contents. This member function
+is identical to <B><TT>length()</TT></B>
+<P>
+<FONT COLOR="teal"><B> size_t <A NAME="length">length</A>() const </B></FONT>
+<P>
+Returns the number of characters in this string's contents. This member function
+is identical to <B><TT>size()</TT></B>
+<P>
+<FONT COLOR="teal"><B> size_t <A NAME="max_size">max_size</A>() const
+</B></FONT>
+<P>
+Returns the maximum length that this string can ever attain.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="resize">resize</A>(size_t aLen, char
+aChar) <BR>
+void resize(size_t aLen) </B></FONT>
+<P>
+Changes the length of this string. If the string shortened, the final characters
+are truncated. If the string is expanded, the added characters will be NULs
+or the character specified by <B><TT>aChar</TT></B>.
+<P>
+<FONT COLOR="teal"><B> size_t <A NAME="capacity">capacity</A>() const
+</B></FONT>
+<P>
+Returns the size of the internal buffer used for this string, which will
+always be greater than or equal to the length of the string.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="reserve">reserve</A>(size_t aSize)
+</B></FONT>
+<P>
+If <B><TT>aSize</TT></B> is greater than the current capacity of this string,
+this member function will increase the capacity to be at least
+<B><TT>aSize</TT></B>.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="clear">clear</A>() </B></FONT>
+<P>
+Sets this string's contents to be empty.
+<P>
+<FONT COLOR="teal"><B> DwBool <A NAME="empty">empty</A>() const </B></FONT>
+<P>
+Returns a true value if and only if the contents of this string are empty.
+<P>
+<FONT COLOR="teal"><B> const char&amp; <A NAME="op_brackets">operator []</A>
+(size_t aPos) const <BR>
+char&amp; operator [] (size_t aPos) </B></FONT>
+<P>
+Returns <B><TT>DwString::at(aPos) const</TT></B> or
+<B><TT>DwString::at(aPos)</TT></B>. Note that the non-const version always
+assumes that the contents will be modified and therefore always copies a
+shared internal buffer before it returns.
+<P>
+<FONT COLOR="teal"><B> const char&amp; <A NAME="at">at</A>(size_t aPos) const
+<BR>
+char&amp; at(size_t aPos) </B></FONT>
+<P>
+Returns the character at position <B><TT>aPos</TT></B> in the string's contents.
+The non-const version returns an lvalue that may be assigned to. Note that
+the non-const version always assumes that the contents will be modified and
+therefore always copies a shared internal buffer before it returns.
+<P>
+<FONT COLOR="teal"><B> DwString&amp; <A NAME="op_plus_eq">operator +=</A>
+(const DwString&amp; aStr) <BR>
+DwString&amp; operator += (const char* aCstr) <BR>
+DwString&amp; operator += (char aChar) </B></FONT>
+<P>
+Appends the contents of the operand to this string. <B><TT>aCstr</TT></B>
+must point to a NUL-terminated array of characters (a C string). Returns
+<B><TT>*this</TT></B>.
+<P>
+<FONT COLOR="teal"><B> DwString&amp; <A NAME="append">append</A>(const
+DwString&amp; aStr) <BR>
+DwString&amp; append(const DwString&amp; aStr, size_t aPos, size_t aLen)
+<BR>
+DwString&amp; append(const char* aBuf, size_t aLen) <BR>
+DwString&amp; append(const char* aCstr) <BR>
+DwString&amp; append(size_t aLen, char aChar) </B></FONT>
+<P>
+Appends characters to (the end of) this string. Returns
+<B><TT>*this</TT></B>.
+<P>
+The first version appends all of the characters from
+<B><TT>aStr</TT></B>.
+<P>
+The second version appends at most <B><TT>aLen</TT></B> characters from
+<B><TT>aStr</TT></B> beginning at position <B><TT>aPos</TT></B>.
+<B><TT>aPos</TT></B> must be less than or equal to
+<B><TT>aStr.size()</TT></B>. The function will not append more characters
+than what are available in <B><TT>aStr</TT></B>.
+<P>
+The third version appends <B><TT>aLen</TT></B> characters from
+<B><TT>aBuf</TT></B>, which is not assumed to be NUL-terminated and can contain
+embedded NULs.
+<P>
+The fourth version appends characters from the NUL-terminated string
+<B><TT>aCstr</TT></B>.
+<P>
+The fifth version appends <B><TT>aChar</TT></B> repeated
+<B><TT>aLen</TT></B> times.
+<P>
+<FONT COLOR="teal"><B> DwString&amp; <A NAME="assign">assign</A>(const
+DwString&amp; aStr) <BR>
+DwString&amp; assign(const DwString&amp; aStr, size_t aPos, size_t aLen)
+<BR>
+DwString&amp; assign(const char* aBuf, size_t aLen) <BR>
+DwString&amp; assign(const char* aCstr) <BR>
+DwString&amp; assign(size_t aLen, char aChar) </B></FONT>
+<P>
+Assigns characters to this string. Returns <B><TT>*this</TT></B>.
+<P>
+The first version assigns all of the characters from
+<B><TT>aStr</TT></B>.
+<P>
+The second version assigns at most <B><TT>aLen</TT></B> characters from
+<B><TT>aStr</TT></B> beginning at position <B><TT>aPos</TT></B>.
+<B><TT>aPos</TT></B> must be less than or equal to
+<B><TT>aStr.size()</TT></B>. The function will not assign more characters
+than what are available in <B><TT>aStr</TT></B>.
+<P>
+The third version assigns <B><TT>aLen</TT></B> characters from
+<B><TT>aBuf</TT></B>, which is not assumed to be NUL-terminated and can contain
+embedded NULs.
+<P>
+The fourth version assigns characters from the NUL-terminated string
+<B><TT>aCstr</TT></B>.
+<P>
+The fifth version assigns <B><TT>aChar</TT></B> repeated
+<B><TT>aLen</TT></B> times.
+<P>
+<FONT COLOR="teal"><B> DwString&amp; <A NAME="insert">insert</A>(size_t aPos1,
+const DwString&amp; aStr) <BR>
+DwString&amp; insert(size_t aPos1, const DwString&amp; aStr, size_t aPos2,
+size_t aLen2) <BR>
+DwString&amp; insert(size_t aPos1, const char* aBuf, size_t aLen2) <BR>
+DwString&amp; insert(size_t aPos1, const char* aCstr) <BR>
+DwString&amp; insert(size_t aPos1, size_t aLen2, char aChar) </B></FONT>
+<P>
+Inserts characters into this string beginning at position
+<B><TT>aPos1</TT></B>. Returns <B><TT>*this</TT></B>.
+<P>
+The first version inserts all of the characters from
+<B><TT>aStr</TT></B>.
+<P>
+The second version inserts at most <B><TT>aLen2</TT></B> characters from
+<B><TT>aStr</TT></B> beginning at position <B><TT>aPos2</TT></B>.
+<B><TT>aPos1</TT></B> must be less than or equal to
+<B><TT>aStr.size()</TT></B>. The function will not assign more characters
+than what are available in <B><TT>aStr</TT></B>.
+<P>
+The third version inserts <B><TT>aLen2</TT></B> characters from
+<B><TT>aBuf</TT></B>, which is not assumed to be NUL-terminated and can contain
+embedded NULs.
+<P>
+The fourth version inserts characters from the NUL-terminated string
+<B><TT>aCstr</TT></B>.
+<P>
+The fifth version inserts <B><TT>aChar</TT></B> repeated
+<B><TT>aLen2</TT></B> times.
+<P>
+<FONT COLOR="teal"><B> DwString&amp; <A NAME="erase">erase</A>(size_t aPos=0,
+size_t aLen=npos) </B></FONT>
+<P>
+Erases (removes) at most <B><TT>aLen</TT></B> characters beginning at position
+<B><TT>aPos</TT></B> from this string. The function will not erase more
+characters than what are available. Returns <B><TT>*this</TT></B>.
+<P>
+<FONT COLOR="teal"><B> DwString&amp; <A NAME="replace">replace</A>(size_t
+aPos1, size_t aLen1, const DwString&amp; aStr) <BR>
+DwString&amp; replace(size_t aPos1, size_t aLen1, const DwString&amp; aStr,
+size_t aPos2, size_t aLen2) <BR>
+DwString&amp; replace(size_t aPos1, size_t aLen1, const char* aBuf, size_t
+aLen2) <BR>
+DwString&amp; replace(size_t aPos1, size_t aLen1, const char* aCstr) <BR>
+DwString&amp; replace(size_t aPos1, size_t aLen1, size_t aLen2, char aChar)
+</B></FONT>
+<P>
+Removes <B><TT>aLen1</TT></B> characters beginning at position
+<B><TT>aPos1</TT></B> and inserts other characters. Returns
+<B><TT>*this</TT></B>.
+<P>
+The first version inserts all of the characters from
+<B><TT>aStr</TT></B>.
+<P>
+The second version inserts at most <B><TT>aLen2</TT></B> characters from
+<B><TT>aStr</TT></B> beginning at position <B><TT>aPos2</TT></B>.
+<B><TT>aPos1</TT></B> must be less than or equal to
+<B><TT>aStr.size()</TT></B>. The function will not assign more characters
+than what are available in <B><TT>aStr</TT></B>.
+<P>
+The third version inserts <B><TT>aLen2</TT></B> characters from
+<B><TT>aBuf</TT></B>, which is not assumed to be NUL-terminated and can contain
+embedded NULs.
+<P>
+The fourth version inserts characters from the NUL-terminated string
+<B><TT>aCstr</TT></B>.
+<P>
+The fifth version inserts <B><TT>aChar</TT></B> repeated
+<B><TT>aLen2</TT></B> times.
+<P>
+<FONT COLOR="teal"><B> size_t <A NAME="copy">copy</A>(char* aBuf, size_t
+aLen, size_t aPos=0) const </B></FONT>
+<P>
+Copies at most <B><TT>aLen</TT></B> characters beginning at position
+<B><TT>aPos</TT></B> from this string to the buffer pointed to by
+<B><TT>aBuf</TT></B>. Returns the number of characters copied.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="swap">swap</A>(DwString&amp; aStr)
+</B></FONT>
+<P>
+Swaps the contents of this string and <B><TT>aStr</TT></B>.
+<P>
+<FONT COLOR="teal"><B> const char* <A NAME="c_str">c_str</A>() const
+</B></FONT>
+<P>
+<P>
+<FONT COLOR="teal"><B> const char* <A NAME="data">data</A>() const
+</B></FONT>
+<P>
+These member functions permit access to the internal buffer used by the
+<B><TT>DwString</TT></B> object. <B><TT>c_str()</TT></B> returns a NUL-terminated
+string suitable for use in C library functions. <B><TT>data()</TT></B> returns
+a pointer to the internal buffer, which may not be NUL-terminated.
+<P>
+<B><TT>c_str()</TT></B> may copy the internal buffer in order to place the
+terminating NUL. This is not a violation of the const declaration: it is
+a logical const, not a bit-representation const. It could have the side effect
+of invalidating a pointer previously returned by <B><TT>c_str()</TT></B>
+or <B><TT>data()</TT></B>.
+<P>
+The characters in the returned string should not be modified, and should
+be considered invalid after any call to a non-const member function or another
+call to <B><TT>c_str()</TT></B>.
+<P>
+<FONT COLOR="teal"><B> size_t <A NAME="find">find</A>(const DwString&amp;
+aStr, size_t aPos=0) const <BR>
+size_t find(const char* aBuf, size_t aPos, size_t aLen) const <BR>
+size_t find(const char* aCstr, size_t aPos=0) const <BR>
+size_t find(char aChar, size_t aPos=0) const </B></FONT>
+<P>
+Performs a forward search for a sequence of characters in the
+<B><TT>DwString</TT></B> object. The return value is the position of the
+sequence in the string if found, or <B><TT>DwString::npos</TT></B> if not
+found.
+<P>
+The first version searches beginning at position <B><TT>aPos</TT></B> for
+the sequence of characters in <B><TT>aStr</TT></B>.
+<P>
+The second version searches beginning at position <B><TT>aPos</TT></B> for
+the sequence of <B><TT>aLen</TT></B> characters in <B><TT>aBuf</TT></B>,
+which need not be NUL-terminated and can contain embedded NULs.
+<P>
+The third version searches beginning at position <B><TT>aPos</TT></B> for
+the sequence of characters in the NUL-terminated string
+<B><TT>aCstr</TT></B>.
+<P>
+The fourth version searches beginning at position <B><TT>aPos</TT></B> for
+the character <B><TT>aChar</TT></B>.
+<P>
+<FONT COLOR="teal"><B> size_t <A NAME="rfind">rfind</A>(const DwString&amp;
+aStr, size_t aPos=npos) const <BR>
+size_t rfind(const char* aBuf, size_t aPos, size_t aLen) const <BR>
+size_t rfind(const char* aCstr, size_t aPos=npos) const <BR>
+size_t rfind(char aChar, size_t aPos=npos) const </B></FONT>
+<P>
+Performs a reverse search for a sequence of characters in the
+<B><TT>DwString</TT></B> object. The return value is the position of the
+sequence in the string if found, or <B><TT>DwString::npos</TT></B> if not
+found.
+<P>
+The first version searches beginning at position <B><TT>aPos</TT></B> for
+the sequence of characters in <B><TT>aStr</TT></B>.
+<P>
+The second version searches beginning at position <B><TT>aPos</TT></B> for
+the sequence of <B><TT>aLen</TT></B> characters in <B><TT>aBuf</TT></B>,
+which need not be NUL-terminated and can contain embedded NULs.
+<P>
+The third version searches beginning at position <B><TT>aPos</TT></B> for
+the sequence of characters in the NUL-terminated string
+<B><TT>aCstr</TT></B>.
+<P>
+The fourth version searches beginning at position <B><TT>aPos</TT></B> for
+the character <B><TT>aChar</TT></B>.
+<P>
+<FONT COLOR="teal"><B> size_t <A NAME="find_first_of">find_first_of</A>(const
+DwString&amp; aStr, size_t aPos=0) const <BR>
+size_t find_first_of(const char* aBuf, size_t aPos, size_t aLen) const <BR>
+size_t find_first_of(const char* aCstr, size_t aPos=0) const </B></FONT>
+<P>
+Performs a forward search beginning at position <B><TT>aPos</TT></B> for
+the first occurrence of any character from a specified set of characters.
+The return value is the position of the character if found, or
+<B><TT>DwString::npos</TT></B> if not found.
+<P>
+The first version searches for any character in the string
+<B><TT>aStr</TT></B>.
+<P>
+The second version searches for any of the <B><TT>aLen</TT></B> characters
+in <B><TT>aBuf</TT></B>.
+<P>
+The third version searches for any character in the NUL-terminated string
+<B><TT>aCstr</TT></B>.
+<P>
+<FONT COLOR="teal"><B> size_t <A NAME="find_last_of">find_last_of</A>(const
+DwString&amp; aStr, size_t aPos=npos) const <BR>
+size_t find_last_of(const char* aBuf, size_t aPos, size_t aLen) const <BR>
+size_t find_last_of(const char* aCstr, size_t aPos=npos) const </B></FONT>
+<P>
+Performs a reverse search beginning at position <B><TT>aPos</TT></B> for
+the first occurrence of any character from a specified set of characters.
+If <B><TT>aPos</TT></B> is greater than or equal to the number of characters
+in the string, then the search starts at the end of the string. The return
+value is the position of the character if found, or
+<B><TT>DwString::npos</TT></B> if not found.
+<P>
+The first version searches for any character in the string
+<B><TT>aStr</TT></B>.
+<P>
+The second version searches for any of the <B><TT>aLen</TT></B> characters
+in <B><TT>aBuf</TT></B>.
+<P>
+The third version searches for any character in the NUL-terminated string
+<B><TT>aCstr</TT></B>.
+<P>
+<FONT COLOR="teal"><B> size_t
+<A NAME="find_first_not_of">find_first_not_of</A>(const DwString&amp; aStr,
+size_t aPos=0) const <BR>
+size_t find_first_not_of(const char* aBuf, size_t aPos, size_t aLen) const
+<BR>
+size_t find_first_not_of(const char* aCstr, size_t aPos=0) const </B></FONT>
+<P>
+Performs a forward search beginning at position <B><TT>aPos</TT></B> for
+the first occurrence of any character <I>not</I> in a specified set of
+characters. The return value is the position of the character if found, or
+<B><TT>DwString::npos</TT></B> if not found.
+<P>
+The first version searches for any character not in the string
+<B><TT>aStr</TT></B>.
+<P>
+The second version searches for any character not among the
+<B><TT>aLen</TT></B> characters in <B><TT>aBuf</TT></B>.
+<P>
+The third version searches for any character not in the NUL-terminated string
+<B><TT>aCstr</TT></B>.
+<P>
+<FONT COLOR="teal"><B> size_t
+<A NAME="find_last_not_of">find_last_not_of</A>(const DwString&amp; aStr,
+size_t aPos=npos) const <BR>
+size_t find_last_not_of(const char* aBuf, size_t aPos, size_t aLen) const
+<BR>
+size_t find_last_not_of(const char* aCstr, size_t aPos=npos) const
+</B></FONT>
+<P>
+Performs a reverse search beginning at position <B><TT>aPos</TT></B> for
+the first occurrence of any character <I>not</I> in a specified set of
+characters. If <B><TT>aPos</TT></B> is greater than or equal to the number
+of characters in the string, then the search starts at the end of the string.
+The return value is the position of the character if found, or
+<B><TT>DwString::npos</TT></B> if not found.
+<P>
+The first version searches for any character not in the string
+<B><TT>aStr</TT></B>.
+<P>
+The second version searches for any character not among the
+<B><TT>aLen</TT></B> characters in <B><TT>aBuf</TT></B>.
+<P>
+The third version searches for any character not in the NUL-terminated string
+<B><TT>aCstr</TT></B>.
+<P>
+<FONT COLOR="teal"><B> DwString <A NAME="substr">substr</A>(size_t aPos=0,
+size_t aLen=npos) const </B></FONT>
+<P>
+Returns a string that contains at most <B><TT>aLen</TT></B> characters from
+the <B><TT>DwString</TT></B> object beginning at position
+<B><TT>aPos</TT></B>. The returned substring will not contain more characters
+than what are available in the superstring <B><TT>DwString</TT></B> object.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="compare">compare</A>(const DwString&amp;
+aStr) const <BR>
+int compare(size_t aPos1, size_t aLen1, const DwString&amp; aStr) const <BR>
+int compare(size_t aPos1, size_t aLen1, const DwString&amp; aStr, size_t
+aPos2, size_t aLen2) const <BR>
+int compare(const char* aCstr) const <BR>
+int compare(size_t aPos1, size_t aLen1, const char* aBuf, size_t aLen2=npos)
+const </B></FONT>
+<P>
+These member functions compare a sequence of characters to this
+<B><TT>DwString</TT></B> object, or a segment of this
+<B><TT>DwString</TT></B> object. They return -1, 0, or 1, depending on whether
+this <B><TT>DwString</TT></B> object is less than, equal to, or greater than
+the compared sequence of characters, respectively.
+<P>
+The first version compares <B><TT>aStr</TT></B> to this string.
+<P>
+The second version compares <B><TT>aStr</TT></B> to the segment of this string
+of length <B><TT>aLen</TT></B> beginning at position
+<B><TT>aPos</TT></B>.
+<P>
+The third version compares the {tt aLen2} characters beginning at position
+<B><TT>aPos2</TT></B> in <B><TT>aStr</TT></B> with the
+<B><TT>aLen1</TT></B> characters beginning at position
+<B><TT>aPos1</TT></B> in this <B><TT>DwString</TT></B> object.
+<P>
+The fourth version compares the NUL-terminated string
+<B><TT>aCstr</TT></B> to this <B><TT>DwString</TT></B>.
+<P>
+The fifth version compares the <B><TT>aLen2</TT></B> characters in
+<B><TT>aBuf</TT></B> with this <B><TT>DwString</TT></B>.
+<P>
+<FONT COLOR="teal"><B> virtual const char*
+<A NAME="ClassName">ClassName</A>() const </B></FONT>
+<P>
+This virtual function returns the name of the class as a NUL-terminated char
+string.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="ObjectId">ObjectId</A>() const
+</B></FONT>
+<P>
+Returns the unique object id for this <B><TT>DwString</TT></B>.
+<P>
+<FONT COLOR="teal"><B> void
+<A NAME="ConvertToLowerCase">ConvertToLowerCase</A>() <BR>
+void <A NAME="ConvertToUpperCase">ConvertToUpperCase</A>() </B></FONT>
+<P>
+Converts this <B><TT>DwString</TT></B> object's characters to all lower case
+or all upper case.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="Trim">Trim</A>() </B></FONT>
+<P>
+Removes all white space from the beginning and the end of this
+<B><TT>DwString</TT></B> object. White space characters include ASCII HT,
+LF, and SPACE.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="WriteTo">WriteTo</A>(ostream&amp; aStrm)
+const </B></FONT>
+<P>
+Writes the contents of this <B><TT>DwString</TT></B> object to the stream
+<B><TT>aStrm</TT></B>.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="RefCount">RefCount</A>() const
+</B></FONT>
+<P>
+This <I>advanced</I> member function returns the number of references to
+the internal buffer used by the <B><TT>DwString</TT></B> object.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="TakeBuffer">TakeBuffer</A>(char* aBuf,
+size_t aSize, size_t aStart, size_t aLen) </B></FONT>
+<P>
+This <I>advanced</I> member function sets the contents of the
+<B><TT>DwString</TT></B> object to the <B><TT>aLen</TT></B> characters starting
+at offset <B><TT>aStart</TT></B> in the buffer <B><TT>aBuf</TT></B>.
+<B><TT>aSize</TT></B> is the allocated size of <B><TT>aBuf</TT></B>. This
+member function is provided for efficiency in setting a
+<B><TT>DwString</TT></B>'s contents from a large buffer. It is efficient
+because no copying takes place. Instead, <B><TT>aBuf</TT></B> becomes the
+buffer used internally by the <B><TT>DwString</TT></B> object, which takes
+responsibility for deleting the buffer. Because DwString will free the buffer
+using <B><TT>delete []</TT></B>, the buffer should have been allocated using
+<B><TT>new</TT></B>. See also: ReleaseBuffer().
+<P>
+<FONT COLOR="teal"><B> void <A NAME="ReleaseBuffer">ReleaseBuffer</A>(char**
+aBuf, size_t* aSize, size_t* aStart, size_t* aLen) </B></FONT>
+<P>
+This <I>advanced</I> member function is the symmetric opposite of
+<B><TT>TakeBuffer()</TT></B>, to the extent that such an opposite is possible.
+It provides a way to ``export'' the buffer used internally by the
+<B><TT>DwString</TT></B> object. Note, however, that because of the
+copy-on-modify feature of <B><TT>DwString</TT></B>, the
+<B><TT>DwString</TT></B> object may not have sole ownership of its internal
+buffer. When that is case, <B><TT>ReleaseBuffer()</TT></B> will return a
+copy of the buffer. You can check to see if the internal buffer is shared
+by calling <B><TT>RefCount()</TT></B>. On return from this member function,
+the <B><TT>DwString</TT></B> object will have valid, but empty, contents.
+It is recommended that you use this function only on rare occasions where
+you need to export efficiently a large buffer.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="CopyTo">CopyTo</A>(DwString* aStr) const
+</B></FONT>
+<P>
+This <I>advanced</I> member function copies this <B><TT>DwString</TT></B>
+object to <B><TT>aStr</TT></B>. This member function is different from the
+assignment operator, because it physically copies the buffer instead of just
+duplicating a reference to it.
+<P>
+<FONT COLOR="teal"><B> virtual void
+<A NAME="PrintDebugInfo">PrintDebugInfo</A>(ostream&amp; aStrm) const
+</B></FONT>
+<P>
+Prints debugging information about the object to <B><TT>aStrm</TT></B>.
+<P>
+This member function is available only in the debug version of the library.
+<P>
+<FONT COLOR="teal"><B> virtual void
+<A NAME="CheckInvariants">CheckInvariants</A>() const </B></FONT>
+<P>
+Aborts if one of the invariants of the object fails. Use this member function
+to track down bugs.
+<P>
+This member function is available only in the debug version of the library.
+<H2>
+ <FONT COLOR="navy"> Public Data Members </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> static const size_t <A NAME="npos">npos</A>
+</B></FONT>
+<P>
+<B><TT>npos</TT></B> is assigned the value (size_t)-1.
+</BODY></HTML>
diff --git a/mimelib/doc/text.html b/mimelib/doc/text.html
new file mode 100644
index 000000000..3fc637cac
--- /dev/null
+++ b/mimelib/doc/text.html
@@ -0,0 +1,149 @@
+<HTML>
+<HEAD>
+ <TITLE> DwText Man Page </TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<H2>
+ <FONT COLOR="navy"> NAME </FONT>
+</H2>
+<P>
+DwText -- Class representing text in a RFC-822 header field-body
+<H2>
+ <FONT COLOR="navy"> SYNOPSIS </FONT>
+</H2>
+<PRE>class DW_EXPORT DwText : public <A HREF="fieldbdy.html">DwFieldBody</A> {
+
+public:
+
+ <A HREF="text.html#DwText">DwText</A>();
+ <A HREF="text.html#DwText">DwText</A>(const DwText&amp; aText);
+ <A HREF="text.html#DwText">DwText</A>(const DwString&amp; aStr, DwMessageComponent* aParent=0);
+ virtual ~DwText();
+ const DwText&amp; <A HREF="text.html#op_eq">operator =</A> (const DwText&amp; aText);
+ virtual void <A HREF="text.html#Parse">Parse</A>();
+ virtual void <A HREF="text.html#Assemble">Assemble</A>();
+ virtual DwMessageComponent* <A HREF="text.html#Clone">Clone</A>() const;
+ static DwText* <A HREF="text.html#NewText">NewText</A>(const DwString&amp; aStr, DwMessageComponent* aParent);
+ static DwText* (*<A HREF="text.html#sNewText">sNewText</A>)(const DwString&amp;, DwMessageComponent*);
+
+public:
+
+ virtual void <A HREF="text.html#PrintDebugInfo">PrintDebugInfo</A>(ostream&amp; aStrm, int aDepth=0) const;
+ virtual void <A HREF="text.html#CheckInvariants">CheckInvariants</A>() const;
+
+protected:
+
+ void _PrintDebugInfo(ostream&amp; aStrm) const;
+};
+</PRE>
+<H2>
+ <FONT COLOR="navy"> DESCRIPTION </FONT>
+</H2>
+<P>
+<B><TT>DwText</TT></B> represents an unstructured field body in a header
+field. It roughly corresponds to the <I>text</I> element of the BNF grammar
+defined in RFC-822.
+<H2>
+ <FONT COLOR="navy"> Public Member Functions </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> <A NAME="DwText">DwText</A>() <BR>
+DwText(const DwText&amp; aText) <BR>
+DwText(const DwString&amp; aStr, DwMessageComponent* aParent=0) </B></FONT>
+<P>
+The first constructor is the default constructor, which sets the
+<B><TT>DwText</TT></B> object's string representation to the empty string
+and sets its parent to NULL.
+<P>
+The second constructor is the copy constructor, which copies the string
+representation from <B><TT>aText</TT></B>. The parent of the new
+<B><TT>DwText</TT></B> object is set to NULL.
+<P>
+The third constructor copies <B><TT>aStr</TT></B> to the
+<B><TT>DwText</TT></B> object's string representation and sets
+<B><TT>aParent</TT></B> as its parent. The virtual member function
+<B><TT>Parse()</TT></B> should be called immediately after this constructor
+in order to parse the string representation. Unless it is NULL,
+<B><TT>aParent</TT></B> should point to an object of a class derived from
+<B><TT>DwField</TT></B>.
+<P>
+<FONT COLOR="teal"><B> const DwText&amp; <A NAME="op_eq">operator =</A> (const
+DwText&amp; aText) </B></FONT>
+<P>
+This is the assignment operator.
+<P>
+<FONT COLOR="teal"><B> virtual void <A NAME="Parse">Parse</A>() </B></FONT>
+<P>
+This virtual member function is inherited from
+<B><TT>DwMessageComponent</TT></B>, where it is declared a pure virtual function.
+For a <B><TT>DwText</TT></B> object, this member function does nothing, since
+<B><TT>DwText</TT></B> represents an unstructured field body (like the Subject
+header field) that does not have a broken-down form.
+<P>
+Note, however, that this function should still be called consistently, since
+a subclass of <B><TT>DwText</TT></B> may implement a parse method.
+<P>
+This function clears the is-modified flag.
+<P>
+<FONT COLOR="teal"><B> virtual void <A NAME="Assemble">Assemble</A>()
+</B></FONT>
+<P>
+This virtual member function is inherited from
+<B><TT>DwMessageComponent</TT></B>, where it is declared a pure virtual function.
+For a <B><TT>DwText</TT></B> object, this member function does nothing, since
+<B><TT>DwText</TT></B> represents an unstructured field body (like the Subject
+header field) that does not have a broken-down form.
+<P>
+Note, however, that this function should still be called consistently, since
+a subclass of <B><TT>DwText</TT></B> may implement an assemble method.
+<P>
+This function clears the is-modified flag.
+<P>
+<FONT COLOR="teal"><B> virtual DwMessageComponent*
+<A NAME="Clone">Clone</A>() const </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+creates a new <B><TT>DwText</TT></B> on the free store that has the same
+value as this <B><TT>DwText</TT></B> object. The basic idea is that of a
+``virtual copy constructor.''
+<P>
+<FONT COLOR="teal"><B> static DwText* <A NAME="NewText">NewText</A>(const
+DwString&amp; aStr, DwMessageComponent* aParent) </B></FONT>
+<P>
+Creates a new <B><TT>DwText</TT></B> object on the free store. If the static
+data member <B><TT>sNewText</TT></B> is NULL, this member function will create
+a new <B><TT>DwText</TT></B> and return it. Otherwise,
+<B><TT>NewText()</TT></B> will call the user-supplied function pointed to
+by <B><TT>sNewText</TT></B>, which is assumed to return an object from a
+class derived from <B><TT>DwText</TT></B>, and return that object.
+<P>
+<FONT COLOR="teal"><B> virtual void
+<A NAME="PrintDebugInfo">PrintDebugInfo</A>(ostream&amp; aStrm, int aDepth=0)
+const </B></FONT>
+<P>
+This virtual function, inherited from <B><TT>DwMessageComponent</TT></B>,
+prints debugging information about this object to <B><TT>aStrm</TT></B>.
+It will also call <B><TT>PrintDebugInfo()</TT></B> for any of its child
+components down to a level of <B><TT>aDepth</TT></B>.
+<P>
+This member function is available only in the debug version of the library.
+<P>
+<FONT COLOR="teal"><B> virtual void
+<A NAME="CheckInvariants">CheckInvariants</A>() const </B></FONT>
+<P>
+Aborts if one of the invariants of the object fails. Use this member function
+to track down bugs.
+<P>
+This member function is available only in the debug version of the library.
+<H2>
+ <FONT COLOR="navy"> Public Data Members </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> static DwText*
+(*<A NAME="sNewText">sNewText</A>)(const DwString&amp;, DwMessageComponent*)
+</B></FONT>
+<P>
+If <B><TT>sNewText</TT></B> is not NULL, it is assumed to point to a
+user-supplied function that returns an object from a class derived from
+<B><TT>DwText</TT></B>.
+</BODY></HTML>
diff --git a/mimelib/doc/util.html b/mimelib/doc/util.html
new file mode 100644
index 000000000..1ae75acf1
--- /dev/null
+++ b/mimelib/doc/util.html
@@ -0,0 +1,111 @@
+<!-- $Revision$ -->
+<!-- $Date$ -->
+<HTML>
+<HEAD>
+ <TITLE> MIME++ Utility Functions </TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<H2>
+ <FONT COLOR="navy"> NAME </FONT>
+</H2>
+<P>
+MIME++ Utilities
+<H2>
+ <FONT COLOR="navy"> SYNOPSIS </FONT>
+</H2>
+<PRE>#include &amp;ltmimepp/mimepp.h&gt;
+
+void <A HREF="#DwInitialize">DwInitialize</A>();
+int <A HREF="#DwToCrLfEol">DwToCrLfEol</A>(const DwString&amp; aSrcStr, DwString&amp; aDestStr);
+int <A HREF="#DwToLfEol">DwToLfEol</A>(const DwString&amp; aSrcStr, DwString&amp; aDestStr);
+int <A HREF="#DwToCrEol">DwToCrEol</A>(const DwString&amp; aSrcStr, DwString&amp; aDestStr);
+int <A HREF="#DwToLocalEol">DwToLocalEol</A>(const DwString&amp; aSrcStr, DwString&amp; aDestStr);
+int <A HREF="#DwEncodeBase64">DwEncodeBase64</A>(const DwString&amp; aSrcStr, DwString&amp; aDestStr);
+int <A HREF="#DwDecodeBase64">DwDecodeBase64</A>(const DwString&amp; aSrcStr, DwString&amp; aDestStr);
+int <A HREF="#DwEncodeQuotedPrintable">DwEncodeQuotedPrintable</A>(const DwString&amp; aSrcStr, DwString&amp; aDestStr);
+int <A HREF="#DwDecodeQuotedPrintable">DwEncodeQuotedPrintable</A>(const DwString&amp; aSrcStr, DwString&amp; aDestStr);
+</PRE>
+<H2>
+ <FONT COLOR="navy"> DESCRIPTION </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> void <A NAME="DwInitialize">DwInitialize</A>();
+</B></FONT>
+<P>
+Initializes the class library. Call this member function before creating
+any objects from MIME++ classes.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="DwToCrLfEol">DwToCrLfEol</A>(const
+DwString&amp; aSrcStr, DwString&amp; aDestStr); </B></FONT>
+<P>
+Converts all end-of-line markers in <B><TT>aSrcStr</TT></B> to CR LF and
+puts the result in <B><TT>aDestStr</TT></B>. The contract explicitly allows
+<B><TT>aSrcStr</TT></B> and <B><TT>aDestStr</TT></B> to be references to
+the same string.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="DwToLfEol">DwToLfEol</A>(const
+DwString&amp; aSrcStr, DwString&amp; aDestStr); </B></FONT>
+<P>
+Converts all end-of-line markers in <B><TT>aSrcStr</TT></B> to LF ('\n')
+and puts the result in <B><TT>aDestStr</TT></B>. The contract explicitly
+allows <B><TT>aSrcStr</TT></B> and <B><TT>aDestStr</TT></B> to be references
+to the same string.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="DwToCrEol">DwToCrEol</A>(const
+DwString&amp; aSrcStr, DwString&amp; aDestStr); </B></FONT>
+<P>
+Converts all end-of-line markers in <B><TT>aSrcStr</TT></B> to CR ('\r')
+and puts the result in <B><TT>aDestStr</TT></B>. The contract explicitly
+allows <B><TT>aSrcStr</TT></B> and <B><TT>aDestStr</TT></B> to be references
+to the same string.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="DwToLocalEol">DwToLocalEol</A>(const
+DwString&amp; aSrcStr, DwString&amp; aDestStr); </B></FONT>
+<P>
+Converts all end-of-line markers in <B><TT>aSrcStr</TT></B> to the end-of-line
+marker native to the operating system and puts the result in
+<B><TT>aDestStr</TT></B>. The contract explicitly allows
+<B><TT>aSrcStr</TT></B> and <B><TT>aDestStr</TT></B> to be references to
+the same string.
+<P>
+The end-of-line markers for various operating systems are the following:
+<PRE>
+ MS-DOS, WIN32 CR LF
+ UNIX LF
+ Macintosh CR
+</PRE>
+<P>
+<FONT COLOR="teal"><B> int <A NAME="DwEncodeBase64">DwEncodeBase64</A>(const
+DwString&amp; aSrcStr, DwString&amp; aDestStr); </B></FONT>
+<P>
+Encodes the characters in <B><TT>aSrcStr</TT></B> using the base64 encoding
+and puts the result into <B><TT>aDestStr</TT></B>. The contract explicitly
+allows <B><TT>aSrcStr</TT></B> and <B><TT>aDestStr</TT></B> to be references
+to the same string.
+<P>
+<FONT COLOR="teal"><B> int <A NAME="DwDecodeBase64">DwDecodeBase64</A>(const
+DwString&amp; aSrcStr, DwString&amp; aDestStr); </B></FONT>
+<P>
+Decodes the characters in <B><TT>aSrcStr</TT></B> from the base64 encoding
+and puts the result into <B><TT>aDestStr</TT></B>. The contract explicitly
+allows <B><TT>aSrcStr</TT></B> and <B><TT>aDestStr</TT></B> to be references
+to the same string.
+<P>
+<FONT COLOR="teal"><B> int
+<A NAME="DwEncodeQuotedPrintable">DwEncodeQuotedPrintable</A>(const
+DwString&amp; aSrcStr, DwString&amp; aDestStr); </B></FONT>
+<P>
+Encodes the characters in <B><TT>aSrcStr</TT></B> using the quoted-printable
+encoding and puts the result into <B><TT>aDestStr</TT></B>. The contract
+explicitly allows <B><TT>aSrcStr</TT></B> and <B><TT>aDestStr</TT></B> to
+be references to the same string.
+<P>
+<FONT COLOR="teal"><B> int
+<A NAME="DwDecodeQuotedPrintable">DwDecodeQuotedPrintable</A>(const
+DwString&amp; aSrcStr, DwString&amp; aDestStr); </B></FONT>
+<P>
+Decodes the characters in <B><TT>aSrcStr</TT></B> from the quoted-printable
+encoding and puts the result into <B><TT>aDestStr</TT></B>. The contract
+explicitly allows <B><TT>aSrcStr</TT></B> and <B><TT>aDestStr</TT></B> to
+be references to the same string.
+</BODY></HTML>
diff --git a/mimelib/doc/uuencode.html b/mimelib/doc/uuencode.html
new file mode 100644
index 000000000..b7ba1fd2f
--- /dev/null
+++ b/mimelib/doc/uuencode.html
@@ -0,0 +1,110 @@
+<HTML>
+<HEAD>
+ <TITLE> DwUuencode Man Page </TITLE>
+</HEAD>
+<BODY BGCOLOR="#FFFFFF">
+<H2>
+ <FONT COLOR="navy"> NAME </FONT>
+</H2>
+<P>
+DwUuencode -- Class for performing uuencode or uudecode operations
+<H2>
+ <FONT COLOR="navy"> SYNOPSIS </FONT>
+</H2>
+<PRE>class DW_EXPORT DwUuencode {
+
+public:
+
+ DwUuencode();
+ virtual ~DwUuencode();
+ void <A HREF="uuencode.html#SetFileName">SetFileName</A>(const char* aName);
+ const char* <A HREF="uuencode.html#FileName">FileName</A>() const;
+ void <A HREF="uuencode.html#SetFileMode">SetFileMode</A>(DwUint16 aMode);
+ DwUint16 <A HREF="uuencode.html#FileMode">FileMode</A>() const;
+ void <A HREF="uuencode.html#SetBinaryChars">SetBinaryChars</A>(const DwString&amp; aStr);
+ const DwString&amp; <A HREF="uuencode.html#BinaryChars">BinaryChars</A>() const;
+ void <A HREF="uuencode.html#SetAsciiChars">SetAsciiChars</A>(const DwString&amp; aStr);
+ const DwString&amp; <A HREF="uuencode.html#AsciiChars">AsciiChars</A>() const;
+ DwBool <A HREF="uuencode.html#Encode">Encode</A>();
+ DwBool <A HREF="uuencode.html#Decode">Decode</A>();
+};
+</PRE>
+<H2>
+ <FONT COLOR="navy"> DESCRIPTION </FONT>
+</H2>
+<P>
+<B><TT>DwUuencode</TT></B> performs uuencode or uudecode operations. Uuencode
+is a format for encoding binary data into text characters for transmission
+through the mail system. The format also includes the file name and the file
+mode. (Note: The file mode is significant only in UNIX.) In MIME, the use
+of uuencode is deprecated; base64 is the preferred encoding for sending binary
+data.
+<P>
+To use <B><TT>DwUuencode</TT></B> for encoding binary data into uuencode
+format, set the file name, file mode, and binary data string using the member
+functions <B><TT>SetFileName()</TT></B>, <B><TT>SetFileMode()</TT></B>, and
+<B><TT>SetBinaryChars()</TT></B>. Then call the member function
+<B><TT>Encode()</TT></B>. Finally, retrieve the uuencoded text characters
+by calling <B><TT>AsciiChars()</TT></B>.
+<P>
+To use <B><TT>DwUuencode</TT></B> to decode uuencoded data, set the ASCII
+characters using the member function <B><TT>SetAsciiChars()</TT></B>, then
+call <B><TT>Decode()</TT></B>. Finally, retrieve the file name, file mode,
+and binary characters by calling <B><TT>FileName()</TT></B>,
+<B><TT>FileMode()</TT></B>, and <B><TT>BinaryChars()</TT></B>.
+<H2>
+ <FONT COLOR="navy"> Public Member Functions </FONT>
+</H2>
+<P>
+<FONT COLOR="teal"><B> void <A NAME="SetFileName">SetFileName</A>(const char*
+aName) </B></FONT>
+<P>
+Sets the file name to be included in the uuencoded output.
+<P>
+<FONT COLOR="teal"><B> const char* <A NAME="FileName">FileName</A>() const
+</B></FONT>
+<P>
+Returns the file name extracted while uudecoding.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="SetFileMode">SetFileMode</A>(DwUint16
+aMode) </B></FONT>
+<P>
+Sets the file mode to be included in the uuencoded output. If the file mode
+is not explicitly set using this member function, a default value of 0644
+(octal) is assumed.
+<P>
+<FONT COLOR="teal"><B> DwUint16 <A NAME="FileMode">FileMode</A>() const
+</B></FONT>
+<P>
+Returns the file mode extracted while uudecoding.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="SetBinaryChars">SetBinaryChars</A>(const
+DwString&amp; aStr) </B></FONT>
+<P>
+Sets the string of binary data to be used in the uuencode operation.
+<P>
+<FONT COLOR="teal"><B> const DwString&amp;
+<A NAME="BinaryChars">BinaryChars</A>() const </B></FONT>
+<P>
+Returns the string of binary data extracted during a uudecode operation.
+<P>
+<FONT COLOR="teal"><B> void <A NAME="SetAsciiChars">SetAsciiChars</A>(const
+DwString&amp; aStr) </B></FONT>
+<P>
+Sets the string of ASCII characters to used in the decode operation.
+<P>
+<FONT COLOR="teal"><B> const DwString&amp;
+<A NAME="AsciiChars">AsciiChars</A>() const </B></FONT>
+<P>
+Returns the string of ASCII characters created during a uuencode operation.
+<P>
+<FONT COLOR="teal"><B> DwBool <A NAME="Encode">Encode</A>() </B></FONT>
+<P>
+Creates an ASCII string of characters by uuencoding the file name, file mode,
+and binary data.
+<P>
+<FONT COLOR="teal"><B> DwBool <A NAME="Decode">Decode</A>() </B></FONT>
+<P>
+Extracts the file name, file mode, and binary data from the ASCII characters
+via a uudecode operation.
+</BODY></HTML>