//  This may look like C code, but it is really -*- C++ -*-

//  ------------------------------------------------------------------
//  The Goldware Library
//  Copyright (C) 1991-1995 Gerard J. van der Land
//  Copyright (C) 1990-1999 Odinn Sorensen
//  ------------------------------------------------------------------
//  This library is free software; you can redistribute it and/or
//  modify it under the terms of the GNU Library General Public
//  License as published by the Free Software Foundation; either
//  version 2 of the License, or (at your option) any later version.
//
//  This library 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
//  Library General Public License for more details.
//
//  You should have received a copy of the GNU Library 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
//  ------------------------------------------------------------------
//  $Id$
//  ------------------------------------------------------------------
//  System data file definitions for GEcho 1.20.b10+
//  ------------------------------------------------------------------

#ifndef __gs_ge120_h
#define __gs_ge120_h


//  ------------------------------------------------------------------

#include <gftnall.h>


//  ------------------------------------------------------------------

#if defined(GOLD_CANPACK)
    #pragma pack(1)
#endif


//  ------------------------------------------------------------------

#define GE_THISREV 0x0002  // System file revision level
#define GE_MAJOR   1       // GEcho major revision version
#define GE_MINOR   20      // GEcho minor revision version

#define AKAS               32  // Main + AKAs
#define OLDAKAS            11  // Not used
#define OLDUPLINKS         10  // Not used
#define OLDGROUPS          26  // Not used
#define USERS              10  // User names
#define MAXAREAS        10000  // Area records
#define MAXCONNECTIONS    500  // Connections per area
#define MAXGROUPS         256  // Group records
#define MAXNODES         5000  // Node records
#define MAXVIAS            60  // Pack "Via" records
#define MAXROUTES         640  // Pack "Routed node" records

#define GROUPBYTES  ((MAXGROUPS + 7) / 8)


//  ------------------------------------------------------------------
//  Data types

typedef char GROUPS[GROUPBYTES];

/* --- Log levels */

#define LOG_INBOUND     0x0001  /* Inbound activities */
#define LOG_OUTBOUND    0x0002  /* Outbound activities */
#define LOG_PACKETS     0x0004  /* Inbound packet info */
#define LOG_UNEXPECT    0x0008  /* Extended packet info */
#define LOG_AREAMGR     0x0010  /* Unexpected passwords */
#define LOG_EXTPKTINFO  0x0040  /* AreaMgr messages */
#define LOG_NETEXPORT   0x0100  /* Exporting of netmail */
#define LOG_NETIMPORT   0x0200  /* Importing of netmail */
#define LOG_NETPACK     0x0400  /* Packing of netmail */
#define LOG_NETMOVED    0x0800  /* Moving Sent/Rcvd mail */
#define LOG_STATISTICS  0x2000  /* GEcho's statistics */
#define LOG_MBUTIL      0x4000  /* MBUTIL's activities */
#define LOG_DEBUG       0x8000  /* DEBUG: All of the above */


/* --- Log styles */

#define LOG_FD       0  /* FrontDoor */
#define LOG_BINK     1  /* BinkleyTerm */
#define LOG_QUICK    2  /* QuickBBS */
#define LOG_DBRIDGE  3  /* D'Bridge */


/* --- Setup option bits */

#define NOKILLNULL 0x0001  /* Don't kill null netmail messages while tossing */
#define RESCANOK   0x0002  /* Allow %RESCAN */
#define KEEPREQS   0x0004  /* Keep AreaMgr requests */
#define NONODEADD  0x0008  /* Don't automatically add NodeMgr records */
#define USEHMBBUF  0x0020  /* Use Hudson buffers */
#define KEEPNET    0x0040  /* Don't use Kill/Sent on exported netmail */
#define KEEPMGR    0x0080  /* Don't use Kill/Sent on MGR receipts */
#define NORRQS     0x0100  /* Ignore Return receipt Requests */
#define KILLDUPES  0x0200  /* Kill duplicate messages */
#define DOS32BIT   0x0400  /* Run 32-bit DOS version on 386+ machines */
#define NOCRSTRIP  0x0800  /* Don't strip Soft-CRs */
#define REMOVEJUNK 0x1000  /* Remove "Re:" junk from JAM subjects */
#define NOAUTODISC 0x2000  /* Don't automatically disconnect empty PT areas */
#define NOCHECKEND 0x4000  /* Don't check for valid end of archives */
#define SETPVT     0x8000  /* Set Pvt on imported netmail messages */


