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

//  ------------------------------------------------------------------
//  The Goldware Library
//  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$
//  ------------------------------------------------------------------
//  RemoteAccess 2.xx configuration data structures.
//  ------------------------------------------------------------------

#ifndef __GS_RA2_H
#define __GS_RA2_H


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

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

//  ------------------------------------------------------------------
//
//  C++ structures for RemoteAccess 2.00 GAMMA.
//
//  Based on the document STRUCT.200 which is (C) Copyright Andrew
//  Milner & Continental Software, 1993. All rights reserved.
//
//  ------------------------------------------------------------------

typedef char      Char;
typedef uint8_t   Byte;
typedef uint8_t   Boolean;
typedef  int16_t  Integer;
typedef uint16_t  Word;
typedef  int32_t  LongInt;

typedef Byte       FlagType[4];
typedef Char       ra_Time[6];
typedef Char       Date[9];
typedef Char       LongDate[10];
typedef Byte       ByteArray32[32];

typedef Byte AskType;
typedef Byte VideoType;
typedef Byte MsgType;
typedef Byte MsgKindsType;
typedef Byte OrphanType;

enum _AskType      { Yes, No, Ask, Only };
enum _VideoType    { Auto, Short, Long };
enum _MsgType      { LocalMail, NetMail, EchoMail };
enum _MsgKindsType { Both, Private, Public, ROnly, NoReply };
enum _OrphanType   { Ignore, Create, Kill };

struct NetAddress {
  Word             Zone,
                   Net,
                   Node,
                   Point;
};

typedef Char       MSGTOIDXrecord[36];

struct USERSIDXrecord {
  LongInt          NameCRC32,
                   HandleCRC32;
};

typedef Word       COMBINEDrecord[200];

struct USERSrecord {
  MSGTOIDXrecord   Name;
  Char             Location[26];
  Char             Organisation[51];
  Char             Address1[51];
  Char             Address2[51];
  Char             Address3[51];
  Char             Handle[36];
  Char             Comment[81];
  LongInt          PasswordCRC;
  Char             DataPhone[16];
  Char             VoicePhone[16];
  ra_Time             LastTime;
  Date             LastDate;

  Byte             Attribute,

                   /* Bit 0 : Deleted
                          1 : Clear screen
                          2 : More prompt
                          3 : ANSI
                          4 : No-kill
                          5 : Xfer priority
                          6 : Full screen msg editor
                          7 : Quiet mode */

                   Attribute2;

                   /* Bit 0 : Hot-keys
                          1 : AVT/0
                          2 : Full screen message viewer
                          3 : Hidden from userlist
                          4 : Page priority
                          5 : No echomail in mailbox scan
                          6 : Guest account
                          7 : Post bill enabled */

  FlagType         Flagsx;
  LongInt          Credit,
                   Pending;
  Word             MsgsPosted,
                   Security;
  LongInt          LastRead,
                   NoCalls,
                   Uploads,
                   Downloads,
                   UploadsK,
                   DownloadsK,
                   TodayK;
  Integer          Elapsed;
  Word             ScreenLength;
  Byte             LastPwdChange;
  Word             Group;
  COMBINEDrecord   CombinedInfo;
  Date             FirstDate,
                   BirthDate,
                   SubDate;
  Byte             ScreenWidth,
                   Language,
                   DateFormat;
  Char             ForwardTo[36];
  Word             MsgArea,
                   FileArea;
  Char             DefaultProtocol;
  Word             FileGroup;
  Byte             LastDOBCheck;
  Byte             Sex;
  LongInt          XIrecord;
  Word             MsgGroup;
  Byte             FreeSpace[48];
};

struct USERSXIrecord {
  Byte             FreeSpace[200];
};

struct MESSAGErecord {
  Word             AreaNum;   // NEW in 2.50
  Word             Unused;
  Char             Name[41];
  MsgType          Typ;
  MsgKindsType     MsgKinds;
  Byte             Attribute;

                   /* Bit 0 : Enable EchoInfo
                          1 : Combined access
                          2 : File attaches
                          3 : Allow aliases
                          4 : Use SoftCRs as Characters
                          5 : Force handle
                          6 : Allow deletes
                          7 : Is a JAM area */

  Byte             DaysKill,      /* Kill older than 'x' days */
                   RecvKill;      /* Kill recv msgs, recv for more than 'x' days */
  Word             CountKill;

  Word             ReadSecurity;
  FlagType         ReadFlags,
                   ReadNotFlags;

