/*ProfiPacket - packet radio terminal program
  Copyright (C) 1999  Alexander Feigl

  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software
  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

  Author:

  Alexander Feigl
  Burachstraße 51

  D-88250 Weingarten

  Mail : Alexander.Feigl@gmx.de
*/

#ifndef MAIL_INCLUDE

#define MAIL_INCLUDE

#include <exec/nodes.h>

#define BBSObject_HRoute  0
#define BBSObject_User    1
#define BBSObject_ForwardEntry 2
#define BBSObject_DontForward  3

struct BBSObject
 {
  struct BBSObject *next;
  unsigned long objecttype;
  union {
         struct {
                 unsigned char BBS[16];      /* Call der BBS */
                 unsigned char HRoute[64];   /* H-Route der BBS */
                } HRoute ;
         struct {
                 unsigned char UserCall[16]; /* Call des Users */
                 unsigned char Name[32];     /* Name des Users */
                 unsigned char QTH[32];      /* QTH des Users */
                 unsigned char PLZ[16];      /* PLZ des Users */
                 unsigned char HomeBBS[16];  /* HomeBBS des Users*/
                } User;
         struct {
                 unsigned char Target[16];        /* Zielcall der Mail*/
                 unsigned char AtDesignator[16];  /* At Eintrag der Mail*/
                 unsigned char Hierarchy[64];     /* H-Route der Mail*/
                 unsigned char ForwardBox[16];    /* Box an die gesendet wird*/
                } ForwardEntry;
         struct {
                 unsigned char Target[16];        /* Zielcall der Mail*/
                 unsigned char AtDesignator[16];  /* At Eintrag der Mail*/
                 unsigned char Hierarchy[64];     /* H-Route der Mail*/
                 unsigned char ForwardBox[16];    /* Box für die Forwarsp*/
                } DontForward;
        } BBSUnion;

 };


struct MailHandle
 {
  struct Node Node;
  struct Mail    *MailNode;
  unsigned long   MailMode;
  BPTR            FileHandle;
  unsigned long   ProcessedBytes;
  unsigned long   LineBytes;
  unsigned long   Authorization;
  unsigned char   FileName[64];
  unsigned char   NotForward[16];
 };

struct Mail
 {
  unsigned long Number;
  unsigned char Bid[16];
  unsigned char From[8];
  unsigned char To[12];
  unsigned char At[8];
  unsigned char Title[80];
  unsigned long Date[2];
  unsigned long DateStatus[2];
  unsigned long Status;
  unsigned long Bytes;
  unsigned char HRoute[64];
  unsigned long Lifetime;

  unsigned char RxFrom[8];           /*Empfangen von BBS */
  unsigned char OriginBBS[8];        /*Ursprungsmailbox */

  unsigned long OriginDate[2];       /*Erstellungsdatum in UrsprungsBBS*/

  unsigned long ReadCounter;
  unsigned long ForwardCounter;
  unsigned long ForwardDest[4];      /*Array für 512 Boxen - hier forwarden*/
  unsigned long ForwardDone[4];      /*Array für 512 Boxen - Forward getan */

  unsigned long FuturePad[8];        /*Raum für Erweiterungen - Vorbelegt mit 0*/
 };

#define MAILSTATUS_INWRITE      31    /*Mail wird gerade erstellt*/
#define MAILSTATUS_AUTOBINARY   30    /*Mail ist eine Autobinär-Mail*/
#define MAILSTATUS_7PLUS        29    /*Mail ist eine 7+-Mail*/
#define MAILSTATUS_INCOMPLETE   28    /*Mail wurde als unvollständig markiert*/

#define MAILSTATUS_LOCALUSER     6    /*Mail ist an einen lokalen User*/
#define MAILSTATUS_WANTACK       5    /*Mail enthält eine /ACK Zeile*/
#define MAILSTATUS_ACKMAIL       4    /*Mail ist eine ACK - Mail */
#define MAILSTATUS_FORWARD       3    /*Mail wurde als geforwardet markiert*/
#define MAILSTATUS_READ          2    /*Mail wurde als gelesen markiert*/
#define MAILSTATUS_LOCAL         1    /*Mail wurde lokal erstellt*/
#define MAILSTATUS_PERSONAL      0    /*Mail ist eine P oder A Mail */

struct MailBase
 {
  unsigned char IDString[8];        /* String BBSIndex */
  unsigned long SizeofMail;         /* Größe eines Maileintrags - obsolete*/
  unsigned long NumberMails;        /* Anzahl der Mails in Datenbank*/
  unsigned long LastBID;            /* Letzte generierte BID-Nummer*/
  unsigned long IndexVersion;       /* Versionsnummer des Index*/
  unsigned char BoxIdent[16];       /* Box-Ident des Index*/
  unsigned long WPUpdateDay;        /* Tag des letzten WP-Updates*/
  unsigned long Padding[8];         /* Raum für Erweiterungen - Std 0 */
 };


struct MailOld
 {
  unsigned long Number;
  unsigned char Bid[16];
  unsigned char From[8];
  unsigned char To[10];
  unsigned char At[8];
  unsigned char Title[80];
  unsigned long Date[2];
  unsigned long Status;
  unsigned long Bytes;
  unsigned char HRoute[64];
  unsigned long Lifetime;
 };


#endif
