Sophie

Sophie

distrib > Mandriva > cooker > x86_64 > by-pkgid > faed6dc8f28cec1d27210717f2b419fd > files > 205

lib64etpan-devel-1.1-3.x86_64.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<HTML
><HEAD
><TITLE
>Data types</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK
REL="HOME"
TITLE="libEtPan! API"
HREF="book1.htm"><LINK
REL="UP"
TITLE="Internet Message Format"
HREF="c385.htm"><LINK
REL="PREVIOUS"
TITLE="Internet Message Format"
HREF="c385.htm"><LINK
REL="NEXT"
TITLE="Parser functions"
HREF="x1094.htm"></HEAD
><BODY
CLASS="SECT1"
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#840084"
ALINK="#0000FF"
><DIV
CLASS="NAVHEADER"
><TABLE
SUMMARY="Header navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="3"
ALIGN="center"
>libEtPan! API</TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="bottom"
><A
HREF="c385.htm"
ACCESSKEY="P"
>Prev</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
>Chapter 3. Internet Message Format</TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
HREF="x1094.htm"
ACCESSKEY="N"
>Next</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><DIV
CLASS="SECT1"
><H1
CLASS="SECT1"
><A
NAME="AEN425"
>Data types</A
></H1
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="MAILIMF-MAILBOX"
>mailimf_mailbox - mailbox</A
></H2
><P
>#include &lt;libetpan/libetpan.h&gt;

struct mailimf_mailbox {
  char * mb_display_name; /* can be NULL */
  char * mb_addr_spec;    /* != NULL */
};

struct mailimf_mailbox *
mailimf_mailbox_new(char * mb_display_name, char * mb_addr_spec);

void mailimf_mailbox_free(struct mailimf_mailbox * mailbox);
        </P
><P
>          This is an email mailbox with a display name.
        </P
><DIV
CLASS="EXAMPLE"
><A
NAME="AEN431"
></A
><P
><B
>Example 3-1. example of mailbox</B
></P
><PRE
CLASS="PROGRAMLISTING"
>DINH Viet Hoa &lt;hoa@users.sourceforge.net&gt;
          </PRE
></DIV
><P
>          <B
CLASS="COMMAND"
>mailimf_mailbox_new</B
> creates and
          initializes a data structure with a value.
          Strings given as argument are referenced by the created
          object and will be freed if the object is released.
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_mailbox_free</B
> frees memory used by
          the structure and substructures will also be released.
        </P
><DIV
CLASS="EXAMPLE"
><A
NAME="AEN438"
></A
><P
><B
>Example 3-2. mailbox creation and display</B
></P
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

int main(int argc, char ** argv)
{
  struct mailimf_mailbox * mb;
  char * display_name;
  char * address;
  
  display_name = strdup("DINH =?iso-8859-1?Q?Vi=EAt_Ho=E0?=");
  address = strdup("dinh.viet.hoa@free.fr");
  mb = mailimf_mailbox_new(str, address);
  /* do the things */
  mailimf_mailbox_free(mb);
  
  return 0;
}

/* display mailbox information */

#include &lt;libetpan/libetpan.h&gt;
#include &lt;stdio.h&gt;

void display_mailbox(struct mailimf_mailbox * mb)
{
  if (mb-&gt;mb_display_name != NULL)
    printf("display name: %s\n", mb-&gt;mb_display_name);
  printf("address specifier : %s\n", mb-&gt;mb_addr_spec);
}
          </PRE
></DIV
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="MAILIMF-ADDRESS"
>mailimf_address - address</A
></H2
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

struct mailimf_address {
  int ad_type;
  union {
    struct mailimf_mailbox * ad_mailbox; /* can be NULL */
    struct mailimf_group * ad_group;     /* can be NULL */
  } ad_data;
};

struct mailimf_address *
mailimf_address_new(int ad_type, struct mailimf_mailbox * ad_mailbox,
		    struct mailimf_group * ad_group);

void mailimf_address_free(struct mailimf_address * address);
          </PRE
><P
>          This is a mailbox or a group of mailbox.
        </P
><P
></P
><UL
><LI
><P
>            <B
CLASS="COMMAND"
>ad_type</B
> can be MAILIMF_ADDRESS_MAILBOX or
              <B
CLASS="COMMAND"
>MAILIMF_ADDRESS_GROUP</B
>.
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>ad_data.ad_mailbox</B
> is a mailbox if
              <B
CLASS="COMMAND"
>ad_type</B
> is 
              <B
CLASS="COMMAND"
>MAILIMF_ADDRESS_MAILBOX</B
>
              see <A
HREF="x425.htm#MAILIMF-MAILBOX"
>the Section called <I
>mailimf_mailbox - mailbox</I
></A
>)
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>ad_data.group</B
> is a group if type is
              <B
CLASS="COMMAND"
>MAILIMF_ADDRESS_GROUP</B
>.
              see <A
HREF="x425.htm#MAILIMF-GROUP"
>the Section called <I
>mailimf_group - named group of mailboxes</I
></A
>)
            </P
></LI
></UL
><P
>          <B
CLASS="COMMAND"
>mailimf_address_new()</B
> creates and initializes
          a data structure with a value.
          Structures given as argument are referenced by the created
          object and will be freed if the object is released.
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_address_free</B
> frees memory used by
          the structure and substructures will also be released.
        </P
><DIV
CLASS="EXAMPLE"
><A
NAME="AEN465"
></A
><P
><B
>Example 3-3. address creation and display</B
></P
><PRE
CLASS="PROGRAMLISTING"
>/* creates an address of type mailbox */

#include &lt;libetpan/libetpan.h&gt;

int main(int argc, char ** argv)
{
  struct mailimf_address * a_mb;
  struct mailimf_mailbox * mb;
  char * display_name;
  char * address;
  
  display_name = strdup("DINH =?iso-8859-1?Q?Vi=EAt_Ho=E0?=");
  address = strdup("dinh.viet.hoa@free.fr");
  mb = mailimf_mailbox_new(str, address);
  
  a_mb = mailimf_address_new(MAILIMF_ADDRESS_MAILBOX, mb, NULL);
  /* do the things */
  mailimf_address_free(a_mb);
}

/* creates an address of type group */

#include &lt;libetpan/libetpan.h&gt;

int main(int argc, char ** argv)
{
  struct mailimf_address * a_g;
  struct mailimf_group * g;
  char * display_name;
  
  display_name = strdup("undisclosed-recipient");
  g = mailimf_group_new(display_name, NULL);
  
  a_g = mailimf_address_new(MAILIMF_ADDRESS_GROUP, NULL, g);
  /* do the things */
  mailimf_address_free(a_g);
  
  return 0;
}

/* display the content of an address */

#include &lt;libetpan/libetpan.h&gt;

void display_address(struct mailimf_address * a)
{
  clistiter * cur;

  switch (a-&gt;ad_type) {
    case MAILIMF_ADDRESS_GROUP:
      display_mailimf_group(a-&gt;ad_data.ad_group);
      break;

    case MAILIMF_ADDRESS_MAILBOX:
      display_mailimf_mailbox(a-&gt;ad_data.ad_mailbox);
      break;
  }
}
          </PRE
></DIV
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="MAILIMF-MAILBOX-LIST"
>mailimf_mailbox_list - list of mailboxes</A
></H2
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

struct mailimf_mailbox_list {
  clist * mb_list; /* list of (struct mailimf_mailbox *), != NULL */
};

struct mailimf_mailbox_list *
mailimf_mailbox_list_new(clist * mb_list);

void mailimf_mailbox_list_free(struct mailimf_mailbox_list * mb_list);
        </PRE
><P
>          This is a list of mailboxes.
        </P
><P
>          <B
CLASS="COMMAND"
>mb_list</B
> is a list of mailboxes. This is a
          <B
CLASS="COMMAND"
>clist</B
> which elements are of type
          mailimf_mailbox (see <A
HREF="x425.htm#MAILIMF-MAILBOX"
>the Section called <I
>mailimf_mailbox - mailbox</I
></A
>).
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_mailbox_list_new()</B
> creates and
          initializes a data structure with a value.
          Structures given as argument are referenced by the created
          object and will be freed if the object is released.
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_mailbox_list_free()</B
> frees memory used by the
          structure and substructures will also be released.
        </P
><DIV
CLASS="EXAMPLE"
><A
NAME="AEN480"
></A
><P
><B
>Example 3-4. Creation and display of mailimf_mailbox_list</B
></P
><PRE
CLASS="PROGRAMLISTING"
>/* creates a list of mailboxes with two mailboxes */

#include &lt;libetpan/libetpan.h&gt;

int main(int argc, char ** argv)
{
  struct mailimf_group * g;
  char * display_name;
  struct mailimf_mailbox_list * mb_list;
  clist * list;  
  
  list = clist_new();
  mb = mailimf_mailbox_new(strdup("DINH =?iso-8859-1?Q?Vi=EAt_Ho=E0?="),
    strdup("dinh.viet.hoa@free.fr"));
  list = clist_append(mb);
  mb = mailimf_mailbox_new(strdup("Christophe GIAUME"),
    strdup("christophe@giaume.com"));
  list = clist_append(mb);
  
  mb_list = mailimf_mailbox_list_new(list);
  /* do the things */
  mailimf_mailbox_list_free(mb_list);
  
  return 0;
}

/* display a list of mailboxes */

#include &lt;libetpan/libetpan.h&gt;
#include &lt;stdio.h&gt;

void display_mailbox_list(struct mailimf_mailbox_list * mb_list)
{
  clistiter * cur;

  for(cur = clist_begin(mb_list-&gt;mb_list) ; cur != NULL ;
    cur = clist_next(cur)) {
    struct mailimf_mailbox * mb;
    
    mb = clist_content(cur);
    
    display_mailbox(mb);
    printf("\n");
  }
}
          </PRE
></DIV
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="MAILIMF-ADDRESS-LIST"
>mailimf_address_list - list of addresses</A
></H2
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

struct mailimf_address_list {
  clist * ad_list; /* list of (struct mailimf_address *), != NULL */
};

struct mailimf_address_list *
mailimf_address_list_new(clist * ad_list);

void mailimf_address_list_free(struct mailimf_address_list * addr_list);
        </PRE
><P
>          This is a list of addresses.
        </P
><P
>          <B
CLASS="COMMAND"
>ad_list</B
> is a list of addresses. This is a
          <B
CLASS="COMMAND"
>clist</B
> which elements are 
          of type mailimf_address (see <A
HREF="x425.htm#MAILIMF-ADDRESS"
>the Section called <I
>mailimf_address - address</I
></A
>).
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_address_list_new()</B
> creates and
          initializes a data structure with 
          a value. Structures given as argument are referenced by the
          created object and will be freed if the object is released.
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_address_list_free()</B
> frees memory
          used by the structure and substructures will also be released.
        </P
><DIV
CLASS="EXAMPLE"
><A
NAME="AEN495"
></A
><P
><B
>Example 3-5. creation and display of list of addresses</B
></P
><PRE
CLASS="PROGRAMLISTING"
>/* creates a list of addresses with two addresses */

#include &lt;libetpan/libetpan.h&gt;

