#ifndef LIBRARIES_BBS_H
#define LIBRARIES_BBS_H

/*
**	$VER: BBS_library.h 2.0 (03.04.95)
**
**	BBS.library definitions
**
*/

/*------------------------------------------------------------------------*/

#ifndef EXEC_LISTS_H
#include <exec/lists.h>
#endif

#ifndef EXEC_TYPES_H
#include <exec/types.h>
#endif

#ifndef DOS_DOS_H
#include <dos/dos.h>
#endif

#define BBSNAME    "BBS.library"
#define BBSVERSION 2


/* Eine Externinfo Struktur wird von der Funktion bbs_open() zurückgegeben */

struct ExternInfo
 {
  BOOL   ConOnly;                       /* Wenn ConLogin ungleich 0             */
  ULONG  StartedFrom;                   /* Hier kann man entnehmen von wo das   */
                                        /* Programm gestartet wurde.            */
  char  *UserName;                      /* Name des Users                       */
  char  *City;                          /* Wohnort des Users                    */
  struct DateStamp LogInTime;           /* Zeitpunkt des Logins                 */

  ULONG  TotalDownloads;                /* Download Bytes des Users             */
  ULONG  TotalUploads;                  /* Upload Bytes des Users               */
  ULONG  BaudRate;                      /* BaudRate des Connects                */
  ULONG  Lines;                         /* Anzahl der Zeilen des Users          */

  ULONG  CallsToday;                    /* Anzahl der Anrufe in der Box Heute   */
  ULONG  CallsTotal;                    /* Anzahl der Anrufe in der Box gesammt */
  ULONG  LastCallNr;                    /* Nummer des letzten anrufes des Users */
                                        /* in der Box                           */
  ULONG  CallNr;                        /* Aktuelle Anrufnummer                 */

  struct List *TransferListe;           /* Liste der Up- bzw. Downgelodeten     */
                                        /* Files wenn das Programm aus der      */
                                        /* Nachupload- oder Nachdownload-Batch  */
                                        /* gestartet wurde.                     */
  ULONG  AutoLogOff;                    /* Ist dieser Wert ungleich NULL befindet */
                                        /* sich der User in einer Autologoff-   */
                                        /* Seuenze, d.h. Eingabeaufforderungen  */
                                        /* sind tunlichst zu unterlassen... ;-) */
  UWORD  Language;                      /* Die Sprache die der User eingestellt */
                                        /* hat.                                 */
  UWORD  DateFormat;                    /* Das bevorzugte Datumsformat des Users*/
  UWORD  Cosysop;                       /* Wenn ungleich NULL ist der User Sysop*/
                                        /* oder CoSysop.                        */
  UWORD  AmBoS_Version;                 /* AmBoS Version                        */
  UWORD  AmBoS_Revision;                /* AmBoS Revision                       */
  ULONG  AmBoS_SerialNumber;            /* Seriennummer oder 0 für DEMO-Version */

 };

/* Werte für StartetFrom in der ExternInfo Struktur */

#define FROM_AMENU              0       /* Programm wurd von der GeoNeto- oder  */
                                        /* AmBoS-Menu-Oberfläche gestartet.     */
#define FROM_NACHLOGIN          1       /* Batchdatei                           */
#define FROM_GASTLOGIN          2       /* Batchdatei                           */
#define FROM_VORANTRAG          3       /* Batchdatei                           */
#define FROM_NACHANTRAG         4       /* Batchdatei                           */
#define FROM_VORDOWNLOAD        5       /* Batchdatei                           */
#define FROM_NACHDOWNLOAD       6       /* Batchdatei                           */
#define FROM_VORUPLOAD          7       /* Batchdatei                           */
#define FROM_NACHUPLOAD         8       /* Batchdatei                           */
#define FROM_LOGOFF             9       /* Batchdatei                           */
#define FROM_RELOGIN            10      /* Batchdatei                           */

#define FROM_SETUP              11      /* Dieser Modus ist noch nicht implemen-*/
                                        /* tiert, er soll dazu verwendet werden */
                                        /* ein Kofortables Setup für Externe dem*/
                                        /* Sysop zur verfügunug stellen.        */
                                        /* Sollte dieser Modus auftauchen das   */
                                        /* Programm am besten sofort beenden.   */

/* Werte für Language in der ExternInfo Struktur */

#define LANGUAGE_DEUTSCH        0
#define LANGUAGE_ENGLISH        1

/* Werte für DateFormat in der ExternInfo Struktur */

#define DATEFORMAT_CDN          0       /* Tag-Monat-Jahr                       */
#define DATEFORMAT_USA          1       /* Monat-Tag-Jahr                       */




/* Nodes in der ExternInfo->TransferListe */

