//  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$
//  ------------------------------------------------------------------
//  QuickBBS (old and new) configuration data structures
//  ------------------------------------------------------------------

#ifndef __GS_QBBS_H
#define __GS_QBBS_H


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

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

//  ------------------------------------------------------------------
//  QuickBBS 2.60, CONFIG.BBS structure

typedef struct {
  byte  Status;       // 0=Disabled 1=Enabled
  char  RunTime[6];
  byte  ErrorLevel;
  byte  Days;
  byte  Forced;
  char  LastTimeRun[9];
} Q260EvtRecT, *Q260EvtRecP, **EvtRecI;

typedef struct {
  char  Name[17];
  byte  Typ;          // 0=Standard 1=Net 3=Echo
  byte  Kinds;        // 0=Private & Public 1=Private 2=Public 3=Read-Only
  byte  Combined;
  byte  Aliases;      // 0=no aliases,1=yes,2=ask alias,3=Alias/name
  short  ReadSecLvl;
  byte  ReadFlags[4];
  short  WriteSecLvl;
  byte  WriteFlags[4];
  short  SysopSecLvl;
  byte  SysopFlags[4];
} Q260BrdRecT, *Q260BrdRecP, **Q260BrdRecI;

typedef struct {
  short        CommPort;
  word        InitBaud;
  word        InitTimes;
  word        AnswerWait;
  char        ModemInitStr[71];
  char        ModemBusyStr[71];
  char        ModemInitResp[41];
  char        ModemBusyResp[41];
  char        Resp300[41];
  char        Resp1200[41];
  char        Resp2400[41];
  char        MenuPath[67];
  char        TextPath[67];
  char        NetPath[67];
  short        MinBaud;
  short        GraphicsBaud;
  short        XferBaud;
  char        LowBaudStart[6];
  char        LowBaudEnd[6];
  char        DownloadStart[6];
  char        DownloadEnd[6];
  char        PagingStart[6];
  char        PagingEnd[6];
  short        MatrixZone;
  short        MatrixNet;
  short        MatrixNode;
  short        AkaNet[5];
  short        AkaNode[5];
  short        NetMailBoard;
  short        DefaultSec;
  short        DefaultCredit;
  byte        DefaultFlags[4];
  char        EditorCmdStr[71];
  char        OriginLine[61];
  char        SysopName[36];
  byte        AutoLogonChar;
  byte        FastLogon;
  byte        ScreenBlanking;
  byte        UseLastRead;
  byte        MonoMode;
  byte        DirectWrite;
  byte        SnowCheck;
  byte        NetEchoExit;
  byte        OneWordNames;
  byte        CheckMail;
  byte        AskHomePhone;
  byte        AskDataPhone;
  byte        GraphicsAvail;
  short        InactiveTimeOut;
  short        LogonTime;
  short        DefFgColor;
  short        DefBgColor;
  short        PasswordTries;
  short        MaxPageTimes;
  short        PageBellLen;
  byte        Use_Xmodem;
  byte        Use_Xmodem1k;
  byte        Use_Ymodem;
  byte        Use_YmodemG;
  byte        Use_Sealink;
  byte        Use_Zmodem;
  byte        Inp_Fields;
  char        QuoteStr[4];
  short        UploadCredit;
  char        LoadingMessage[71];
  char        SelectionPrompt[71];
  word        VersionID;
  char        Resp4800[41];
  char        Resp9600[41];
  short        AkaZone[5];
  short        MatrixPoint;
  short        AkaPoint[5];
  byte        UseAka[200];
  byte        Spare[51];
  Q260EvtRecT Events[30];
  Q260BrdRecT Boards[200];
} Q260CfgRecT, *Q260CfgRecP;


//  ------------------------------------------------------------------
//  QuickBBS 2.76.G2, USERS.BBS structure

typedef struct {
  char  Name[36];
  char  City[26];
  char  Pwd[16];
  char  DataPhone[13];
  char  HomePhone[13];
  char  LastTime[6];
  char  LastDate[9];
  byte  Attrib;
  byte  Flagsx[4];
  word  Credit;
  word  Pending;
  word  TimesPosted;
  word  HighMsgRead;
  word  SecLvl;
  word  Times;
  word  Ups;
  word  Downs;
  word  UpK;
  word  DownK;
  short  TodayK;
  short  Elapsed;
  short  Len;
  word  CombinedPtr;  // Record number in COMBINED.BBS
  word  AliasPtr;     // Record number in ALIAS.BBS
  long  Birthday;
} Q276UsrRecT, *Q276UsrRecP, **Q276UsrRecI;

//    Attrib:
//
//    Bit 0: Deleted
//    Bit 1: Screen Clear Codes
//    Bit 2: More Prompt
//    Bit 3: ANSI
//    Bit 4: No-Kill
//    Bit 5: Ignore Download Hours
//    Bit 6: ANSI Full Screen Editor
//    Bit 7: Sex (0=male, 1=female)


//  ------------------------------------------------------------------
//  QuickBBS 2.76.G2, MSGCFG.DAT structure

typedef struct {
  word  Security;
  byte  Flagsx[4];
} Q276SecRecT;

typedef struct {
  char        Name[41];
  byte        Typ;
  byte        Kinds;
  byte        Combined;
  byte        Aliases;
  byte        Aka;
  char        OriginLine[59];
  byte        AllowDelete;
  word        KeepCnt;
  word        KillRcvd;
  word        KillOld;
  Q276SecRecT ReadSec;
  Q276SecRecT WriteSec;
  Q276SecRecT TemplateSec;
  Q276SecRecT SysopSec;
  short        FileArea;
  byte        Group;
  byte        Spare[9];
} Q276BrdRecT, *Q276BrdRecP, **Q276BrdRecI;