int main(int argc, char ** argv)
{
  struct mailimf_address_list * addr_list;
  clist * list;  
  struct mailimf_mailbox * mb;
  struct mailimf_address * addr;
  
  list = clist_new();
  mb = mailimf_mailbox_new(strdup("DINH =?iso-8859-1?Q?Vi=EAt_Ho=E0?="),
    strdup("dinh.viet.hoa@free.fr"));
  addr = mailimf_address_new(MAILIMF_ADDRESS_MAILBOX, mb, NULL);
  list = clist_append(addr);
  
  mb = mailimf_mailbox_new(strdup("Christophe GIAUME"),
    strdup("christophe@giaume.com"));
  addr = mailimf_address_new(MAILIMF_ADDRESS_MAILBOX, mb, NULL);
  list = clist_append(addr);
  
  addr_list = mailimf_address_list_new(list);
  /* do the things */
  mailimf_address_list_free(mb_list);
  
  return 0;
}

/* display a list of addresses */

#include &lt;libetpan/libetpan.h&gt;
#include &lt;stdio.h&gt;

void display_address_list(struct mailimf_address_list * addr_list)
{
  clistiter * cur;

  for(cur = clist_begin(addr_list-&gt;ad_list) ; cur != NULL ;
    cur = clist_next(cur)) {
    struct mailimf_address * addr;
    
    addr = clist_content(cur);
    
    display_address(addr);
    printf("\n");
  }
}
            </PRE
></DIV
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="MAILIMF-GROUP"
>mailimf_group - named group of mailboxes</A
></H2
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

struct mailimf_group {
  char * grp_display_name; /* != NULL */
  struct mailimf_mailbox_list * grp_mb_list; /* can be NULL */
};

struct mailimf_group *
mailimf_group_new(char * grp_display_name,
    struct mailimf_mailbox_list * grp_mb_list);

void mailimf_group_free(struct mailimf_group * group);
        </PRE
><P
>          This is a list of mailboxes tagged with a name.
        </P
><DIV
CLASS="EXAMPLE"
><A
NAME="AEN502"
></A
><P
><B
>Example 3-6. example of group</B
></P
><PRE
CLASS="PROGRAMLISTING"
>            they play music: &lt;steve@morse.foo&gt;, &lt;neal@morse.foo&gt;,
            &lt;yngwie@malmsteen.bar&gt;, &lt;michael@romeo.bar&gt;;
          </PRE
></DIV
><P
>          <B
CLASS="COMMAND"
>grp_display_name</B
> is the name that will be
          displayed for this group,
          for example '<B
CLASS="COMMAND"
>group_name</B
>' in
          '<B
CLASS="COMMAND"
>group_name: address1@domain1,
            address2@domain2;</B
>'.
          This must be allocated with malloc().
          <B
CLASS="COMMAND"
>grp_mb_list</B
> is a list of mailboxes
          (see <A
HREF="x425.htm#MAILIMF-MAILBOX-LIST"
>the Section called <I
>mailimf_mailbox_list - list of mailboxes</I
></A
>).
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_group_new()</B
> creates and initializes
          a data structure with a value.
          Structures given as argument are referenced by the created
          object and will be freed if the object is released.
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_group_free()</B
> frees memory used by
          the structure and substructures will also be released.
        </P
><DIV
CLASS="EXAMPLE"
><A
NAME="AEN515"
></A
><P
><B
>Example 3-7. creation and display of a group</B
></P
><PRE
CLASS="PROGRAMLISTING"
>/* creates an empty group */

#include &lt;libetpan/libetpan.h&gt;

int main(int argc, char ** argv)
{
  struct mailimf_group * g;
  char * display_name;
  
  display_name = strdup("undisclosed-recipient");
  g = mailimf_group_new(display_name, NULL);
  /* do the things */
  mailimf_group_free(g);
}

/* creates a group with two mailboxes */

#include &lt;libetpan/libetpan.h&gt;

int main(int argc, char ** argv)
{
  struct mailimf_group * g;
  char * display_name;
  struct mailimf_mailbox_list * mb_list;
  struct mailimf_mailbox * mb;
  clist * list;  
  
  list = clist_new();
  mb = mailimf_mailbox_new(strdup("DINH =?iso-8859-1?Q?Vi=EAt_Ho=E0?="),
    strdup("dinh.viet.hoa@free.fr"));
  list = clist_append(mb);
  mb = mailimf_mailbox_new(strdup("Christophe GIAUME"),
    strdup("christophe@giaume.com"));
  list = clist_append(mb);
  
  mb_list = mailimf_mailbox_list_new(list);
  
  display_name = strdup("my_group");
  g = mailimf_group_new(display_name, mb_list);
  /* do the things */
  mailimf_group_free(g);
  
  return 0;
}

/* display content of group */

#include &lt;libetpan/libetpan.h&gt;
#include &lt;stdio.h&gt;

void display_group(struct mailimf_group * group)
{
  printf("name of the group: %s\n", a-&gt;group-&gt;display_name);
  for(cur = clist_begin(a-&gt;group-&gt;mb_list-&gt;list) ; cur != NULL ;
    cur = clist_next(cur)) {
    struct mailimf_mailbox * mb;

    mb = clist_content(cur);
    display_mailbox(mb);
    printf("\n");
  }
}
          </PRE
></DIV
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="MAILIMF-DATE-TIME"
>mailimf_date_time - date of a message</A
></H2
><P
>#include &lt;libetpan/libetpan.h&gt;

struct mailimf_date_time {
  int dt_day;
  int dt_month;
  int dt_year;
  int dt_hour;
  int dt_min;
  int dt_sec;
  int dt_zone;
};

struct mailimf_date_time *
mailimf_date_time_new(int dt_day, int dt_month, int dt_year,
    int dt_hour, int dt_min, int dt_sec, int dt_zone);

void mailimf_date_time_free(struct mailimf_date_time * date_time);
        </P
><P
>          This is the date and time of a message.
          For example :
        </P
><DIV
CLASS="EXAMPLE"
><A
NAME="AEN522"
></A
><P
><B
>Example 3-8. example of date</B
></P
><PRE
CLASS="PROGRAMLISTING"
>Thu, 11 Dec 2003 00:15:02 +0100.
          </PRE
></DIV
><P
></P
><UL
><LI
><P
>              <B
CLASS="COMMAND"
>dt_day</B
> is the day of month (1 to 31)
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>dt_month</B
> (1 to 12)
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>dt_year</B
> (4 digits)
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>dt_hour</B
> (0 to 23)
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>dt_min</B
> (0 to 59)
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>dt_sec</B
> (0 to 59)
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>dt_zone</B
> (this is the decimal value that
              we can read, for example: for
              '<B
CLASS="COMMAND"
>-0200</B
>', the value is
              <B
CLASS="COMMAND"
>-200</B
>).
            </P
></LI
></UL
><P
>          <B
CLASS="COMMAND"
>mailimf_date_time_new()</B
> creates and
          initializes a date structure with a value.
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_date_time_free()</B
> frees memory used
          by the structure.
        </P
><DIV
CLASS="EXAMPLE"
><A
NAME="AEN553"
></A
><P
><B
>Example 3-9. creation and display of date</B
></P
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

int main(int argc, char ** argv)
{
  struct mailimf_date_time * d;
  
  d = mailimf_date_time_new(9, 5, 2003, 3, 01, 40, -0200);
  /* do the things */
  mailimf_date_time_free(d);
  
  return 0;
}

/* display the date */

#include &lt;libetpan/libetpan.h&gt;
#include &lt;stdio.h&gt;

void display_date(struct mailimf_date_time * d)
{
  printf("%02i/%02i/%i %02i:%02i:%02i %+04i\n",
    d-&gt;dt_day, d-&gt;dt_month, d-&gt;dt_year,
    d-&gt;dt_hour, d-&gt;dt_min, d-&gt;dt_sec, d-&gt;dt_zone);
}
          </PRE
></DIV
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="MAILIMF-ORIG-DATE"
>mailimf_orig_date - parsed content of date header</A
></H2
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

struct mailimf_orig_date {
  struct mailimf_date_time * dt_date_time; /* != NULL */
};

struct mailimf_orig_date * mailimf_orig_date_new(struct mailimf_date_time *
    dt_date_time);

void mailimf_orig_date_free(struct mailimf_orig_date * orig_date);
        </PRE
><P
>          This is the content of a header <B
CLASS="COMMAND"
>Date</B
> or
          <B
CLASS="COMMAND"
>Resent-Date</B
>.
          It encapsulates a mailimf_date_time
        </P
><P
>          <B
CLASS="COMMAND"
>dt_date_time</B
> is the parsed date
          (see <A
HREF="x425.htm#MAILIMF-DATE-TIME"
>the Section called <I
>mailimf_date_time - date of a message</I
></A
>).
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_orig_date_new()</B
> creates and
          initializes a data structure with 
          a value. Structures given as argument are referenced by the
          created object and will be freed if the object is released.
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_orig_date_free()</B
> frees memory used
          by the structure and substructures will also be released.
        </P
><DIV
CLASS="EXAMPLE"
><A
NAME="AEN569"
></A
><P
><B
>Example 3-10. creation and display of Date field</B
></P
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

int main(int argc, char ** argv)
{
  struct mailimf_date_time * d;
  struct mailimf_orig_date * date;
  
  d = mailimf_date_time_new(9, 5, 2003, 3, 01, 40, -0200);
  date = mailimf_orig_date_new(d);
  /* do the things */
  mailimf_orig_date_free(date);
  
  return 0;
}

/* display date header */

#include &lt;libetpan/libetpan.h&gt;

void display_orig_date(struct mailimf_orig_date * orig_date)
{
  display_date_time(d-&gt;dt_date_time);
}
          </PRE
></DIV
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="MAILIMF-FROM"
>mailimf_from - parsed content of From header</A
></H2
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

struct mailimf_from {
  struct mailimf_mailbox_list * frm_mb_list; /* != NULL */
};

struct mailimf_from *
mailimf_from_new(struct mailimf_mailbox_list * frm_mb_list);

void mailimf_from_free(struct mailimf_from * from);
        </PRE
><P
>          This is the content of a header <B
CLASS="COMMAND"
>From</B
> or
          <B
CLASS="COMMAND"
>Resent-From</B
>.
        </P
><P
>          <B
CLASS="COMMAND"
>frm_mb_list</B
> is the parsed mailbox list
          (see <A
HREF="x425.htm#MAILIMF-MAILBOX-LIST"
>the Section called <I
>mailimf_mailbox_list - list of mailboxes</I
></A
>).
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_from_new()</B
> creates and initializes
          a data structure with a value.
          Structures given as argument are referenced by the created
          object and will be freed if the object is released.
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_from_free()</B
> frees memory used by
          the structure and substructures will also be released.
        </P
><DIV
CLASS="EXAMPLE"
><A
NAME="AEN585"
></A
><P
><B
>Example 3-11. creation and display of a From header</B
></P
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

int main(int argc, char ** argv)
{
  clist * list;
  struct mailimf_mailbox * mb;
  struct mailimf_mailbox_list * mb_list;
  struct mailimf_from * from;
  
  list = clist_new();
  mb = mailimf_mailbox_new(strdup("DINH =?iso-8859-1?Q?Vi=EAt_Ho=E0?="),
    strdup("dinh.viet.hoa@free.fr"));
  clist_append(list, mb);
  mb_list = mailimf_mailbox_list_new(list);
  
  from = mailimf_from_new(mb_list);
  /* do the things */
  mailimf_from_free(from);
  
  return 0;
}

/* display content of from header */

#include &lt;libetpan/libetpan.h&gt;

void display_from(struct mailimf_from * from)
{
  display_mailbox_list(from-&gt;frm_mb_list);
}
            </PRE
></DIV
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="MAILIMF-SENDER"
>mailimf_sender - parsed content of Sender header</A
></H2
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

struct mailimf_sender {
  struct mailimf_mailbox * snd_mb; /* != NULL */
};