/* --- Extra option bits */

#define NOCHKDEST  0x0001  /* Don't check packet destination */
#define AUTOCREAT  0x0002  /* Automatically create message bases */
#define PAUSEOK    0x0004  /* Allow %PAUSE */
#define NOTIFYOK   0x0008  /* Allow %NOTIFY OFF */
#define ADDALLOK   0x0010  /* Allow +* */
#define PWDOK      0x0020  /* Allow %PWD */
#define PKTPWDOK   0x0040  /* Allow %PKTPWD */
#define NOBADPKTS  0x0080  /* Don't notify sysop about BAD/DST/LOC packets */
#define PKTPRGONCE 0x0100  /* Run PKT program only before the first PKT */
#define CREATEBUSY 0x0200  /* Create busy flags */
#define COMPRESSOK 0x0400  /* Allow %COMPRESS */
#define FROMOK     0x0800  /* Allow %FROM */
#define REDIR2NUL  0x1000  /* Redirect output of external utilities to NUL */
#define NOEXPAND   0x2000  /* Don't expand filenames of file attaches */
#define LOCALEXPT  0x4000  /* Export netmail to our own AKA */
#define OPUSDATES  0x8000  /* Use Opus style binary date/time stamps */


/* --- Compression types */

#define PR_ARC  0  /* Compressed mail files created by ARC or PKPAK */
#define PR_ARJ  1  /* Compressed mail files created by ARJ */
#define PR_LZH  2  /* Compressed mail files created by LHA */
#define PR_PAK  3  /* Compressed mail files created by PAK */
#define PR_ZIP  4  /* Compressed mail files created by PKZIP */
#define PR_ZOO  5  /* Compressed mail files created by ZOO */
#define PR_SQZ  6  /* Compressed mail files created by SQZ */
#define PR_UC2  7  /* Compressed mail files created by UC II */
#define PR_RAR  8  /* For compressed mail files created by RAR */
#define PR_PKT 10  /* Uncompressed PKT files */


/* --- Locking method */

#define LOCK_OFF    0  /* Deny Write (Exclusive) */
#define LOCK_RA101  1  /* RemoteAccess 1.01 (SHARE) */
#define LOCK_RA111  2  /* RemoteAccess 1.11 (SHARE) */


/* --- Semaphore mode */

#define SEMAPHORE_OFF  0  /* Don't use semaphores */
#define SEMAPHORE_FD   1  /* FrontDoor 2.1x */
#define SEMAPHORE_IM   2  /* InterMail 2.2x */
#define SEMAPHORE_DB   3  /* D'Bridge 1.5x */
#define SEMAPHORE_BT   4  /* BinkleyTerm 2.5x */
#define SEMAPHORE_MD   5  /* MainDoor */


/* --- Check user name */

#define CHECK_NOT        0  /* Don't check if user name exists */
#define CHECK_USERFILE   1  /* User file (USERS.BBS) */
#define CHECK_USERINDEX  2  /* User index (USERSIDX.BBS / NAMEIDX.BBS) */


/* --- Mailer type */

#define MAILER_FD  0  /* FrontDoor */
#define MAILER_DB  1  /* D'Bridge */
#define MAILER_BT  2  /* BinkleyTerm */


/* --- BBS type */

#define BBS_RA111     0  /* RemoteAccess 1.1x */
#define BBS_RA200     1  /* RemoteAccess 2.xx */
#define BBS_QUICK275  2  /* QuickBBS 2.7x */
#define BBS_SBBS116   3  /* SuperBBS 1.16 */


/* --- Change tear line */

#define TEAR_NO       0  /* No */
#define TEAR_DEFAULT  1  /* Replace default */
#define TEAR_CUSTOM   2  /* Replace custom */
#define TEAR_EMPTY    3  /* Replace empty */
#define TEAR_REMOVE   4  /* Remove */


/* --- PCBoard options */

#define PCB_145COMPAT  0x01  /* PCBoard 14.5 compatibility */


/* --- Wildcat! options */

#define WC_NONOTIFY  0x01  /* Do not notify users of new mail */