  Word             WriteSecurity;
  FlagType         WriteFlags,
                   WriteNotFlags;

  Word             SysopSecurity;
  FlagType         SysopFlags,
                   SysopNotFlags;

  Char             OriginLine[61];
  Byte             AkaAddress;

  Byte             Age;

  Char             JAMbase[61];
  Word             Group;
  Word             AltGroup[3];

  Byte             Attribute2;

                   /* Bit 0 : Include in all groups */

  Byte             FreeSpace2[9];
};

struct GROUPrecord {
  Word             AreaNum;
  Char             Name[41];
  Word             Security;
  FlagType         Flagsx,
                   NotFlagsMask;
  Byte             FreeSpace[100];
};

struct CONFrecord {
  Char             Name[9];
  Char             Parent[9];
  Char             Desc[71];
  Byte             Attr;

                   /* Bit 0 : Private
                          1 : Unlisted
                          2 : Global
                          3 : Permanent
                          4 : Use handles
                                        */

  Char             Moderator[36];
  Char             Language[21];
  Char             Password[16];
  Word             Security;
  FlagType         Flagsx;
  Byte             NumNodes;
  Byte             Active[250];
  Boolean          Child[250];
  FlagType         NotFlagsMask;
  Byte             FreeSpace[96];
};

struct ARCrecord {
  Char             Extension[4];
  Char             UnpackCmd[61];
  Char             PackCmd[61];
};

struct CONFIGrecord {
  Word             VersionID;
  Byte             xCommPort;
  LongInt          xBaud;
  Byte             xInitTries;
  Char             xInitStr[71];
  Char             xBusyStr[71];
  Char             xInitResp[41];
  Char             xBusyResp[41];
  Char             xConnect300[41];
  Char             xConnect1200[41];
  Char             xConnect2400[41];
  Char             xConnect4800[41];
  Char             xConnect9600[41];
  Char             xConnect19k[41];
  Char             xConnect38k[41];
  Boolean          xAnswerPhone;
  Char             xRing[21];
  Char             xAnswerStr[21];
  Boolean          xFlushBuffer;
  Integer          xModemDelay;

  Word             MinimumBaud;
  Word             GraphicsBaud,
                   TransferBaud;
  ra_Time             SlowBaudTimeStart,
                   SlowBaudTimeEnd,
                   DownloadTimeStart,
                   DownloadTimeEnd;

  ra_Time             PageStart[7];
  ra_Time             PageEnd[7];

  Char             SeriNum[23];
  Char             CustNum[23];
  Byte             FreeSpace1[24];
  Word             PwdExpiry;

  Char             MenuPath[61];
  Char             TextPath[61];
  Char             AttachPath[61];
  Char             NodelistPath[61];
  Char             MsgBasePath[61];
  Char             SysPath[61];
  Char             ExternalEdCmd[61];

  NetAddress       Address[10];
  Char             SystemName[31];

  Word             NewSecurity;
  Word             NewCredit;
  FlagType         NewFlags;

  Char             OriginLine[61];
  Char             QuoteString[16];
  Char             Sysop[36];
  Char             LogFileName[61];
  Boolean          FastLogon,
                   AllowSysRem,
                   MonoMode,
                   StrictPwdChecking,
                   DirectWrite,
                   SnowCheck;
  Integer          CreditFactor;

  Word             UserTimeOut,
                   LogonTime,
                   PasswordTries,
                   MaxPage,
                   PageLength;
  Boolean          CheckForMultiLogon,
                   ExcludeSysopFromList,
                   OneWordNames;
  AskType          CheckMail;
  Boolean          AskVoicePhone,
                   AskDataPhone,
                   DoFullMailCheck,
                   AllowFileShells,
                   FixUploadDates,
                   FreezeChat;
  AskType          ANSI,              /* ANSI: Yes, no, or ask new users     */
                   ClearScreen,       /* Clear:        "                     */
                   MorePrompt;        /* More:         "                     */
  Boolean          UploadMsgs;
  AskType          KillSent;          /* Kill/Sent     "                     */

  Word             CrashAskSec;       /* Min sec# to ask 'Crash Mail ?'      */
  FlagType         CrashAskFlags;
  Word             CrashSec;          /* Min sec# to always send crash mail. */
  FlagType         CrashFlags;
  Word             FAttachSec;        /*        "    ask 'File Attach ?'     */
  FlagType         FAttachFlags;