struct mailimf_sender * mailimf_sender_new(struct mailimf_mailbox * snd_mb);

void mailimf_sender_free(struct mailimf_sender * sender);
        </PRE
><P
>          This is the content of a header <B
CLASS="COMMAND"
>Sender</B
> or
          <B
CLASS="COMMAND"
>Resent-Sender</B
>.
        </P
><P
>          <B
CLASS="COMMAND"
>snd_mb</B
> is the parsed mailbox
          (see <A
HREF="x425.htm#MAILIMF-MAILBOX"
>the Section called <I
>mailimf_mailbox - mailbox</I
></A
>).
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_sender_new()</B
> creates and
          initializes a data structure with a value.
          Structures given as argument are referenced by the created
          object and will be freed if the object is released.
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_sender_free()</B
> This function frees
          memory used by the structure and substructures
          will also be released.
        </P
><DIV
CLASS="EXAMPLE"
><A
NAME="AEN601"
></A
><P
><B
>Example 3-12. creation and display of Sender field</B
></P
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

int main(int argc, char ** argv)
{
  struct mailimf_mailbox * mb;
  struct mailimf_sender * sender;
  
  mb = mailimf_mailbox_new(strdup("DINH =?iso-8859-1?Q?Vi=EAt_Ho=E0?="),
    strdup("dinh.viet.hoa@free.fr"));
  
  sender = mailimf_sender_new(mb);
  /* do the things */
  mailimf_sender_free(sender);
  
  return 0;
}

#include &lt;libetpan/libetpan.h&gt;
#include &lt;stdio.h&gt;

void display_sender(struct mailimf_sender * sender)
{
  display_mailbox(sender-&gt;snd_mb);
}
          </PRE
></DIV
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="MAILIMF-REPLY-TO"
>mailimf_reply_to - parsed content of Reply-To header</A
></H2
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

struct mailimf_reply_to {
  struct mailimf_address_list * rt_addr_list; /* != NULL */
};

struct mailimf_reply_to *
mailimf_reply_to_new(struct mailimf_address_list * rt_addr_list);

void mailimf_reply_to_free(struct mailimf_reply_to * reply_to);
        </PRE
><P
>          This is the content of a header <B
CLASS="COMMAND"
>Reply-To</B
>.
        </P
><P
>          <B
CLASS="COMMAND"
>addr_list</B
> is the parsed address list
          (see <A
HREF="x425.htm#MAILIMF-ADDRESS-LIST"
>the Section called <I
>mailimf_address_list - list of addresses</I
></A
>).
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_reply_to_new()</B
> creates and
          initializes a data structure with a value. Structures given
          as argument are referenced by the created object and will be
          freed if the object is released.
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_reply_to_free()</B
> frees memory used
          by the structure and substructures will also be released.
        </P
><DIV
CLASS="EXAMPLE"
><A
NAME="AEN616"
></A
><P
><B
>Example 3-13. creation and display of Reply-To field</B
></P
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

int main(int argc, char ** argv)
{
  clist * list;
  struct mailimf_mailbox * mb;
  struct mailimf_address * addr;
  struct mailimf_address_list * addr_list;
  struct mailimf_reply_to * reply_to;
  
  list = clist_new();
  
  mb = mailimf_mailbox_new(strdup("DINH =?iso-8859-1?Q?Vi=EAt_Ho=E0?="),
    strdup("dinh.viet.hoa@free.fr"));
  addr = mailimf_address_new(MAILIMF_ADDRESS_MAILBOX, mb, NULL);
  clist_append(list, addr);
  
  mb = mailimf_mailbox_new(strdup("Christophe GIAUME"),
    strdup("christophe@giaume.com"));
  addr = mailimf_address_new(MAILIMF_ADDRESS_MAILBOX, mb, NULL);
  clist_append(list, addr);
  
  addr_list = mailimf_address_list_new(list);
  
  reply_to = mailimf_reply_to_new(addr_list);
  /* do the things */
  mailimf_reply_to_free(reply_to);
  
  return 0;
}

/* display Reply-To header */

#include &lt;libetpan/libetpan.h&gt;

void display_reply_to(struct mailimf_reply_to * reply_to)
{
  display_address_list(reply_to-&gt;addr_list);
}
          </PRE
></DIV
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="MAILIMF-TO"
>mailimf_to - parsed content of To header</A
></H2
><PRE
CLASS="PROGRAMLISTING"
>        struct mailimf_to {
  struct mailimf_address_list * to_addr_list; /* != NULL */
};

struct mailimf_to * mailimf_to_new(struct mailimf_address_list * to_addr_list);

void mailimf_to_free(struct mailimf_to * to);
        </PRE
><P
>          This is the content of a header <B
CLASS="COMMAND"
>To</B
> or
          <B
CLASS="COMMAND"
>Resent-To</B
>.
        </P
><P
>          <B
CLASS="COMMAND"
>to_addr_list</B
> is the parsed address list
          (see <A
HREF="x425.htm#MAILIMF-ADDRESS-LIST"
>the Section called <I
>mailimf_address_list - list of addresses</I
></A
>).
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_to_new()</B
> creates and initializes a
          data structure with a value. Structures given as argument
          are referenced by the created
          object and will be freed if the object is released.
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_to_free()</B
> frees memory used by the
          structure and substructures will also be released.
        </P
><DIV
CLASS="EXAMPLE"
><A
NAME="AEN632"
></A
><P
><B
>Example 3-14. creation and display of To field</B
></P
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

int main(int argc, char ** argv)
{
  clist * list;
  struct mailimf_mailbox * mb;
  struct mailimf_address * addr;
  struct mailimf_address_list * addr_list;
  struct mailimf_to * to;
  
  list = clist_new();
  
  mb = mailimf_mailbox_new(strdup("DINH =?iso-8859-1?Q?Vi=EAt_Ho=E0?="),
    strdup("dinh.viet.hoa@free.fr"));
  addr = mailimf_address_new(MAILIMF_ADDRESS_MAILBOX, mb, NULL);
  clist_append(list, addr);
  
  mb = mailimf_mailbox_new(strdup("Christophe GIAUME"),
    strdup("christophe@giaume.com"));
  addr = mailimf_address_new(MAILIMF_ADDRESS_MAILBOX, mb, NULL);
  clist_append(list, addr);
  
  addr_list = mailimf_address_list_new(list);
  
  to = mailimf_to_new(addr_list);
  /* do the things */
  mailimf_to_free(to);
  
  return 0;
}

/* display To header */

#include &lt;libetpan/libetpan.h&gt;

void display_to(struct mailimf_to * to)
{
  display_address_list(to-&gt;to_addr_list);
}
          </PRE
></DIV
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="MAILIMF-CC"
>mailimf_cc - parsed content of Cc</A
></H2
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

struct mailimf_cc {
  struct mailimf_address_list * cc_addr_list; /* != NULL */
};

struct mailimf_cc *
mailimf_cc_new(struct mailimf_address_list * cc_addr_list);

void mailimf_cc_free(struct mailimf_cc * cc);</PRE
><P
>          This is the content of a header <B
CLASS="COMMAND"
>Cc</B
> or
          <B
CLASS="COMMAND"
>Resent-Cc</B
>.
        </P
><P
>          <B
CLASS="COMMAND"
>cc_addr_list</B
> is the parsed address list
          (see <A
HREF="x425.htm#MAILIMF-ADDRESS-LIST"
>the Section called <I
>mailimf_address_list - list of addresses</I
></A
>).
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_cc_new()</B
> creates and initializes a
          data structure with a value. Structures given as argument
          are referenced by the created object and will be freed if
          the object is released.
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_cc_free()</B
> This function frees
          memory used by the structure and substructures will also be
          released.
        </P
><DIV
CLASS="EXAMPLE"
><A
NAME="AEN648"
></A
><P
><B
>Example 3-15. creation and display of Cc field</B
></P
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

int main(int argc, char ** argv)
{
  clist * list;
  struct mailimf_mailbox * mb;
  struct mailimf_address * addr;
  struct mailimf_address_list * addr_list;
  struct mailimf_cc * cc;
  
  list = clist_new();
  
  mb = mailimf_mailbox_new(strdup("DINH =?iso-8859-1?Q?Vi=EAt_Ho=E0?="),
    strdup("dinh.viet.hoa@free.fr"));
  addr = mailimf_address_new(MAILIMF_ADDRESS_MAILBOX, mb, NULL);
  clist_append(list, addr);
  
  mb = mailimf_mailbox_new(strdup("Christophe GIAUME"),
    strdup("christophe@giaume.com"));
  addr = mailimf_address_new(MAILIMF_ADDRESS_MAILBOX, mb, NULL);
  clist_append(list, addr);
  
  addr_list = mailimf_address_list_new(list);
  
  cc = mailimf_cc_new(addr_list);
  /* do the things */
  mailimf_cc_free(cc);
  
  return 0;
}

/* display content of Cc field */

#include &lt;libetpan/libetpan.h&gt;

void display_cc(struct mailimf_cc * cc)
{
  display_address_list(cc-&gt;cc_addr_list);
}

          </PRE
></DIV
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="MAILIMF-BCC"
>mailimf_bcc - parsed content of Bcc field</A
></H2
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

struct mailimf_bcc {
  struct mailimf_address_list * bcc_addr_list; /* can be NULL */
};

struct mailimf_bcc *
mailimf_bcc_new(struct mailimf_address_list * bcc_addr_list);

void mailimf_bcc_free(struct mailimf_bcc * bcc);
        </PRE
><P
>          This is the content of a header <B
CLASS="COMMAND"
>Bcc</B
> or
          <B
CLASS="COMMAND"
>Resent-Bcc</B
>.
        </P
><P
>          <B
CLASS="COMMAND"
>bcc_addr_list</B
> is the parsed address list
          (see <A
HREF="x425.htm#MAILIMF-ADDRESS-LIST"
>the Section called <I
>mailimf_address_list - list of addresses</I
></A
>).
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_bcc_new()</B
> creates and initializes a
          data structure with a value. Structures given as argument
          are referenced by the created object and will be freed if
          the object is released.
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_bcc_free()</B
> frees memory used by the
          structure and substructures will also be released.
        </P
><DIV
CLASS="EXAMPLE"
><A
NAME="AEN664"
></A
><P
><B
>Example 3-16. creation and display of Bcc field</B
></P
><PRE
CLASS="PROGRAMLISTING"
>/* create visible Bcc */

#include &lt;libetpan/libetpan.h&gt;

int main(int argc, char ** argv)
{
  clist * list;
  struct mailimf_mailbox * mb;
  struct mailimf_address * addr;
  struct mailimf_address_list * addr_list;
  struct mailimf_bcc * bcc;
  
  list = clist_new();
  
  mb = mailimf_mailbox_new(strdup("DINH =?iso-8859-1?Q?Vi=EAt_Ho=E0?="),
    strdup("dinh.viet.hoa@free.fr"));
  addr = mailimf_address_new(MAILIMF_ADDRESS_MAILBOX, mb, NULL);
  clist_append(list, addr);
  
  mb = mailimf_mailbox_new(strdup("Christophe GIAUME"),
    strdup("christophe@giaume.com"));
  addr = mailimf_address_new(MAILIMF_ADDRESS_MAILBOX, mb, NULL);
  clist_append(list, addr);
  
  addr_list = mailimf_address_list_new(list);
  
  bcc = mailimf_bcc_new(addr_list);
  /* do the things */
  mailimf_bcc_free(bcc);
  
  return 0;
}

/* create unvisible Bcc */