typedef struct
{
    ftn_addr address;      /* Uplink address */
    char    areafix[9];    /* AreaFix program */
    char    password[17];  /* AreaFix password */
    char    filename[13];  /* "Forward List" filename */
    byte    unused[6];
    byte    options;       /* See --- Uplink options bits */
    byte    filetype;      /* 0 = Random, 1 = "<areaname> <description>" */
    dword   groups;        /* Nodes must have one of these groups */
    byte    origin;        /* Origin AKA */
} OLDUPLINK;

typedef struct
{
    word zone;
    word net;
    byte aka;
} AKAMATCH;

typedef struct
{
    byte bg_char;
    byte headerframe;
    byte headertext;
    byte background;
    byte bottomline;
    byte bottomtext;
    byte bottomkey;
    byte errorframe;
    byte errortext;
    byte helpframe;
    byte helptitle;
    byte helptext;
    byte helpfound;
    byte winframe;
    byte wintitle;
    byte winline;
    byte wintext;
    byte winkey;
    byte windata;
    byte winselect;
    byte inputdata;
    byte exportonly;
    byte importonly;
    byte lockedout;
} COLORSET;


/* --- SETUP.GE structure */

typedef struct
{
    word sysrev;              /* Must contain GE_THISREV */
    word options;             /* Options bits, see --- Setup option bits */
    word autorenum;           /* Auto renumber value */
    word maxpktsize;          /* Maximum packet size, 0 = unlimited */
    byte logstyle;            /* See --- Log styles */
    byte oldnetmailboard;     /* Netmail board, must be zero now */
    byte oldbadboard;         /* Where bad echomail is stored (0 = path) */
    byte olddupboard;         /* Where duplicates are stored (0 = path) */
    byte recoveryboard;       /* Recovery board (1-200, 0 = delete) */
    byte filebuffer;          /* Size (in KB) of MBU file I/O buffer */
    byte days;                /* Days to keep old mail around */
    byte swapping;            /* Swapping method */
    byte compr_default;       /* Default compresion type */
    byte pmcolor[15];         /* Not used */
    ftn_addr oldaka[OLDAKAS]; /* Main address and AKAs */
    word oldpointnet[OLDAKAS];/* Pointnets for all addresses */
    dword gekey;              /* GEcho registration key */
    dword mbukey;             /* MBUTIL registration key */
    char geregto[51];         /* Text used to generate the GEcho key */
    char mburegto[51];        /* Text used to generate the MBUTIL key */
    char username[USERS][36]; /* User names */
    char hmbpath[53];         /* Hudson message base path */
    char mailpath[53];        /* Netmail path */
    char inbound_path[53];    /* Where incoming compressed mail is stored */
    char outbound_path[53];   /* Where outgoing compressed mail is stored */
    char echotoss_file[65];   /* The ECHOTOSS.LOG used for Squish areas */
    char nodepath[53];        /* Not used */
    char areasfile[65];       /* AREAS.BBS style file */
    char logfile[65];         /* GEcho/MBUTIL log file */
    char mgrlogfile[65];      /* AreaMgr log file */
    char swap_path[53];       /* Swap path */
    char tear_line[31];       /* Tearline to be placed by MBUTIL Export */
    char originline[20][61];  /* Origin lines */
    char compr_prog[10][13];       /* Compression program filenames */
    char compr_switches[10][20];   /* Compression program switches */
    char decompr_prog[10][13];     /* Decompression program filenames */
    char decompr_switches[10][20]; /* Decompression program switches */
    char oldgroups[26][21];   /* Descriptions of area groups */
    byte lockmode;            /* See --- Locking method */
    char secure_path[53];     /* From which secure PKTs are tossed */
    char rcvdmailpath[53];    /* Not used */
    char sentmailpath[53];    /* Not used */
    char semaphorepath[53];   /* Where FD rescan files are stored */
    byte version_major;       /* Major GEcho version */
    byte version_minor;       /* Minor GEcho version */
    byte semaphore_mode;      /* See --- Semaphore modes */
    char badecho_path[53];    /* Where sec. violating and unknown mail is stored */
    byte mailer_type;         /* See --- Mailer type */
    word loglevel;            /* See --- Log level */
    AKAMATCH akamatch[20];    /* AKA matching table */
    char mbulogfile[65];      /* MBUTIL log file */
    word maxqqqs;             /* Max. number of QQQ info stored in memory */
    byte maxqqqopen;          /* Not used */
    byte maxhandles;          /* Max. number of files used by GEcho */
    word maxarcsize;          /* Max. archive size, 0 = unlimited */
    word delfuture;           /* Days to delete messages in the future, 0 = disable */
    word extraoptions;        /* See --- Extra option bits */
    byte firstboard;          /* Not used */
    word reserved1;           /* Reserved */
    word copy_persmail;       /* Not used */
    byte oldpersmailboard[USERS];  /* Personal mail board (0 = path) */
    dword old_public_groups;  /* Public groups (bits 0-25) */
    word dupentries;          /* Number of duplicate entries in ECHODUPE.GE */
    byte oldrcvdboard;        /* Where Rcvd netmail is moved to (0 = path) */
    byte oldsentboard;        /* Where Sent netmail is moved to (0 = path) */
    byte oldakaboard[OLDAKAS];  /* Netmail boards for AKAs */
    byte olduserboard[USERS];  /* Netmail boards for system users, 255 = use AKA board */
    byte reserved2;           /* Reserved */
    OLDUPLINK uplink[OLDUPLINKS];  /* Not used */
    char persmail_path[53];   /* Not used */
    char outpkts_path[53];    /* Where outbound packets are temp. stored */
    word compr_mem[10];       /* Memory needed for compression programs */
    word decompr_mem[10];     /* Memory needed for decompression programs */
    dword pwdcrc;             /* CRC-32 of access password, -1L = no password */
    word default_maxmsgs;     /* Maximum number of messages       (Purge) */
    word default_maxdays;     /* Maximum age of non-Rcvd messages (Purge) */
    char gus_prog[13];        /* General Unpack Shell program filename */
    char gus_switches[20];    /* GUS switches */
    word gus_mem;             /* Memory needed for GUS */
    word default_maxrcvddays; /* Maximum age of Rcvd messages     (Purge) */
    byte checkname;           /* See --- Check user name */
    byte maxareacachesize;    /* Area cache size, 0 .. 64 KB */
    char inpkts_path[53];     /* Where inbound mail packets should be stored */
    char pkt_prog[13];        /* Called before each tossed mail packet */
    char pkt_switches[20];    /* Command line switches */
    word pkt_mem;             /* Memory needed */
    word maxareas;            /* Maximum number of areas */
    word maxconnections;      /* Maximum number of connections per area */
    word maxnodes;            /* Maximum number of nodes */
    word default_minmsgs;     /* Minimum number of messages       (Purge) */
    byte bbs_type;            /* See --- BBS type */
    byte decompress_ext;      /* 0 = 0-9, 1 = 0-F, 2 = 0-Z */
    byte reserved3;           /* Reserved */
    byte change_tearline;     /* See --- Change tear line */
    word prog_notavail;       /* Bit 0-9, 1 = program not available */
    COLORSET gscolor;         /* GSETUP color set, See COLORSET structure */
    byte reserved4[9];        /* Reserved */

    ftn_addr aka[AKAS];        /* Main address and AKAs */
    word pointnet[AKAS];       /* Pointnets for all addresses */
    word akaarea[AKAS];        /* AKA netmail areas */
    word userarea[USERS];      /* Netmail areas for system users, 0 = don't import, 65535 = use AKA area */
    word persmailarea[USERS];  /* Personal mail area (0 = don't copy) */
    word rcvdarea;             /* Rcvd netmail area (0 = don't move) */
    word sentarea;             /* Sent netmail area (0 = don't move) */
    word badarea;              /* Where bad echomail is stored (0 = path) */
    word reserved5;            /* Not used */
    char jampath[53];          /* JAM message base path */
    char userbase[53];         /* User base path */
    char dos4gw_exe[65];       /* DOS4GW.EXE protected mode run time file */
    GROUPS public_groups;      /* Public groups (bits 0-255) */
    word maxgroupconnections;  /* Maximum number of connections per group */
    word maxmsgsize;           /* Maximum message size (64-1024 kB) */
    word diskspace_threshold;  /* Amount of free disk space that causes packing */
    byte pktsort;              /* 0 = No, 1 = Area, 2 = Area + Date/Time */
    char wildcatpath[53];      /* Wildcat! home path */
    byte wcoptions;            /* Wildcat! options */
    byte pcboptions;           /* PCBoard options */
} SETUP_GE;