//  ------------------------------------------------------------------
//  QuickBBS 2.76.G2, QUICKCFG.DAT structure

typedef struct {
  char  TranslateFrom[26];
  word  TranslateTo;
} Q276MdmXltRecT;

typedef struct {
  word            VersionID;
  byte            Node;
  short            CommPort;             // Modem Parameters
  word            InitBaud;
  word            ModemDelay;
  short            InitTimes;
  short            AnswerWait;
  char            ModemInitStr[71];
  char            ModemBusyStr[71];
  char            ModemInitResp[41];
  char            ModemBusyResp[41];
  Q276MdmXltRecT  ModemConnectResp[8];
  word            CBV_CallbackDelay;
  word            CBV_WakeupDelay;
  char            ARQ_String[9];
  byte            ModemSpareInfo[9];
  char            EditorCmdStr[71];     // System Paths
  char            MenuPath[67];
  char            TextPath[67];
  char            NetPath[67];
  char            NodelistPath[67];
  char            MsgPath[67];
  char            SwapPath[67];
  char            OverlayPath[67];
  char            LoadingMessage[71];   // System misc strings
  char            SelectionPrompt[71];
  char            NoMailString[71];
  char            OriginLine[59];
  char            QuoteStr[4];
  long            LowBaudStart;         // User Restrictions
  long            LowBaudEnd;
  long            DownloadStart;
  long            DownloadEnd;
  short            MaxPageTimes;
  short            PageBellLen;
  long            PageStart;
  long            PageEnd;
  short            MinBaud;
  short            GraphicsBaud;
  short            XferBaud;
  short            MatrixZone[11];       // Matrix Information
  short            MatrixNet[11];
  short            MatrixNode[11];
  short            MatrixPoint[11];
  short            NetMailBoard;
  Q276SecRecT     DefaultSec;           // Default Information for New Users
  Q276SecRecT     MinimumSec;
  short            DefaultCredit;
  Q276SecRecT     SysopSecurity;        // Sysop Security Etc.
  char            SysopName[36];
  char            SystemName[41];
  long            RegKey;
  byte            TextFileShells;       // Misc System Parameters
  byte            AltJswap;
  byte            Editorswap;
  byte            AutoLogonChar;
  byte            FastLogon;
  byte            UseLastRead;
  byte            MonoMode;
  byte            DirectWrite;
  byte            SnowCheck;
  byte            NetEchoExit;
  byte            OneWordNames;
  byte            CheckMail;
  byte            AskHomePhone;
  byte            AskDataPhone;
  byte            AskBirthday;
  byte            AskSex;
  byte            Use_Xmodem;
  byte            Use_Xmodem1k;
  byte            Use_Ymodem;
  byte            Use_YmodemG;
  byte            Use_Kermit;
  byte            Use_Zmodem;
  byte            Inp_Fields;
  byte            GraphicsAvail;
  byte            ForceUS_Phone;
  short            InactiveTimeOut;
  short            LogonTime;
  short            DefFgColor;
  short            DefBgColor;
  short            PasswordTries;
  byte            EntFldColor;
  byte            BorderColor;
  byte            WindowColor;
  byte            StatusBarColor;
  short            UploadCredit;
  byte            ScreenBlank;
  char            VerifierInit[36];     // Callback verifier
  char            DialString[16];
  char            DialSuffix[16];
  byte            DupeCheck;
  word            NewUserSec;
  word            MemberSec;
  char            MemberFlags[4][8];
  word            LDcost;
  byte            LDenable;
  byte            ResumeLocal;
  byte            ResumeLD;
  long            LDstart;
  long            LDend;
  byte            ForgotPwdBoard;
  byte            SendATA;
  char            Location[61];
  byte            ArchiveNetMail;
  byte            IEMSI;
  byte            IEMSI_New;
  byte            AutoAnsi;
  byte            MultiNode;
  byte            ExtraSpace[332];
} Q276CfgRecT, *Q276CfgRecP;


//  ------------------------------------------------------------------
//  RemoteAccess 2.00 GAMMA, USERS.BBS structure

// Some Pascal types
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            Time[6];
typedef Char            Date[9];

typedef struct {

  char  name[36];
  char  location[26];
  char  organisation[51];
  char  address1[51];
  char  address2[51];
  char  address3[51];
  char  handle[36];
  char  comment[81];
  long  passwordcrc;
  char  dataphone[16];
  char  voicephone[16];
  char  lasttime[6];
  char  lastdate[9];
  byte  attribute;
  byte  attribute2;
  byte  flagsx[4];
  long  credit;
  long  pending;
  word  msgsposted;
  word  security;
  long  lastread;
  long  nocalls;
  long  uploads;
  long  downloads;
  long  uploadsk;
  long  downloadsk;
  long  todayk;
  short  elapsed;
  word  screenlength;
  byte  lastpwdchange;
  word  group;
  word  combinedinfo[200];
  char  firstdate[9];
  char  birthdate[9];
  char  subdate[9];
  byte  screenwidth;
  byte  language;
  byte  dateformat;
  char  forwardto[36];
  word  msgarea;
  word  filearea;
  char  defaultprotocol;
  word  filegroup;
  byte  lastdobcheck;
  byte  sex;
  long  xirecord;
  word  msggroup;
  byte  freespace[48];

} RA2UsrRecT, *RA2UsrRecP, **RA2UsrRecI;


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

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

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

#endif

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