  Byte             NormFore,
                   NormBack,
                   StatFore,
                   StatBack,
                   HiBack,
                   HiFore,
                   WindFore,
                   WindBack,
                   ExitLocal,
                   Exit300,
                   Exit1200,
                   Exit2400,
                   Exit4800,
                   Exit9600,
                   Exit19k,
                   Exit38k;

  Boolean          MultiLine;
  Byte             MinPwdLen;
  Word             MinUpSpace;
  AskType          HotKeys;
  Byte             BorderFore,
                   BorderBack,
                   BarFore,
                   BarBack,
                   LogStyle,
                   MultiTasker,
                   PwdBoard;
  Word             xBufferSize;
  Char             FKeys[10][61];

  Boolean          WhyPage;
  Byte             LeaveMsg;
  Boolean          ShowMissingFiles,
                   xLockModem;
  Byte             FreeSpace2[10];
  Boolean          AllowNetmailReplies;
  Char             LogonPrompt[41];
  AskType          CheckNewFiles;
  Char             ReplyHeader[61];
  Byte             BlankSecs;
  Byte             ProtocolAttrib[6];
  Char             xErrorFreeString[16];
  Byte             xDefaultCombined[25];
  Word             RenumThreshold;
  Char             LeftBracket,
                   RightBracket;
  Boolean          AskForHandle;
  Boolean          AskForBirthDate;

  Word             GroupMailSec;

  Boolean          ConfirmMsgDeletes;

  Byte             FreeSpace4[30];

  Char             TempScanDir[61];
  AskType          ScanNow;
  Byte             xUnknownArcAction,
                   xFailedUnpackAction,
                   FailedScanAction;      /* Bit 0:Mark deleted, 1:Mark unlisted, 2:Mark notavail */
  Word             xUnknownArcArea,
                   xFailedUnpackArea,
                   FailedScanArea;
  Char             ScanCmd[61];
  Boolean          xDeductIfUnknown;

  Byte             NewUserGroup;
  AskType          AVATAR;
  Byte             BadPwdArea;
  Char             Location[41];
  Byte             DoAfterAction;         /* 0 = wait for CR, > 0 = wait for x seconds */
  Char             OldFileLine[41];
  Byte             CRfore,
                   CRback;
  Char             LangHdr[41];
  Boolean          xSendBreak;
  Char             ListPath[61];
  AskType          FullMsgView;
  AskType          EMSI_Enable;
  Boolean          EMSI_NewUser;

  Char             EchoChar[2];
  Char             xConnect7200[41];
  Char             xConnect12000[41];
  Char             xConnect14400[41];
  Byte             Exit7200;
  Byte             Exit12000;
  Byte             Exit14400;
  Char             ChatCommand[61];
  AskType          ExtEd;
  Byte             NewuserLanguage;
  Char             LanguagePrompt[41];
  VideoType        VideoMode;
  Boolean          AutoDetectANSI;
  Boolean          xOffHook;
  Byte             NewUserDateFormat;
  Char             KeyboardPwd[16];
  Boolean          CapLocation;
  Byte             NewuserSub;
  Char             PrinterName[5];
  Byte             HilitePromptFore,
                   HiLitePromptBack;
  Char             xInitStr2[71];
  Boolean          AltJSwap;
  Char             SemPath[61];
  Boolean          AutoChatCapture;

  Char             FileBasePath[61];
  Boolean          NewFileTag;
  Boolean          IgnoreDupeExt;
  Char             TempCDFilePath[61];
  Byte             TagFore,
                   TagBack;
  Char             xConnect16k[41];
  Byte             Exit16k,
                   FilePayback;
  Char             FileLine[201];
  Char             FileMissingLine[201];
  Byte             NewUserULCredit;
  Word             NewUserULCreditK;
  ARCrecord        ArcInfo[10];
  Char             RAMGRAltFKeys[5][61];
  Char             ArcViewCmd[61];
  Char             xConnectFax[41];
  Byte             ExitFax;
  Boolean          UseXMS,
                   UseEMS;
  Byte             CheckDOB;
  AskType          EchoCheck;
  Word             ccSec,
                   ReturnRecSec;
  Boolean          HonourNetReq;
  COMBINEDrecord   DefaultCombined;
  Boolean          AskForSex,
                   AskForAddress;
  AskType          DLdesc;
  Boolean          NewPhoneScan;
  Byte             FutureExpansion[587];
};


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

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

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

#endif

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