struct TransferNode
 {
  struct  TransferNode *tr_Succ;
  struct  TransferNode *tr_Prev;
  UBYTE   tr_Type;                      /* Art der Übertragung Up oder Download */
  BYTE    tr_Pri;
  char   *tr_Name;                      /* Name des File                        */
  char   *tr_RealName;                  /* Name unter dem das File auf dem 
                                           Datenträger zu finden ist            */
  char   *tr_BoxPath;                   /* Kompletter Brettpfad                 */
  char   *tr_DosPath;                   /* Pfad unter dem das File auf dem
                                           Datenträger zu finden ist            */
  char   *tr_Uploader;                  /* Der Uploader des Files               */
  ULONG   tr_Size;                      /* Länge des Files in Bytes             */
  ULONG   tr_CPS;                       /* CPS_Rate bei der Übertragung         */
  ULONG   tr_AnzDownloads;              /* Wie oft das File schon downgelodet
                                           wurde                                */
  ULONG   tr_ProtectedBoard;            /* File liegt in einem durch Zugangsgruppe */
                                        /* geschützten Pfad                        */
 };

/* Werte für tr_Type in der TransferNode Struktur */

#define TRANSFER_UPLOAD   1
#define TRANSFER_DOWNLOAD 2




struct UserDatenExtern
 {
  APTR  AmBoSPrivat     ;

  char  UserName    [30];
  char  FirstName   [50];
  char  Name        [50];
  char  City       [100];  
  char  Street      [60];
  char  PhoneNr     [30];
  char  Fax         [30];
  char  Modem       [30];
  char  Computer    [30];
  char  Substitute  [30];               /* Vertreter                            */
  char  DLProtocol  [30];
  char  Packer      [30];

  UWORD BirthYear       ;
  UWORD BirthMonth      ;
  UWORD BirthDay        ;
  ULONG LastLogin       ;               /* In Minuten seit dem 01.01.1978       */
  ULONG NewsDate        ;               /* In Minuten seit dem 01.01.1978       */
  ULONG FirstLogin      ;               /* In Minuten seit dem 01.01.1978       */

  LONG  DLFreeSpace     ;
  ULONG Uploads         ;
  ULONG Downloads       ;

  ULONG LastCall        ;

  UWORD OnlineTime      ;
  UWORD OnlineToday     ;
  UWORD Lines           ;
  UWORD Zone            ;
  UWORD UpDownRatio     ;
  UWORD MaxPMails       ;

  UWORD NumCrashes      ;
  UWORD NumLogins       ;
 };



struct FileExtern 
 {
  APTR  AmBoSPrivat;

  ULONG Number    ;                     /* Nummer des Files im Brett            */
  UWORD Delete    ;                     /* kann gesetzt werden                  */
  UWORD Markiert  ;                     /* Eintrag ist markiert                 */

  UWORD FileType  ;                     /* File oder Mail                       */
  UWORD BrettType ;                     /* Art des aktuellen Brettes            */
  UWORD Downloads ;                     /* Anzahl der Zugriffe auf den Eintrag  */
  ULONG UploadDate;                     /* In Minuten seit dem 01.01.1978       */
  ULONG CreateDate;                     /* In Minuten seit dem 01.01.1978       */
  ULONG Size      ;                     /* Länge von Binärfiles                 */
  ULONG Lines     ;                     /* Anzahl der Zeilen bei Mails          */

  char *Uploader  ;                     /* Name des Uploaders                   */
  char *RealName  ;                     /* Name unter dem das File auf der      */
                                        /* Platte zu finden ist.                */
  char *BoxPath   ;                     /* Brettpfad                            */
  char *DosPath   ;                     /* Dospfad des aktuellen Brettes        */

  char ReadMeFile[42];                  /* FileName des Readmetextes            */
                                        /* kann verändert werden                */
  char BoxName[42]   ;                  /* Name unter dem ein File in der Box   */
                                        /* angezeigt wird.                      */
                                        /* kann verändert werden                */
  char Comment[8][42];                  /* Beschreibung des Eintrages           */
                                        /* kann verändert werden                */
 };

 /* Filetypen */

#define FileType_MESSAGE                1
#define FileType_BIN                    2



struct BrettDatenExtern
 {
  APTR  AmBoSPrivat;

  char  BrettName     [40];
  char  BrettPfad     [256];

  char  SchreibGruppe [40];
  char  ZugangsGruppe [40];
  char  LeseGruppe    [40];
  char  Verwalter     [40];
  char  BrettPasswort [40];

  ULONG LetzterEintrag  ;
  ULONG BrettFlags      ;
  UBYTE BrettTyp        ;
  UBYTE Locked          ;
  UBYTE Area            ;
  UBYTE NoRatio         ;
 };

 /* Bretttypen */

#define BrettType_NoBrett               0
#define BrettType_Asc                   1
#define BrettType_Bin                   2
#define BrettType_AscBin                3
#define BrettType_Head                  4
#define BrettType_Extern                5
#define BrettType_PM                    6

 /* Datenstruktur für bbs_menu() */

struct BBSMenu
 {
   struct BBSMenu *Next;
   char *Name;
   LONG MenuID;         /* Niemals auf 0 setzen !       */

   ULONG Private1;      /* Immer mit 0 initialisieren ! */
   UBYTE Private2;      /* Immer mit 0 initialisieren ! */
 };

#endif /* LIBRARIES_BBS_H */