#define IMPORTSB  0x0001  /* Import SEEN-BY lines to message base */
#define SECURITY  0x0002  /* Only accept mail from nodes in connections list */
#define PASSTHRU  0x0004  /* Mail is not imported, only forwarded */
#define VISIBLE   0x0008  /* Area is visible for anyone in AreaMgr's %LIST */
#define REMOVED   0x0010  /* Area should be removed by GSETUP Pack */
#define NOUNLINK  0x0020  /* Do not allow users to unlink this area */
#define TINYSB    0x0040  /* Tiny SEEN-BYs with only nodes in connections list */
#define PVT       0x0080  /* Private bits are preserved and are not stripped */
#define CHECKSB   0x0100  /* Use SEEN-BYs for duplicate prevention */
#define NOPAUSE   0x0200  /* Do not allow users to pause this area */
#define SDM       0x0400  /* Area is stored in *.MSG format */
#define HIDESB    0x0800  /* Hide imported SEEN-BY lines */
#define NOIMPORT  0x1000  /* AreaMgr will set new nodes to Export-Only */
#define DELFUTURE 0x2000  /* Del messages dated in the future */
#define NOTIFIED  0x4000  /* Sysop notified that area was disconnected */
#define UPLDISC   0x8000  /* Disconnected from uplink (only for PT areas) */


