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

//  ------------------------------------------------------------------
//  The Goldware Library
//  Copyright (C) 1989-1994 Peter Stewart & InterZone Software, inc. 
//  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$
//  ------------------------------------------------------------------
//  FD.SYS definitions for InterMail 2.2x
//  ------------------------------------------------------------------

#ifndef __gs_inter_h
#define __gs_inter_h


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

#include <gftnall.h>


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

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


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

typedef struct {

  /* The logfile */

  char     log[71];
  word     loglevel;                /* See --- Loglevels */

  /* Number manipulation */

  char     prefix[31];              /* Always added */
  char     hidden[10][31];          /* Strip these if they are in # */
  char     postfix[31];             /* Always appended */

  /* Miscellaneous flags */

  long     flags;                   /* See --- Miscellaneous flags */
  long     flags_reserved;          /* Reserved flags */
  word     audio;                   /* See --- Audio flags */
  byte     synchtimer;              /* Number of seconds for sync */

  /* Errorlevels */

  byte     crashexit;               /* Mail exit */
  byte     bbs300;
  byte     bbs1200;
  byte     bbs1275;
  byte     bbs2400;
  byte     bbs4800;
  byte     bbs9600;
  byte     bbs19200;
  byte     bbs38400;

  /* Modem */

  word     modembaud;               /* 30=300, 24=2400, etc. */
  byte     modemport;               /* 1-255 (COM1=1, COM2=2, etc.) */
  byte     modemdelay;              /* 1/10 seconds delay / line sent */

  /* --- Messages */

  char     b300msg[16];
  char     b1200msg[16];
  char     b1275msg[16];
  char     b2400msg[16];
  char     b4800msg[16];
  char     b9600msg[16];
  char     b19200msg[16];
  char     b38400msg[16];
  char     errormsg[16];
  char     busymsg[16];
  char     carriermsg[16];
  char     okmsg[16];
  char     ringmsg[16];
  char     nodialmsg[16];
  char     noanswmsg[16];
  char     voicemsg[16];

  /* --- Commands */

  char     escapestr[11];
  char     offhookstr[11];
  char     reconnectstr[11];
  char     init1[50];
  char     init2[50];
  char     init3[50];
  char     resetstr[50];
  char     downstr[50];
  char     hangupstr[11];
  char     dialstr[11];

  /* --- Manual answer stuff */

  char     modemanswer[11];
  byte     answerdelay;

  /* ------ Limited answer start and end times */

  byte     begin_hour;
  byte     begin_minute;
  byte     end_hour;
  byte     end_minute;

  /* Calling control */

  byte     retrybusy;
  byte     retryresend;
  byte     retrydelay;

  /* File request control */

  char     reqlist[71];             /* List to scan for reqable dirs    */
  char     reqalias[71];            /* Magic filenames                  */
  char     reqmessage[71];          /* Appended to FAILED REQUEST message */
  byte     reqtype;                 /* Bit field                        */
  byte     reqmaxfiles;             /* Max number of files to send on 1 req*/
  word     reqmaxtime;              /* Maximum number of minutes for req*/
  word     reqmaxsize;              /* Maximum size (in KB) for req     */
  word     reqminbaud;              /* Minimum baudrate for req         */
  byte     reqstarthr;              /* Start time for file requests, can be*/
  byte     reqstartmin;             /* combined with the reqdays field. */
  byte     reqendhr;
  byte     reqendmin;
  byte     reqdays;

  /* File to send when human callers are let thru */

  char     bbsname[11];
  char     beforebbsbanner[71];

  /* Function keys from mailer menu */

  struct {
    char cmd[61];
    char title[26];
    byte behavior;             /* 1-Pause, 2-Process msg base */
  } key[24];

  /* Mailer colors */

  byte     color[11];

  /* Number of days to keep entries in history files */

  byte     keep_history;

  /* FDServer password, if none given, server is INactive */

  char     slavepwd[21];

  /* File displayed to users when system is in event for no callers */

  char     ineventfile[71];

  /* File displayed when human callers are seen on mail-only system */

  char     mailonlyfile[71];

  /* External programs to run on certain "wake-up" strings */

  struct {
    char wakeupstr[40];
    byte errorlevel;
  } externmail[10];

  /* RESERVED FIELD */

  /* --- Limited audio start and end times. If the below four bytes
         are all zero (0), audio is enabled all the time */

  byte     audio_begin_hour;
  byte     audio_begin_minute;
  byte     audio_end_hour;
  byte     audio_end_minute;

  /* ---    Minimum cost to process undialable */

  word     min_undial_cost;

  char     RESERVERAT[886];
  char     extrnreq  [71];
  char     modem_name[61];            /* modem name, for 'modem selection' */
} _mailer;