#include &lt;libetpan/libetpan.h&gt;

int main(int argc, char ** argv)
{
  struct mailimf_bcc * bcc;
  
  bcc = mailimf_bcc_new(NULL);
  /* do the things */
  mailimf_bcc_free(bcc);
  
  return 0;
}

/* display content of Bcc field */

#include &lt;libetpan/libetpan.h&gt;
#include &lt;stdio.h&gt;

void display_bcc(struct mailimf_bcc * bcc)
{
  if (bcc-&gt;addr_list == NULL) {
    printf("hidden Bcc\n");
  }
  else {
    display_address_list(bcc-&gt;bcc_addr_list);
  }
}
            </PRE
></DIV
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="MAILIMF-MESSAGE-ID"
>mailimf_message_id - parsed content of Message-ID header</A
></H2
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

struct mailimf_message_id {
  char * mid_value; /* != NULL */
};

struct mailimf_message_id * mailimf_message_id_new(char * mid_value);

void mailimf_message_id_free(struct mailimf_message_id * message_id);
        </PRE
><P
>          This is the content of a header <B
CLASS="COMMAND"
>Message-ID</B
>
          or <B
CLASS="COMMAND"
>Resent-Message-ID</B
>. For example :
        </P
><DIV
CLASS="EXAMPLE"
><A
NAME="AEN673"
></A
><P
><B
>Example 3-17. example of Message-ID</B
></P
><PRE
CLASS="PROGRAMLISTING"
>Message-ID: &lt;200312100009.43592@c01n-c01n.plop.P4N&#62;&gt;
          </PRE
></DIV
><P
>          <B
CLASS="COMMAND"
>mid_value</B
> is the message identifier.
          It is not enclosed by angle bracket.
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_message_id_new()</B
> This function
          creates and initializes a data structure with a value.
          Structures given as argument are referenced by the created
          object and will be freed if the object is released.
        </P
><P
>          The given string is allocated with
          <B
CLASS="COMMAND"
>malloc()</B
> and is not enclosed by angle bracket.
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_message_id_free()</B
> frees memory
          used by the structure and substructures will also be
          released.
        </P
><DIV
CLASS="EXAMPLE"
><A
NAME="AEN684"
></A
><P
><B
>Example 3-18. creation and display of Message-ID field</B
></P
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

int main(int argc, char ** argv)
{
  struct mailimf_message_id * msg_id;
  char * id;  
  
  id = strdup("1037197913.3dd26259752fa@imp.free.fr");
  msg_id = mailimf_message_id_new(id);
  /* do the things */
  mailimf_message_id_free(msg_id);
  
  return 0;
}

/* display message id */

#include &lt;libetpan/libetpan.h&gt;
#include &lt;stdio.h&gt;

