with Lines;
with Time_Utilities;
package Message is

    type Message_Type is private;

    function Make return Message_Type;

    procedure Set_Destination (Destination : String;
                               In_Message : in out Message_Type);

    procedure Set_Subject (Subject : Lines.Lines_Type;
                           In_Message : in out Message_Type);

    procedure Set_Data (Date : Time_Utilities.Time; In_Message : Message_Type);

    procedure Set_Message_Body (Message_Body : Lines.Lines_Type;
                                In_Message : Message_Type);

    function Destination (From_Message : Message_Type) return String;

    function Subject (From_Message : Message_Type) return Lines.Lines_Type;

    function Date (From_Message : Message_Type) return Time_Utilities.Time;

    function Message_Body (From_Message : Message_Type) return Lines.Lines_Type;

    procedure Append_Message (Message : Message_Type; To_File : String);

    generic
        with procedure Yeild (A_Message : Message.Message_Type);
    procedure Parse (Filename : String);

    -- This procedure will scan through a mailbox file as yeild messages
    -- as they are constructed.  The body of the yeild procedure should
    -- store the message in a mailbox object and return when it is ready
    -- to accept another one.
    --
    --
private
    type Message_Type is new Boolean;

end Message;