/* Netmail folder behavior */

#define RESTRICTED      0x00000001L
#define EXPORTOK        0x00000004L
#define USEXLATTABLES   0x00000008L
#define EDREADONLY      0x00000020L

/* Echomail flags */

#define SAVEBAD         0x00000001L

typedef struct {
  char    path[65];      /* Path if "board==0", otherwise empty (65) */
  byte    ftype;         /* Folder type                              */
  char    areatag[39];   /* Echomail area tag                        */
  byte    origin;        /* Default origin line, 0-19                */
  char    title[41];     /* Title to appear on screen                */
  byte    useaka;        /* AKA to use, 0==primary                   */
  word    board;         /* QuickBBS/RemoteAccess/WC board number    */
  word    upzone;        /* Uplink zone                              */
  word    upnet;         /* Uplink net                               */
  word    upnode;        /* Uplink node                              */
  word    uppoint;       /* Uplink point                             */
  long    behave;        /* Behavior, see above                      */
  long    hiwater;       /* Highwater mark for echomail              */
  long    pwdcrc;        /* CRC32 of password or -1L if unprotected  */
  long    userok;        /* Users with initial access                */
  long    accflags;      /* access flags, for network environment    */
  char    reserved[8];   /* for future expansion                     */
} _eFOLDER;

#define MSGPRIVATE      0x0001
#define MSGCRASH        0x0002
#define MSGREAD         0x0004
#define MSGSENT         0x0008
#define MSGFILE         0x0010
#define MSGTRANSIT      0x0020
#define MSGORPHAN       0x0040
#define MSGKILL         0x0080
#define MSGLOCAL        0x0100
#define MSGHOLD         0x0200
#define MSGUNUSED       0x0400
#define MSGFREQ         0x0800
#define MSGRRREQ        0x1000
#define MSGISRR         0x2000
#define MSGAREQ         0x4000
#define MSGFUPDREQ      0x8000

typedef struct {

  /* Macro keys */

  char     macrokey[24][61];        /* F1-F12, Shift F1-F12 */

  /* Margin, default==60 */

  byte     margin;

  /* Default message status */

  word     msgbits;

  /* Miscellaneous settings */

  long     flags;

  /* Origin lines */

  char     origin[20][61];

  /* Editor colors */

  byte     color[15];

  /* Netmail folder flags */

  long     netfolderflags;

  /* Translation tables IN/OUT */

  byte     translate_in[256];
  byte     translate_out[256];

  /* Where RemoteAccess/QuickBBS message base files are */

  char     qbase[71];
  char     WCmain[71];

  /* RESERVED */

  char     RESERVERAT[255];
  long     echoflags;
  _eFOLDER BBSnet;
  _eFOLDER dupes;
  _eFOLDER badecho;
  char     echolog[65];
  char     IMEWork[71];

} _editor;

typedef struct {
  char     systempath[71];
  char     mailpath[71];
  char     swap_path[71];
  char     semaphore[71];
  char     secfilespath[71];
  char     infilepath[71];
  char     packetpath[71];
  char     nodelistpath[71];

  word     countrycode;

  ftn_addr aka[11];

  /* Timeout value for screen blanker in SECONDS (0-255) */

  long     flags;
  byte     blackout_time;

  /* User record */

  struct {
    char  name[37];
    long  pwdcrc;           /* Crc-32 of user password, -1L No pwd */
    dword flags;
  }        user[10];

  /* Protection of exits */

  dword    exitpwdcrc;          /* Password for DOS shell, exits, etc. */
  dword    exitflags;           /* Which flags should be protected */
  char     filler[760];         /* contains domain stuff */
  char     systemname[50];      /* site_info - system name */
  char     systemloc[40];       /* site_info - location */
  char     systemphone[24];     /* site_info - phone */
  char     fill[6];             /* 6 loose bytes :) */
  char     systemflags[20];     /* site_info - nodelist flags */
  char     systemcountry[26];   /* site_info - country */
  char     serial[14];          /* serial number */
  char     outecho[66];         /* outbound echomail packets */
  char     reserved[10];        /* reserved space */
} _shared;