void display_message_id(struct mailimf_message_id * msg_id)
{
  printf("%s\n", msg_id-&#62;mid_value);
}
          </PRE
></DIV
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="MAILIMF-IN-REPLY-TO"
>mailimf_in_reply_to - parsed content of In-Reply-To
        field</A
></H2
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

struct mailimf_in_reply_to {
  clist * mid_list; /* list of (char *), != NULL */
};

struct mailimf_in_reply_to * mailimf_in_reply_to_new(clist * mid_list);

void mailimf_in_reply_to_free(struct mailimf_in_reply_to * in_reply_to);
        </PRE
><P
>          content of a header <B
CLASS="COMMAND"
>In-Reply-To</B
>.
          For example :
        </P
><PRE
CLASS="PROGRAMLISTING"
>In-Reply-To: &lt;etPan.3fd5fa29.4c3901c1.6b39@homer&gt;
        </PRE
><P
>          <B
CLASS="COMMAND"
>mid_list</B
> is a <B
CLASS="COMMAND"
>clist</B
>
          in which elements are message identifiers.
          their types are <B
CLASS="COMMAND"
>(char *)</B
> and they are
          allocated with <B
CLASS="COMMAND"
>malloc()</B
>.
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_in_reply_to_new()</B
> creates and
          initializes a data structure with a value. Structures given
          as argument are referenced by the created object and will be
          freed if the object is released.
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_in_reply_to_free()</B
> frees memory
          used by the structure and substructures will also be
          released.
        </P
><DIV
CLASS="EXAMPLE"
><A
NAME="AEN702"
></A
><P
><B
>Example 3-19. creation and display of In-Reply-To field</B
></P
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

int main(int argc, char ** argv)
{
  struct mailimf_in_reply_to * in_reply_to;
  clist * msg_id_list;  
  
  msg_id_list = clist_new();
  clist_append(msg_id_list,
    strdup("etPan.3ebbcc18.4014197f.bc1@homer.invalid"));
  
  in_reply_to = mailimf_in_reply_to_new(msg_id_list);
  /* do the things */
  mailimf_in_reply_to_free(in_reply_to);
  
  return 0;
}

/* display the content of mailimf_in_reply_to */

#include &lt;libetpan/libetpan.h&gt;
#include &lt;stdio.h&gt;

void display_in_reply_to(struct mailimf_in_reply_to * in_reply_to)
{
  clistiter * cur;
  
  for(cur = clist_begin(in_reply_to-&gt;mid_list) ; cur != NULL ;
    cur = clist_next(cur)) {
    char * str;
    
    str = clist_content(cur);
    
    printf("%s\n", str);
  }
}
          </PRE
></DIV
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="MAILIMF-REFERENCES"
>mailimf_references - parsed content of References field</A
></H2
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

struct mailimf_references {
  clist * mid_list; /* list of (char *) */
       /* != NULL */
};

struct mailimf_references * mailimf_references_new(clist * mid_list);

void mailimf_references_free(struct mailimf_references * references);
          </PRE
><P
>          This is the content of a header <B
CLASS="COMMAND"
>References</B
>.
          For example :
        </P
><PRE
CLASS="PROGRAMLISTING"
>In-Reply-To: &lt;etPan.3fd5fa29.4c3901c1.6b39@homer&gt;
  &lt;3FD5FA78.A1D98E7@oleane.net&gt;
  &lt;etPan.3fd5fc69.2b349482.730e@homer&gt;
        </PRE
><P
>          <B
CLASS="COMMAND"
>mid_list</B
> is a <B
CLASS="COMMAND"
>clist</B
>
          in which elements are message identifiers.
          their types are <B
CLASS="COMMAND"
>(char *)</B
> and they are
          allocated with <B
CLASS="COMMAND"
>malloc()</B
>.
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_references_new()</B
> creates and
          initializes a data structure with a value. Structures given
          as argument are referenced by the created object and will be
          freed if the object is released.
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_references_free()</B
> frees memory
          used by the structure and substructures will also be
          released.
        </P
><DIV
CLASS="EXAMPLE"
><A
NAME="AEN720"
></A
><P
><B
>Example 3-20. creation and display of References field</B
></P
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

int main(int argc, char ** argv)
{
  struct mailimf_references * ref;
  clist * msg_id_list;  
  
  msg_id_list = clist_new();
  clist_append(msg_id_list,
    strdup("200304280144.23633.wim.delvaux@adaptiveplanet.com"));
  clist_append(msg_id_list,
    strdup("200304301153.19688.wim.delvaux@adaptiveplanet.com"));
  clist_append(msg_id_list,
    strdup("etPan.3eb29de4.5fc4d652.3f83@homer"));
  
  ref = mailimf_references_new(msg_id_list);
  /* do the things */
  mailimf_in_reply_to_free(ref);
  
  return 0;
}

/* display references */

#include &lt;libetpan/libetpan.h&gt;
#include &lt;stdio.h&gt;

void display_references(struct mailimf_references * ref)
{
  clistiter * cur;

  for(cur = clist_begin(ref-&gt;mid_list) ; cur != NULL ;
    cur = clist_next(cur)) {
    char * msg_id;
    
    msg_id = clist_content(cur);
    
    printf("%s\n", msg_id);
  }
}
          </PRE
></DIV
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="MAILIMF-SUBJECT"
>mailimf_subject - parsed content of Subject field</A
></H2
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

struct mailimf_subject {
  char * sbj_value; /* != NULL */
};

struct mailimf_subject * mailimf_subject_new(char * sbj_value);

void mailimf_subject_free(struct mailimf_subject * subject);</PRE
><P
>          This is the content of a header <B
CLASS="COMMAND"
>Subject</B
>.
        </P
><P
>          <B
CLASS="COMMAND"
>sbj_value</B
> is the value of the field.
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_subject_new()</B
> creates and
          initializes a data structure with a value.
          Structures given as argument are referenced by the created
          object and will be freed if the object is released.
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_subject_free</B
> frees memory used by
          the structure and substructures will also be released.
        </P
><DIV
CLASS="EXAMPLE"
><A
NAME="AEN734"
></A
><P
><B
>Example 3-21. creation and display of Subject field</B
></P
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

int main(int argc, char ** argv)
{
  struct mailimf_subject * subject;  

  subject = mailimf_subject_new(strdup("example of subject"));
  /* do the things */
  mailimf_subject_free(subject);
  
  return 0;
}

/* display subject header */

#include &lt;libetpan/libetpan.h&gt;
#include &lt;stdio.h&gt;

void display_subject(struct mailimf_subject * subject)
{
  printf("%s\n", subject-&#62;value);
}
          </PRE
></DIV
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="MAILIMF-COMMENTS"
>mailimf_comments - parsed content of Comments field</A
></H2
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

struct mailimf_comments {
  char * cm_value; /* != NULL */
};

struct mailimf_comments * mailimf_comments_new(char * cm_value);

void mailimf_comments_free(struct mailimf_comments * comments);
          </PRE
><P
>          This is the content of a header <B
CLASS="COMMAND"
>Comments</B
>.
        </P
><P
>          <B
CLASS="COMMAND"
>cm_value</B
> is the value of the field.
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_comments_new()</B
> creates and
          initializes a data structure with a value.
          Structures given as argument are referenced by the created
          object and will be freed if the object is released.
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_comments_free()</B
> frees memory used
          by the structure and substructures will also be released.
        </P
><DIV
CLASS="EXAMPLE"
><A
NAME="AEN748"
></A
><P
><B
>Example 3-22. creation and display of Comment field</B
></P
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

int main(int argc, char ** argv)
{
  struct mailimf_comments * comments;

  comments = mailimf_comments_new(strdup("example of comment"));
  /* do the things */
  mailimf_comments_free(comments);
  
  return 0;
}

/* display the content of a comments */

#include &lt;libetpan/libetpan.h&gt;
#include &lt;stdio.h&gt;

void display_comments(struct mailimf_comments * comments)
{
  printf("%s\n", comments-&#62;cm_value);
}
          </PRE
></DIV
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="MAILIMF-KEYWORDS"
>mailimf_keywords - parsed content of Keywords field</A
></H2
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

struct mailimf_keywords {
  clist * kw_list; /* list of (char *), != NULL */
};

struct mailimf_keywords * mailimf_keywords_new(clist * kw_list);

void mailimf_keywords_free(struct mailimf_keywords * keywords);
          </PRE
><P
>          This is the content of a header <B
CLASS="COMMAND"
>Keywords</B
>.
        </P
><P
>          <B
CLASS="COMMAND"
>kw_list</B
> is the list of keywords. This is
          a list of <B
CLASS="COMMAND"
>(char *)</B
> allocated with malloc().
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_keywords_new()</B
> creates and
          initializes a data structure with a value.
          Structures given as argument are referenced by the created
          object and will be freed if the object is released.
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_keywords_free()</B
> frees memory used
          by the structure and substructures will also be released.
        </P
><DIV
CLASS="EXAMPLE"
><A
NAME="AEN763"
></A
><P
><B
>Example 3-23. creation and display of Keywords field</B
></P
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

int main(int argc, char ** argv)
{
  struct mailimf_keywords * keywords;
  clist * list;
  
  list = clist_new();
  clist_append(list, strdup("sauerkraut"));
  clist_append(list, strdup("potatoes"));
  clist_append(list, strdup("cooking"));
  
  keywords = mailimf_keywords_new(list);
  /* do the things */
  mailimf_keywords_free(keywords);
  
  return 0;
}

/* display the content of mailimf_in_reply_to */

#include &lt;libetpan/libetpan.h&gt;
#include &lt;stdio.h&gt;

void display_keywords(struct mailimf_keywords * kw)
{
  clistiter * cur;
  
  for(cur = clist_begin(kw-&gt;kw_list) ; cur != NULL ;
    cur = clist_next(cur)) {
    char * str;
    
    str = clist_content(cur);
    
    printf("%s\n", str);
  }
}
          </PRE
></DIV
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="MAILIMF-RETURN"
>mailimf_return - parsed content of Return-Path field</A
></H2
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

struct mailimf_return {
  struct mailimf_path * ret_path; /* != NULL */
};

struct mailimf_return *
mailimf_return_new(struct mailimf_path * ret_path);

void mailimf_return_free(struct mailimf_return * return_path);
        </PRE
><P
>          This is the content of a header
          <B
CLASS="COMMAND"
>Return-Path</B
>.
        </P
><P
>          <B
CLASS="COMMAND"
>ret_path</B
> is the parsed value of Return-Path
          (see <A
HREF="x425.htm#MAILIMF-PATH"
>the Section called <I
>mailimf_path - address in Return-Path field</I
></A
>).
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_return_new()</B
> creates and
          initializes a data structure with a value.
          Structures given as argument are referenced by the created
          object and will be freed if the object is released.
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_return_free()</B
> frees memory used
          by the structure and substructures will also be released.
        </P
><DIV
CLASS="EXAMPLE"
><A
NAME="AEN778"
></A
><P
><B
>Example 3-24. creation and display of Return-Path field</B
></P
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

int main(int argc, char ** argv)
{
  struct mailimf_path * path;
  struct mailimf_return * r;
  
  path = mailimf_path_new(strdup("dinh.viet.hoa@free.fr"));
  r = mailimf_return_new(path);
  /* do the things */
  mailimf_return_free(r);
  
  return 0;
}

/* display return path */

#include &lt;libetpan/libetpan.h&gt;

void display_return(struct mailimf_return * r)
{
  display_path(r-&gt;ret_path);
}
          </PRE
></DIV
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="MAILIMF-PATH"
>mailimf_path - address in Return-Path field</A
></H2
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

struct mailimf_path {
  char * pt_addr_spec; /* can be NULL */
};

struct mailimf_path * mailimf_path_new(char * pt_addr_spec);

void mailimf_path_free(struct mailimf_path * path);
        </PRE
><P
>          This is the encapsulation of address specifier for
          <B
CLASS="COMMAND"
>Return-Path</B
> content.
        </P
><P
>          <B
CLASS="COMMAND"
>pt_addr_spec</B
> is a mailbox destination.
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_path_new()</B
> creates and
          initializes a data structure with a value.
          Structures given as argument are referenced by the created
          object and will be freed if the object is released.
        </P
><P
>          The given string is allocated with
          <B
CLASS="COMMAND"
>malloc()</B
>. This is a address
          specifier.
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_path_free()</B
> frees memory used by
          the structure and substructures will also be released.
        </P
><DIV
CLASS="EXAMPLE"
><A
NAME="AEN794"
></A
><P
><B
>Example 3-25. Creation and display of return path</B
></P
><PRE
CLASS="PROGRAMLISTING"
>        
#include &lt;libetpan/libetpan.h&gt;

int main(int argc, char ** argv)
{
  struct mailimf_path * path;
  
  path = mailimf_path_new(strdup("dinh.viet.hoa@free.fr"));
  /* do the things */
  mailimf_path_free(r);
  
  return 0;
}

/* display return path */

#include &lt;libetpan/libetpan.h&gt;
#include &lt;stdio.h&gt;

void display_path(struct mailimf_path * path)
{
  printf("%s\n", path-&gt;pt_addr_spec);
}
          </PRE
></DIV
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="MAILIMF-OPTIONAL-FIELD"
>mailimf_optional_field - non-standard header</A
></H2
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

struct mailimf_optional_field {
  char * fld_name;  /* != NULL */
  char * fld_value; /* != NULL */
};

struct mailimf_optional_field *
mailimf_optional_field_new(char * fld_name, char * fld_value);

void mailimf_optional_field_free(struct mailimf_optional_field * opt_field);
        </PRE
><P
>          This is a non-standard header or unparsed header.
        </P
><P
></P
><UL
><LI
><P
>              <B
CLASS="COMMAND"
>fld_name</B
> is the name of the header
              field.
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>fld_value</B
> is the value of the header
              field.
            </P
></LI
></UL
><P
>          <B
CLASS="COMMAND"
>mailimf_optional_field_new()</B
> This
          function creates and initializes a data structure with a
          value. Structures given as argument are referenced by the
          created object and will be freed if the object is released.
        </P
><P
>          field name and field value have to be allocated with
          <B
CLASS="COMMAND"
>malloc()</B
>.
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_optional_field_free()</B
> This
          function frees memory used by the structure and 
          substructures will also be released.
        </P
><DIV
CLASS="EXAMPLE"
><A
NAME="AEN814"
></A
><P
><B
>Example 3-26. creation and display of non-standard fields</B
></P
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

int main(int argc, char ** argv)
{
  struct mailimf_optional_field * opt;
  
  opt = mailimf_optional_field_new(strdup("X-My-Field"), strdup("my value"));
  /* do the things */
  mailimf_optional_field_free(opt);
  
  return 0;
}

/* display the optional field */

#include &lt;libetpan/libetpan.h&gt;
#include &lt;stdio.h&gt;

void display_optional_field(struct mailimf_optional_field * opt)
{
  printf("%s: %s\n", opt-&gt;fld_name, opt-&gt;fld_value);
}
          </PRE
></DIV
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="MAILIMF-FIELD"
>mailimf_field - header field</A
></H2
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

enum {
  MAILIMF_FIELD_NONE,           /* on parse error */
  MAILIMF_FIELD_RETURN_PATH,    /* Return-Path */
  MAILIMF_FIELD_RESENT_DATE,    /* Resent-Date */
  MAILIMF_FIELD_RESENT_FROM,    /* Resent-From */
  MAILIMF_FIELD_RESENT_SENDER,  /* Resent-Sender */
  MAILIMF_FIELD_RESENT_TO,      /* Resent-To */
  MAILIMF_FIELD_RESENT_CC,      /* Resent-Cc */
  MAILIMF_FIELD_RESENT_BCC,     /* Resent-Bcc */
  MAILIMF_FIELD_RESENT_MSG_ID,  /* Resent-Message-ID */
  MAILIMF_FIELD_ORIG_DATE,      /* Date */
  MAILIMF_FIELD_FROM,           /* From */
  MAILIMF_FIELD_SENDER,         /* Sender */
  MAILIMF_FIELD_REPLY_TO,       /* Reply-To */
  MAILIMF_FIELD_TO,             /* To */
  MAILIMF_FIELD_CC,             /* Cc */
  MAILIMF_FIELD_BCC,            /* Bcc */
  MAILIMF_FIELD_MESSAGE_ID,     /* Message-ID */
  MAILIMF_FIELD_IN_REPLY_TO,    /* In-Reply-To */
  MAILIMF_FIELD_REFERENCES,     /* References */
  MAILIMF_FIELD_SUBJECT,        /* Subject */
  MAILIMF_FIELD_COMMENTS,       /* Comments */
  MAILIMF_FIELD_KEYWORDS,       /* Keywords */
  MAILIMF_FIELD_OPTIONAL_FIELD, /* other field */
};

struct mailimf_field {
  int fld_type;
  union {
    struct mailimf_return * fld_return_path;              /* can be NULL */
    struct mailimf_orig_date * fld_resent_date;    /* can be NULL */
    struct mailimf_from * fld_resent_from;         /* can be NULL */
    struct mailimf_sender * fld_resent_sender;     /* can be NULL */
    struct mailimf_to * fld_resent_to;             /* can be NULL */
    struct mailimf_cc * fld_resent_cc;             /* can be NULL */
    struct mailimf_bcc * fld_resent_bcc;           /* can be NULL */
    struct mailimf_message_id * fld_resent_msg_id; /* can be NULL */
    struct mailimf_orig_date * fld_orig_date;             /* can be NULL */
    struct mailimf_from * fld_from;                       /* can be NULL */
    struct mailimf_sender * fld_sender;                   /* can be NULL */
    struct mailimf_reply_to * fld_reply_to;               /* can be NULL */
    struct mailimf_to * fld_to;                           /* can be NULL */
    struct mailimf_cc * fld_cc;                           /* can be NULL */
    struct mailimf_bcc * fld_bcc;                         /* can be NULL */
    struct mailimf_message_id * fld_message_id;           /* can be NULL */
    struct mailimf_in_reply_to * fld_in_reply_to;         /* can be NULL */
    struct mailimf_references * fld_references;           /* can be NULL */
    struct mailimf_subject * fld_subject;                 /* can be NULL */
    struct mailimf_comments * fld_comments;               /* can be NULL */
    struct mailimf_keywords * fld_keywords;               /* can be NULL */
    struct mailimf_optional_field * fld_optional_field;   /* can be NULL */
  } fld_data;
};

struct mailimf_field *
mailimf_field_new(int fld_type,
    struct mailimf_return * fld_return_path,
    struct mailimf_orig_date * fld_resent_date,
    struct mailimf_from * fld_resent_from,
    struct mailimf_sender * fld_resent_sender,
    struct mailimf_to * fld_resent_to,
    struct mailimf_cc * fld_resent_cc,
    struct mailimf_bcc * fld_resent_bcc,
    struct mailimf_message_id * fld_resent_msg_id,
    struct mailimf_orig_date * fld_orig_date,
    struct mailimf_from * fld_from,
    struct mailimf_sender * fld_sender,
    struct mailimf_reply_to * fld_reply_to,
    struct mailimf_to * fld_to,
    struct mailimf_cc * fld_cc,
    struct mailimf_bcc * fld_bcc,
    struct mailimf_message_id * fld_message_id,
    struct mailimf_in_reply_to * fld_in_reply_to,
    struct mailimf_references * fld_references,
    struct mailimf_subject * fld_subject,
    struct mailimf_comments * fld_comments,
    struct mailimf_keywords * fld_keywords,
    struct mailimf_optional_field * fld_optional_field);

void mailimf_field_free(struct mailimf_field * field);
        </PRE
><P
>          This is one header field of a message.
        </P
><P
></P
><UL
><LI
><P
>              <B
CLASS="COMMAND"
>type</B
> is the type of the field. This define the
              type of the field.
              Only the corresponding field should be, then,
              filled. The value of this field can be one of :
              <B
CLASS="COMMAND"
>MAILIMF_FIELD_RETURN_PATH</B
>,
              <B
CLASS="COMMAND"
>MAILIMF_FIELD_RESENT_DATE</B
>,
              <B
CLASS="COMMAND"
>MAILIMF_FIELD_RESENT_FROM</B
>,
              <B
CLASS="COMMAND"
>MAILIMF_FIELD_RESENT_SENDER</B
>,
              <B
CLASS="COMMAND"
>MAILIMF_FIELD_RESENT_TO</B
>,
              <B
CLASS="COMMAND"
>MAILIMF_FIELD_RESENT_CC</B
>,
              <B
CLASS="COMMAND"
>MAILIMF_FIELD_RESENT_BCC</B
>,
              <B
CLASS="COMMAND"
>MAILIMF_FIELD_RESENT_MSG_ID</B
>,
              <B
CLASS="COMMAND"
>MAILIMF_FIELD_ORIG_DATE</B
>,
              <B
CLASS="COMMAND"
>MAILIMF_FIELD_FROM</B
>,
              <B
CLASS="COMMAND"
>MAILIMF_FIELD_SENDER</B
>,
              <B
CLASS="COMMAND"
>MAILIMF_FIELD_REPLY_TO</B
>,
              <B
CLASS="COMMAND"
>MAILIMF_FIELD_TO</B
>,
              <B
CLASS="COMMAND"
>MAILIMF_FIELD_CC</B
>,
              <B
CLASS="COMMAND"
>MAILIMF_FIELD_BCC</B
>,
              <B
CLASS="COMMAND"
>MAILIMF_FIELD_MESSAGE_ID</B
>,
              <B
CLASS="COMMAND"
>MAILIMF_FIELD_IN_REPLY_TO</B
>,
              <B
CLASS="COMMAND"
>MAILIMF_FIELD_REFERENCES</B
>,
              <B
CLASS="COMMAND"
>MAILIMF_FIELD_SUBJECT</B
>,
              <B
CLASS="COMMAND"
>MAILIMF_FIELD_COMMENTS</B
>,
              <B
CLASS="COMMAND"
>MAILIMF_FIELD_KEYWORDS</B
>,
              <B
CLASS="COMMAND"
>MAILIMF_FIELD_OPTIONAL_FIELD</B
>.
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>fld_data.fld_return_path</B
> is the
              parsed content of the Return-Path field
              if type is <B
CLASS="COMMAND"
>MAILIMF_FIELD_RETURN_PATH</B
>
              (see <A
HREF="x425.htm#MAILIMF-RETURN"
>the Section called <I
>mailimf_return - parsed content of Return-Path field</I
></A
>).
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>fld_data.fld_resent_date</B
> is the
              parsed content of the Resent-Date field
              if type is <B
CLASS="COMMAND"
>MAILIMF_FIELD_RESENT_DATE</B
>
              (see <A
HREF="x425.htm#MAILIMF-ORIG-DATE"
>the Section called <I
>mailimf_orig_date - parsed content of date header</I
></A
>).
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>fld_data.fld_resent_from</B
> is the
              parsed content of the Resent-From field 
              if type is <B
CLASS="COMMAND"
>MAILIMF_FIELD_RESENT_FROM</B
>
              (see <A
HREF="x425.htm#MAILIMF-FROM"
>the Section called <I
>mailimf_from - parsed content of From header</I
></A
>).
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>fld_data.fld_resent_sender</B
> is the
              parsed content of the Resent-Sender field 
              if type is <B
CLASS="COMMAND"
>MAILIMF_FIELD_RESENT_SENDER</B
>
              (see <A
HREF="x425.htm#MAILIMF-SENDER"
>the Section called <I
>mailimf_sender - parsed content of Sender header</I
></A
>).
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>fld_data.fld_resent_to</B
> is the parsed
              content of the Resent-To field 
              if type is <B
CLASS="COMMAND"
>MAILIMF_FIELD_RESENT_TO</B
>
              (see <A
HREF="x425.htm#MAILIMF-TO"
>the Section called <I
>mailimf_to - parsed content of To header</I
></A
>).
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>fld_data.fld_resent_cc</B
> is the parsed
              content of the Resent-Cc field 
              if type is <B
CLASS="COMMAND"
>MAILIMF_FIELD_CC</B
>
              (see <A
HREF="x425.htm#MAILIMF-CC"
>the Section called <I
>mailimf_cc - parsed content of Cc</I
></A
>).
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>fld_data.fld_resent_bcc</B
> is the parsed
              content of the Resent-Bcc field 
              if type is <B
CLASS="COMMAND"
>MAILIMF_FIELD_BCC</B
>
              (see <A
HREF="x425.htm#MAILIMF-BCC"
>the Section called <I
>mailimf_bcc - parsed content of Bcc field</I
></A
>).
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>fld_data.fld_resent_msg_id</B
> is the
              parsed content of the Resent-Message-ID field 
              if type is <B
CLASS="COMMAND"
>MAILIMF_FIELD_RESENT_MSG_ID</B
>
              (see <A
HREF="x425.htm#MAILIMF-MESSAGE-ID"
>the Section called <I
>mailimf_message_id - parsed content of Message-ID header</I
></A
>).
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>fld_data.fld_orig_date</B
> is the parsed
              content of the Date field 
              if type is <B
CLASS="COMMAND"
>MAILIMF_FIELD_ORIG_DATE</B
>
              (see <A
HREF="x425.htm#MAILIMF-ORIG-DATE"
>the Section called <I
>mailimf_orig_date - parsed content of date header</I
></A
>).
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>fld_data.fld_from</B
> is the parsed
              content of the From field 
              if type is <B
CLASS="COMMAND"
>MAILIMF_FIELD_FROM</B
>
              (see <A
HREF="x425.htm#MAILIMF-FROM"
>the Section called <I
>mailimf_from - parsed content of From header</I
></A
>).
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>fld_data.fld_sender</B
> is the parsed
              content of the Sender field 
              if type is <B
CLASS="COMMAND"
>MAILIMF_FIELD_SENDER</B
>
              (see <A
HREF="x425.htm#MAILIMF-SENDER"
>the Section called <I
>mailimf_sender - parsed content of Sender header</I
></A
>).
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>fld_data.fld_reply_to</B
> is the parsed
              content of the Reply-To field 
              if type is <B
CLASS="COMMAND"
>MAILIMF_FIELD_REPLY_TO</B
>
              (see <A
HREF="x425.htm#MAILIMF-REPLY-TO"
>the Section called <I
>mailimf_reply_to - parsed content of Reply-To header</I
></A
>).
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>fld_data.fld_to</B
> is the parsed content
              of the To field if type is
              <B
CLASS="COMMAND"
>MAILIMF_FIELD_TO</B
>
              (see <A
HREF="x425.htm#MAILIMF-TO"
>the Section called <I
>mailimf_to - parsed content of To header</I
></A
>).
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>fld_data.fld_cc</B
> is the parsed content
              of the Cc field if type is
              <B
CLASS="COMMAND"
>MAILIMF_FIELD_CC</B
>
              (see <A
HREF="x425.htm#MAILIMF-CC"
>the Section called <I
>mailimf_cc - parsed content of Cc</I
></A
>).
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>fld_data.fld_bcc</B
> is the parsed
              content of the Bcc field if type is
              <B
CLASS="COMMAND"
>MAILIMF_FIELD_BCC</B
>
              (see <A
HREF="x425.htm#MAILIMF-BCC"
>the Section called <I
>mailimf_bcc - parsed content of Bcc field</I
></A
>).
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>fld_data.fld_message_id</B
> is the parsed
              content of the Message-ID field 
              if type is <B
CLASS="COMMAND"
>MAILIMF_FIELD_MESSAGE_ID</B
>
              (see <A
HREF="x425.htm#MAILIMF-MESSAGE-ID"
>the Section called <I
>mailimf_message_id - parsed content of Message-ID header</I
></A
>).
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>fld_data.fld_in_reply_to</B
> is the
              parsed content of the In-Reply-To field 
              if type is <B
CLASS="COMMAND"
>MAILIMF_FIELD_IN_REPLY_TO</B
>
              (see <A
HREF="x425.htm#MAILIMF-IN-REPLY-TO"
>the Section called <I
>mailimf_in_reply_to - parsed content of In-Reply-To
        field</I
></A
>).
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>fld_data.fld_references</B
> is the parsed
              content of the References field 
              if type is <B
CLASS="COMMAND"
>MAILIMF_FIELD_REFERENCES</B
>
              (see <A
HREF="x425.htm#MAILIMF-REFERENCES"
>the Section called <I
>mailimf_references - parsed content of References field</I
></A
>).
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>fld_data.fld_subject</B
> is the content
              of the Subject field 
              if type is <B
CLASS="COMMAND"
>MAILIMF_FIELD_SUBJECT</B
>
              (see <A
HREF="x425.htm#MAILIMF-SUBJECT"
>the Section called <I
>mailimf_subject - parsed content of Subject field</I
></A
>).
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>fld_data.fld_comments</B
> is the content of the
              Comments field 
              if type is <B
CLASS="COMMAND"
>MAILIMF_FIELD_COMMENTS</B
>
              (see <A
HREF="x425.htm#MAILIMF-COMMENTS"
>the Section called <I
>mailimf_comments - parsed content of Comments field</I
></A
>).
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>fld_data.fld_keywords</B
> is the parsed
              content of the Keywords field 
              if type is <B
CLASS="COMMAND"
>MAILIMF_FIELD_KEYWORDS</B
>
              (see <A
HREF="x425.htm#MAILIMF-KEYWORDS"
>the Section called <I
>mailimf_keywords - parsed content of Keywords field</I
></A
>).
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>fld_data.fld_optional_field</B
> is an
              other field and is not parsed 
              if type is <B
CLASS="COMMAND"
>MAILIMF_FIELD_OPTIONAL_FIELD</B
>
              (see <A
HREF="x425.htm#MAILIMF-OPTIONAL-FIELD"
>the Section called <I
>mailimf_optional_field - non-standard header</I
></A
>).
            </P
></LI
></UL
><P
>          <B
CLASS="COMMAND"
>mailimf_field_new()</B
> creates and
          initializes a data structure with a value. 
          Structures given as argument are referenced by the created
          object and will be freed if the object is released.
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_field_free()</B
> frees memory used by
          the structure and substructures will also be released.
        </P
><DIV
CLASS="EXAMPLE"
><A
NAME="AEN961"
></A
><P
><B
>Example 3-27. creation and display of field</B
></P
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

int main(int argc, char ** argv)
{
  struct mailimf_field * f;
  struct mailimf_mailbox * mb;
  struct mailimf_mailbox_list * mb_list;
  struct mailimf_from * from;
  
  /* build header 'From' */
  
  list = clist_new();
  mb = mailimf_mailbox_new(strdup("DINH =?iso-8859-1?Q?Vi=EAt_Ho=E0?="),
    strdup("dinh.viet.hoa@free.fr"));
  clist_append(list, mb);
  mb_list = mailimf_mailbox_list_new(list);
  
  from = mailimf_from_new(mb_list);
  
  f = mailimf_field_new(MAILIMF_FIELD_FROM,
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
    from, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
    NULL, NULL, NULL, NULL);
  /* do the things */
  mailimf_field_free(f);

  return 0;
}

/* display content of the header */

#include &lt;libetpan/libetpan.h&gt;
#include &lt;stdio.h&gt;

void display_field(struct mailimf_field * field)
{
  switch (field-&gt;type) {
  case MAILIMF_FIELD_RETURN_PATH:
    printf("Return-Path:\n");
    display_return(field-&gt;fld_data.fld_return_path);
    break;
  case MAILIMF_FIELD_RESENT_DATE:
    printf("Resent-Date:\n");
    display_orig_date(field-&gt;fld_data.fld_orig_date);
    break;
  case MAILIMF_FIELD_RESENT_FROM:
    printf("Resent-From:\n");
    display_from(field-&gt;fld_data.fld_orig_date);
    break;
  case MAILIMF_FIELD_RESENT_SENDER:
    printf("Resent-Sender:\n");
    display_sender(field-&gt;fld_data.fld_resent_sender);
    break;
  case MAILIMF_FIELD_RESENT_TO:
    printf("Resent-To:\n");
    display_to(field-&gt;fld_data.fld_resent_to);
    break;
  case MAILIMF_FIELD_RESENT_CC:
    printf("Resent-Cc:\n");
    display_from(field-&gt;fld_data.fld_resent_cc);
    break;
  case MAILIMF_FIELD_RESENT_BCC:
    printf("Resent-Bcc:\n");
    display_from(field-&gt;fld_data.fld_resent_bcc);
    break;
  case MAILIMF_FIELD_RESENT_MSG_ID:
    printf("Resent-Message-ID:\n");
    display_message_id(field-&gt;fld_data.fld_resent_msg_id);
    break;
  case MAILIMF_FIELD_ORIG_DATE:
    printf("Date:\n");
    display_orig_date(field-&gt;fld_data.fld_orig_date);
    break;
  case MAILIMF_FIELD_FROM:
    printf("From:\n");
    display_from(field-&gt;fld_data.fld_from);
    break;
  case MAILIMF_FIELD_SENDER:
    printf("Sender:\n");
     display_sender(field-&gt;fld_data.fld_sender);
    break;
  case MAILIMF_FIELD_REPLY_TO:
    printf("Reply-To:\n");
    display_reply_to(field-&gt;fld_data.fld_reply_to);
    break;
  case MAILIMF_FIELD_TO:
    printf("To:\n");
    display_to(field-&gt;fld_data.fld_to);
    break;
  case MAILIMF_FIELD_CC:
    printf("Cc:\n");
    display_cc(field-&gt;fld_data.fld_cc);
    break;
  case MAILIMF_FIELD_BCC:
    printf("Bcc:\n");
    display_bcc(field-&gt;fld_data.fld_bcc);
    break;
  case MAILIMF_FIELD_MESSAGE_ID:
    printf("Message-ID:\n");
    display_message_id(field-&gt;fld_data.fld_message_id);
    break;
  case MAILIMF_FIELD_IN_REPLY_TO:
    printf("In-Reply-To:\n");
    display_in_reply_to(field-&gt;fld_data.fld_in_reply_to);
    break;
  case MAILIMF_FIELD_REFERENCES:
    printf("References:\n");
    display_references(field-&gt;fld_data.fld_references_to);
    break;
  case MAILIMF_FIELD_SUBJECT:
    printf("Subject:\n");
    display_subject(field-&gt;fld_data.fld_subject);
    break;
  case MAILIMF_FIELD_COMMENTS:
    printf("Comments:\n");
    display_comments(field-&gt;fld_data.fld_comments);
    break;
  case MAILIMF_FIELD_KEYWORDS:
    printf("Keywords:\n");
    display_keywords(field-&gt;fld_data.fld_keywords);
    break;
  case MAILIMF_FIELD_OPTIONAL_FIELD:
    printf("[optional field]:\n");
    display_optional_field(field-&gt;fld_data.fld_optional_field);
    break;
  }
}
          </PRE
></DIV
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="MAILIMF-FIELDS"
>mailimf_fields - list of header fields</A
></H2
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

struct mailimf_fields {
  clist * fld_list; /* list of (struct mailimf_field *), != NULL */
};

struct mailimf_fields * mailimf_fields_new(clist * fld_list);

void mailimf_fields_free(struct mailimf_fields * fields);
        </PRE
><P
>          This is the list of header fields of a message.
        </P
><P
>          <B
CLASS="COMMAND"
>fld_list</B
> is a list of header fields. This
          is a <B
CLASS="COMMAND"
>clist</B
> which elements are 
          of type <B
CLASS="COMMAND"
>mailimf_field</B
> (see <A
HREF="x425.htm#MAILIMF-FIELD"
>the Section called <I
>mailimf_field - header field</I
></A
>).
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_fields_new()</B
> creates and
          initializes a data structure with a value.
          Structures given as argument are referenced by the created
          object and will be freed if the object is released.
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_fields_free()</B
> frees memory used
          by the structure and substructures will also be released.
        </P
><DIV
CLASS="EXAMPLE"
><A
NAME="AEN977"
></A
><P
><B
>Example 3-28. creation and display of header fields</B
></P
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

int main(int argc, char ** argv)
{
  struct mailimf_fields * fields;
  struct mailimf_field * f;
  clist * list;
  struct mailimf_from * from;
  struct mailimf_to * to
  struct mailimf_mailbox * mb;
  struct mailimf_address * addr;
  struct mailimf_mailbox_list * mb_list;
  struct mailimf_address_list * addr_list;
  clist * fields_list;

  /* build headers */

  fields_list = clist_new();
  
  /* build header 'From' */
  
  list = clist_new();
  mb = mailimf_mailbox_new(strdup("DINH =?iso-8859-1?Q?Vi=EAt_Ho=E0?="),
    strdup("dinh.viet.hoa@free.fr"));
  clist_append(list, mb);
  mb_list = mailimf_mailbox_list_new(list);
  
  from = mailimf_from_new(mb_list);
  
  f = mailimf_field_new(MAILIMF_FIELD_FROM,
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
    from, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
    NULL, NULL, NULL, NULL);

  clist_append(fields_list, f);
  
  /* build header To */

  list = clist_new();
  mb = mailimf_mailbox_new(strdup("DINH =?iso-8859-1?Q?Vi=EAt_Ho=E0?="),
    strdup("dinh.viet.hoa@free.fr"));
  addr = mailimf_address_new(MAILIMF_ADDRESS_MAILBOX, mb, NULL);
  clist_append(list, addr);
  addr_list = mailimf_address_list_new(list);
  
  to = mailimf_to_new(addr_list);

  f = mailimf_field_new(MAILIMF_FIELD_TO,
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
    NULL, NULL, NULL, to, NULL, NULL, NULL, NULL, NULL,
    NULL, NULL, NULL, NULL);
  
  clist_append(fields_list, f);
  
  fields = mailimf_fields_new(fields_list);
  /* do the things */
  mailimf_fields_free(fields);
  
  return 0;
}

/* display list of headers */

#include &lt;libetpan/libetpan.h&gt;
#include &lt;stdio.h&gt;

void display_fields(struct mailimf_fields * fields)
{
  clistiter * cur;

  for(cur = clist_begin(field-&gt;fld_list) ; cur != NULL ;
    cur = clist_next(cur)) {
    struct mailimf_field * f;
    
    f = clist_content(cur);
    
    display_field(f);
    printf("\n");
  }
}
          </PRE
></DIV
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="MAILIMF-BODY"
>mailimf_body - message body without headers</A
></H2
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

struct mailimf_body {
  const char * bd_text; /* != NULL */
  size_t bd_size;
};

struct mailimf_body * mailimf_body_new(const char * bd_text, size_t bd_size);

void mailimf_body_free(struct mailimf_body * body);
        </PRE
><P
>          This is the text content of a message (without headers).
        </P
><P
>          <P
></P
><UL
><LI
><P
>                <B
CLASS="COMMAND"
>bd_text</B
> is the beginning of the
                text part, it is a substring of an other string.
                It is not necessarily zero terminated.
              </P
></LI
><LI
><P
>                <B
CLASS="COMMAND"
>bd_size</B
> is the size of the text part
              </P
></LI
></UL
>
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_body_new()</B
> creates and
          initializes a data structure with a value.
          Text given as argument will <SPAN
CLASS="emphasis"
><I
CLASS="EMPHASIS"
>NOT</I
></SPAN
> be released.
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_body_free()</B
> frees memory used by
          the structure.
        </P
><DIV
CLASS="EXAMPLE"
><A
NAME="AEN997"
></A
><P
><B
>Example 3-29. creation and display of message body</B
></P
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

int main(int argc, char ** argv)
{
  struct mailimf_body * b;
  
  b = mailimf_body_new("this is the content of the message", 34);
  /* do the things */
  mailimf_body_free(b);
  
  return 0;
}

#include &lt;libetpan/libetpan.h&gt;
#include &lt;stdio.h&gt;

void display_body(struct mailimf_body * b)
{
  char * text;

  text = malloc(b-&gt;size + 1);
  strncpy(text, b-&gt;bd_text, b-&gt;bd_size);
  text[b-&gt;size] = 0;

  puts(text);
  printf("\n");

  free(text);
    
  return 0;
}
          </PRE
></DIV
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="MAILIMF-MESSAGE"
>mailimf_message - parsed message</A
></H2
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

struct mailimf_message {
  struct mailimf_fields * msg_fields; /* != NULL */
  struct mailimf_body * msg_body;     /* != NULL */
};

struct mailimf_message *
mailimf_message_new(struct mailimf_fields * msg_fields,
    struct mailimf_body * msg_body);

void mailimf_message_free(struct mailimf_message * message);
        </PRE
><P
>          This is the message content (text and headers).
        </P
><P
></P
><UL
><LI
><P
>              <B
CLASS="COMMAND"
>msg_fields</B
> is the header fields of
              the message
              (see <A
HREF="x425.htm#MAILIMF-FIELDS"
>the Section called <I
>mailimf_fields - list of header fields</I
></A
>).
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>msg_body</B
> is the text part of the message
              (see <A
HREF="x425.htm#MAILIMF-BODY"
>the Section called <I
>mailimf_body - message body without headers</I
></A
>).
            </P
></LI
></UL
><P
>          <B
CLASS="COMMAND"
>mailimf_message_new()</B
> creates and
          initializes a data structure with a value.
          Structures given as argument are referenced by the created
          object and will be freed if the object is released.
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_message_free()</B
> frees memory used
          by the structure and substructures will also be released.
        </P
><DIV
CLASS="EXAMPLE"
><A
NAME="AEN1017"
></A
><P
><B
>Example 3-30. creation and display of message</B
></P
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

int main(int argc, char ** argv)
{
  struct mailimf_body * b;
  struct mailimf_message * m;
  struct mailimf_fields * fields;
  struct mailimf_fields * f;
  clist * list;
  struct mailimf_from * from;
  struct mailimf_to * to
  struct mailimf_mailbox * mb;
  struct mailimf_address * addr;
  struct mailimf_mailbox_list * mb_list;
  struct mailimf_address_list * addr_list;
  clist * fields_list;

  /* build text content */
  
  b = mailimf_body_new("this is the content of the message", 34);
  
  /* build headers */

  fields_list = clist_new();
  
  /* build header 'From' */
  
  list = clist_new();
  mb = mailimf_mailbox_new(strdup("DINH =?iso-8859-1?Q?Vi=EAt_Ho=E0?="),
    strdup("dinh.viet.hoa@free.fr"));
  clist_append(list, mb);
  mb_list = mailimf_mailbox_list_new(list);
  
  from = mailimf_from_new(mb_list);
  
  f = mailimf_field_new(MAILIMF_FIELD_FROM,
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
    from, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
    NULL, NULL, NULL, NULL);

  clist_append(fields_list, f);
  
  /* build header To */

  list = clist_new();
  mb = mailimf_mailbox_new(strdup("DINH =?iso-8859-1?Q?Vi=EAt_Ho=E0?="),
    strdup("dinh.viet.hoa@free.fr"));
  addr = mailimf_address_new(MAILIMF_ADDRESS_MAILBOX, mb, NULL);
  clist_append(list, addr);
  addr_list = mailimf_address_list_new(list);
  
  to = mailimf_to_new(addr_list);

  f = mailimf_field_new(MAILIMF_FIELD_TO,
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
    NULL, NULL, NULL, to, NULL, NULL, NULL, NULL, NULL,
    NULL, NULL, NULL, NULL);
  
  clist_append(fields_list, f);
  
  fields = mailimf_fields_new(fields_list);

  /* build message */
  
  m = mailimf_message_new(fields, b);
  /* do the things */
  mailimf_message_free(m);
  
  return 0;
}

/* display the message */

#include &lt;libetpan/libetpan.h&gt;
#include &lt;stdio.h&gt;

void display_message(struct mailimf_message * msg)
{
  display_fields(msg-&gt;msg_fields);
  printf("\n");
  display_body(msg-&gt;msg_body);
  printf("\n");
}
          </PRE
></DIV
></DIV
><DIV
CLASS="SECT2"
><H2
CLASS="SECT2"
><A
NAME="MAILIMF-SINGLE-FIELDS"
>mailimf_single_fields - simplified fields</A
></H2
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

struct mailimf_single_fields {
  struct mailimf_orig_date * fld_orig_date;      /* can be NULL */
  struct mailimf_from * fld_from;                /* can be NULL */
  struct mailimf_sender * fld_sender;            /* can be NULL */
  struct mailimf_reply_to * fld_reply_to;        /* can be NULL */
  struct mailimf_to * fld_to;                    /* can be NULL */
  struct mailimf_cc * fld_cc;                    /* can be NULL */
  struct mailimf_bcc * fld_bcc;                  /* can be NULL */
  struct mailimf_message_id * fld_message_id;    /* can be NULL */
  struct mailimf_in_reply_to * fld_in_reply_to;  /* can be NULL */
  struct mailimf_references * fld_references;    /* can be NULL */
  struct mailimf_subject * fld_subject;          /* can be NULL */
  struct mailimf_comments * fld_comments;        /* can be NULL */
  struct mailimf_keywords * fld_keywords;        /* can be NULL */
};

struct mailimf_single_fields *
mailimf_single_fields_new(struct mailimf_fields * fields);

void mailimf_single_fields_free(struct mailimf_single_fields *
                                single_fields);

void mailimf_single_fields_init(struct mailimf_single_fields * single_fields,
                                struct mailimf_fields * fields);</PRE
><P
>          Structure that contains some standard fields and allows access
          to a given header without running through the list.
        </P
><P
>          mailimf_fields is the native structure that IMF module will use,
          this module will provide an easier structure to use when
          parsing fields.
          mailimf_single_fields is an easier structure to get parsed fields,
          rather than iteration over the list of fields
        </P
><P
></P
><UL
><LI
><P
>              <B
CLASS="COMMAND"
>fld_orig_date</B
> is the parsed "Date"
              field
              (see <A
HREF="x425.htm#MAILIMF-ORIG-DATE"
>the Section called <I
>mailimf_orig_date - parsed content of date header</I
></A
>).
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>fld_from</B
> is the parsed "From" field
              (see <A
HREF="x425.htm#MAILIMF-FROM"
>the Section called <I
>mailimf_from - parsed content of From header</I
></A
>).
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>fld_sender</B
> is the parsed "Sender "field
              (see <A
HREF="x425.htm#MAILIMF-SENDER"
>the Section called <I
>mailimf_sender - parsed content of Sender header</I
></A
>).
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>reply_to</B
> is the parsed "Reply-To" field
              (see <A
HREF="x425.htm#MAILIMF-REPLY-TO"
>the Section called <I
>mailimf_reply_to - parsed content of Reply-To header</I
></A
>).
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>fld_to</B
> is the parsed "To" field
              (see <A
HREF="x425.htm#MAILIMF-TO"
>the Section called <I
>mailimf_to - parsed content of To header</I
></A
>).
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>fld_cc</B
> is the parsed "Cc" field
              (see <A
HREF="x425.htm#MAILIMF-CC"
>the Section called <I
>mailimf_cc - parsed content of Cc</I
></A
>).
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>fld_bcc</B
> is the parsed "Bcc" field
              (see <A
HREF="x425.htm#MAILIMF-BCC"
>the Section called <I
>mailimf_bcc - parsed content of Bcc field</I
></A
>).
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>fld_message_id</B
> is the parsed
              "Message-ID" field.
              (see <A
HREF="x425.htm#MAILIMF-MESSAGE-ID"
>the Section called <I
>mailimf_message_id - parsed content of Message-ID header</I
></A
>).
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>fld_in_reply_to</B
> is the parsed
              "In-Reply-To" field.
              (see <A
HREF="x425.htm#MAILIMF-IN-REPLY-TO"
>the Section called <I
>mailimf_in_reply_to - parsed content of In-Reply-To
        field</I
></A
>).
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>fld_references</B
> is the parsed
              "References" field.
              (see <A
HREF="x425.htm#MAILIMF-REFERENCES"
>the Section called <I
>mailimf_references - parsed content of References field</I
></A
>).
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>fld_subject</B
> is the parsed "Subject" field
              (see <A
HREF="x425.htm#MAILIMF-SUBJECT"
>the Section called <I
>mailimf_subject - parsed content of Subject field</I
></A
>).
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>fld_comments</B
> is the parsed "Comments" field
              (see <A
HREF="x425.htm#MAILIMF-COMMENTS"
>the Section called <I
>mailimf_comments - parsed content of Comments field</I
></A
>).
            </P
></LI
><LI
><P
>              <B
CLASS="COMMAND"
>fld_keywords</B
> is the parsed "Keywords" field
              (see <A
HREF="x425.htm#MAILIMF-KEYWORDS"
>the Section called <I
>mailimf_keywords - parsed content of Keywords field</I
></A
>).
            </P
></LI
></UL
><P
>          <B
CLASS="COMMAND"
>mailimf_single_fields_new()</B
> creates and
          initializes a data structure with a value.
          Structures given as argument are referenced by the created
          object and will <SPAN
CLASS="emphasis"
><I
CLASS="EMPHASIS"
>NOT</I
></SPAN
> be freed if the
          object is released.
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_single_fields_free()</B
> frees memory
          used by the structure and 
          substructures will <SPAN
CLASS="emphasis"
><I
CLASS="EMPHASIS"
>NOT</I
></SPAN
> be
          released. They should be released by the application.
        </P
><P
>          <B
CLASS="COMMAND"
>mailimf_single_fields_init()</B
> will
          initialize fill the data structure, using
          the given argument (<B
CLASS="COMMAND"
>fields</B
>). The
          interesting fields will be filled into
          <B
CLASS="COMMAND"
>single_fields</B
>.
        </P
><DIV
CLASS="EXAMPLE"
><A
NAME="AEN1088"
></A
><P
><B
>Example 3-31. using mailimf_single_fields</B
></P
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

int main(int argc, char ** argv)
{
  struct mailimf_single_fields * single_fields;
  struct mailimf_fields * fields;
  struct mailimf_field * f;
  clist * list;
  struct mailimf_from * from;
  struct mailimf_to * to
  struct mailimf_mailbox * mb;
  struct mailimf_address * addr;
  struct mailimf_mailbox_list * mb_list;
  struct mailimf_address_list * addr_list;
  clist * fields_list;

  /* build headers */

  fields_list = clist_new();
  
  /* build header 'From' */
  
  list = clist_new();
  mb = mailimf_mailbox_new(strdup("DINH =?iso-8859-1?Q?Vi=EAt_Ho=E0?="),
    strdup("dinh.viet.hoa@free.fr"));
  clist_append(list, mb);
  mb_list = mailimf_mailbox_list_new(list);
  
  from = mailimf_from_new(mb_list);
  
  f = mailimf_field_new(MAILIMF_FIELD_FROM,
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
    from, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
    NULL, NULL, NULL, NULL);

  clist_append(fields_list, f);
  
  /* build header To */

  list = clist_new();
  mb = mailimf_mailbox_new(strdup("DINH =?iso-8859-1?Q?Vi=EAt_Ho=E0?="),
    strdup("dinh.viet.hoa@free.fr"));
  addr = mailimf_address_new(MAILIMF_ADDRESS_MAILBOX, mb, NULL);
  clist_append(list, addr);
  addr_list = mailimf_address_list_new(list);
  
  to = mailimf_to_new(addr_list);

  f = mailimf_field_new(MAILIMF_FIELD_TO,
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
    NULL, NULL, NULL, to, NULL, NULL, NULL, NULL, NULL,
    NULL, NULL, NULL, NULL);
  
  clist_append(fields_list, f);
  
  fields = mailimf_fields_new(fields_list);
  
  /* create the single fields */
  single_fields = mailimf_single_fields_new(fields);
  /* do the things */
  mailimf_single_fields_free(single_fields);
  mailimf_fields_free(fields);
  
  return 0;
}
          </PRE
></DIV
><DIV
CLASS="EXAMPLE"
><A
NAME="AEN1091"
></A
><P
><B
>Example 3-32. using mailimf_single_fields without memory allocation</B
></P
><PRE
CLASS="PROGRAMLISTING"
>#include &lt;libetpan/libetpan.h&gt;

int main(int argc, char ** argv)
{
  struct mailimf_single_fields single_fields;
  struct mailimf_fields * fields;
  struct mailimf_field * f;
  clist * list;
  struct mailimf_from * from;
  struct mailimf_to * to
  struct mailimf_mailbox * mb;
  struct mailimf_address * addr;
  struct mailimf_mailbox_list * mb_list;
  struct mailimf_address_list * addr_list;
  clist * fields_list;

  /* build headers */

  fields_list = clist_new();
  
  /* build header 'From' */
  
  list = clist_new();
  mb = mailimf_mailbox_new(strdup("DINH =?iso-8859-1?Q?Vi=EAt_Ho=E0?="),
    strdup("dinh.viet.hoa@free.fr"));
  clist_append(list, mb);
  mb_list = mailimf_mailbox_list_new(list);
  
  from = mailimf_from_new(mb_list);
  
  f = mailimf_field_new(MAILIMF_FIELD_FROM,
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
    from, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
    NULL, NULL, NULL, NULL);

  clist_append(fields_list, f);
  
  /* build header To */

  list = clist_new();
  mb = mailimf_mailbox_new(strdup("DINH =?iso-8859-1?Q?Vi=EAt_Ho=E0?="),
    strdup("dinh.viet.hoa@free.fr"));
  addr = mailimf_address_new(MAILIMF_ADDRESS_MAILBOX, mb, NULL);
  clist_append(list, addr);
  addr_list = mailimf_address_list_new(list);
  
  to = mailimf_to_new(addr_list);

  f = mailimf_field_new(MAILIMF_FIELD_TO,
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
    NULL, NULL, NULL, to, NULL, NULL, NULL, NULL, NULL,
    NULL, NULL, NULL, NULL);
  
  clist_append(fields_list, f);
  
  fields = mailimf_fields_new(fields_list);
  
  /* fill the single fields */
  mailimf_fields_fields_init(&amp;single_fields, fields);
  /* do the things */
  mailimf_fields_free(fields);
  
  return 0;
}
          </PRE
></DIV
></DIV
></DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
HREF="c385.htm"
ACCESSKEY="P"
>Prev</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="book1.htm"
ACCESSKEY="H"
>Home</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="x1094.htm"
ACCESSKEY="N"
>Next</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>Internet Message Format</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="c385.htm"
ACCESSKEY="U"
>Up</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>Parser functions</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>