#define NODUPECHK 0x01  /* Don't do duplicate checking for this area */
#define NOLINKING 0x02  /* Don't do reply chain linking for this area */
#define HIDDEN    0x04  /* Area is hidden for everyone */


#define ECHOMAIL   0
#define NETMAIL    1
#define LOCAL      2
#define BADECHO    3
#define PERSONAL   4
#define NUM_TYPES  5


#define FORMAT_PT      0  /* Passthru */
#define FORMAT_HMB     1  /* Hudson Message Base */
#define FORMAT_SDM     2  /* *.MSG base */
#define FORMAT_JAM     3  /* Joaquim-Andrew-Mats message base proposal */
#define FORMAT_PCB     4  /* PCBoard 15.0 */
#define FORMAT_SQUISH  5  /* Squish 2.0 */
#define FORMAT_WC      6  /* Wildcat! 4.0 */
#define NUM_FORMATS    7


typedef struct
{
    word hdrsize;         /* sizeof(AREAFILE_HDR) */
    word recsize;         /* sizeof(AREAFILE_GE) */
    word maxconnections;  /* Maximum number of entries in connections list */
} AREAFILE_HDR;


typedef struct
{
    char name[51];       /* Area name must be uppercase, no spaces */
    char comment[61];    /* Description of the topics discussed in area */
    char path[51];       /* Path where the *.MSG files are stored */
    char originline[61]; /* Custom origin line, used if origlinenr = 0 */
    word areanumber;     /* Area number (1-200 = Hudson) */
    byte group;          /* Group (0-255) */
    word options;        /* See --- Area option bits */
    byte originlinenr;   /* Origin line (1-20, 0 = custom) */
    byte pkt_origin;     /* Address for the packet/Origin line (0-31) */
    dword seenbys;       /* Addresses (bits 0-31) to add to the SEEN-BY */
    word maxmsgs;        /* Maximum number of messages       (MBUTIL Purge) */
    word maxdays;        /* Maximum age of non-Rcvd messages (MBUTIL Purge) */
    word maxrcvddays;    /* Maximum age of Rcvd messages     (MBUTIL Purge) */
    byte areatype;       /* See --- Area type */
    byte areaformat;     /* See --- Area format */
    byte extraoptions;   /* See --- Extra area option bits */
} AREAFILE_GE;

/* --- Connection entry status bits */

#define CONN_NOIMPORT  0x01  /* Don't accept mail from this node */
#define CONN_NOEXPORT  0x02  /* Don't forward mail to this node */
#define CONN_PAUSE     0x04  /* Temporary don't send this area to this node */
#define CONN_NOUNLINK  0x08  /* Don't allow this node to disconnect */
#define CONN_ISUPLINK  0x10  /* Node is uplink for this area */

/* --- Connections list entry */

typedef struct
{
    ftn_addr address;
    byte     status;
} CONNECTION;


//  ------------------------------------------------------------------

#if defined(GOLD_CANPACK)
    #pragma pack()
#endif


//  ------------------------------------------------------------------

#endif

//  ------------------------------------------------------------------