typedef struct {
  char     initstring[41];      /* Init string                         */
  word     scrollsize;          /* Max memory to use for buffer (in K) */
  byte     emulation;           /* 0=TTY, 1=ANSI, 2=VT52, 3=VT100      */
  byte     protocol;            /* Index in protocol list              */
  char     shiftkey[12][31];    /* Shift F1-F12 macro settings         */
  char     ctrlkey[12][31];     /* Ctrl  F1-F12 macro settings         */
  char     downloadpath[60];    /* Default download path               */
  char     uploadpath[60];      /* Default upload path                 */
  byte     translate_in[256];   /* Translation table - modem->screen   */
  byte     translate_out[256];  /* Translation table - screen->modem   */
  byte     retrywait;           /* Seconds to wait before next dial..  */
  dword    flags;               /* Behavior, sounds, flashes.. etc.    */
  dword    directorypwd;        /* CRC-32 of password to enter phoneDir*/
  char     editor[60];          /* Invoked with Alt-I                  */
  char     RESERVERAT[796];     /* Reserved space                      */
  ftn_addr newaka[21];
} _terminal;

typedef struct {
  char     port;       /* 0 LPT1, 1 LPT2, 2 LPT3, 3 COM1, 4 COM2 */
  char     baud;       /* 0 9600, 1 4800, 2 2400, 3 1200 */
  byte     stopbits;   /* 0x00 - 1, 0x01 - 2 */
  byte     wordlength; /* 0x00 - 7, 0x01 - 8 */
  byte     parity;     /* 0x00 - Even, 0x01 - Odd, 0x02 - None */
  byte     pagelen;
  long     behavior;
  char     init[71];
  char     reset[71];
  char     bold_on[31];
  char     bold_off[31];
  char     pr1RESERVED[62];
  char     italic_on[31];
  char     italic_off[31];
  byte     pagewidth;           /* Width in columns of a page */
  byte     leftmargin;          /* Left margin, ie. start printing at column*/
  byte     footer;              /* Footer margin, ie. leave nn lines */
  byte     header;              /* Header margin, ie. skip nn lines */
  byte     translate_out[256];  /* Translation table - disk->printer */
  char     pr2RESERVED[100];
} _printer;

#define IM_THISREV 0x0100

struct _ctl {
  char      fingerprint[5];  /* Must contain "JoHo" */
  word      sysrev;          /* Must contain THISREV above */
  dword     ctlcrc;          /* CRC-32 of struct excluding the 1st 11 bytes */
  _mailer   m;
  _editor   e;
  _shared   s;
  _terminal t;
  _printer  p;
  dword     ctlcrc2;         /* CRC-32 of all the above */
};

//  Constant long bit values

#define RESTRICT    0x00000001L
#define ECHO_INFO   0x00000002L
#define EXPORT_OK   0x00000004L
#define USE_XLAT    0x00000008L
#define PRIVATE     0x00000010L
#define READONLY    0x00000020L
#define F_NETMAIL   0x08000000L
#define BOARDTYPE   0x10000000L
#define DELETED     0x20000000L         /* Never written to disk */
#define LOCAL       0x40000000L
#define ECHOMAIL    0x80000000L

#define F_MSG       0
#define F_HUDSON    1
#define F_WC35      2
#define F_PCB15     3
#define F_JAM       4

//  Folder structure

typedef struct {
  char    path[65];      /* Path if "board==0", otherwise empty (65) */
  byte    ftype;         /* Folder type                              */
  char    areatag[39];   /* Echomail area tag                        */
  byte    origin;        /* Default origin line, 0-19                */
  char    title[41];     /* Title to appear on screen                */
  byte    useaka;        /* AKA to use, 0==primary                   */
  word    board;         /* QuickBBS/RemoteAccess/WC conf number     */
  word    upzone;        /* Uplink zone                              */
  word    upnet;         /* Uplink net                               */
  word    upnode;        /* Uplink node                              */
  word    uppoint;       /* Uplink point                             */
  long    behave;        /* Behavior, see above                      */
  long    hiwater;       /* Highwater mark for echomail              */
  long    pwdcrc;        /* CRC32 of password or -1L if unprotected  */
  long    userok;        /* Users with initial access                */
  long    accflags;      /* access flags, for network environment    */
  long    timestamp;     /* Time stamp for detecting msg base updates*/
  char    reserved[4];   /* for future expansion                     */
} FOLDER;

//  The following struct was used in IM 2.00-2.25, file name FOLDER.CFG.

typedef struct {
  char    path[65];      /* Path if "board==0", otherwise empty (65) */
  char    title[41];     /* Title to appear on screen                */
  byte    origin;        /* Default origin line, 0-19                */
  long    behave;        /* Behavior, see above                      */
  long    pwdcrc;        /* CRC32 of password or -1L if unprotected  */
  long    userok;        /* Users with initial access                */
  byte    useaka;        /* AKA to use, 0==primary                   */
  word    board;         /* QuickBBS/RemoteAccess/WC board number    */
} OLDFOLDER;


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

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


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

#endif

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