//  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$
//  ------------------------------------------------------------------
//  SuperBBS configuration data structures
//  ------------------------------------------------------------------

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

//  ------------------------------------------------------------------
//  Misc types

typedef char MsgToIdxRecord[36];
typedef byte SbFlagType[4];


//  ------------------------------------------------------------------
//  Structure of SCONFIG.BBS

typedef struct
{

    char  SystemPath[67];
    char  MsgBasePath[67];
    char  TempPath[67];
    char  RedirectDevice[13];
    char  Resp19200[41];
    char  Resp38400[41];
    byte  ShowSecurity;
    byte  ShowPswdAtLogon;
    long  BetaCode;
    byte  Unused[200];
    byte  Empty1[284];
    byte  AllowCat;
    byte  Answerboard;
    byte  Use7bitChars;
    word  BufferSize;
    byte  Empty2[45];
    byte  EntryColor;
    byte  FilesBeforeRatio;
    word  MinSpace;
    byte  ClearTemp;
    byte  Empty3[163];
    byte  UseAliasSystem;
    byte  Ansilogon;            // 0 = No, 1 = Yes, 2 = Auto detect
    byte  ExcludeSysOp;
    byte  Empty4[122];
    char  AltFkeys[10][61];
    byte  Checkfiles;
    byte  PasswordBoard;
    byte  Alt_J_Swaptoems;
    word  MaxTimeInBank;
    byte  NoBirthDayAsk;
    byte  MaxDescLines;
    byte  Empty5[45];
    byte  FastMailCheck;
    byte  DefaultColors[10];
    byte  Empty6[45];
    byte  LinesInSystem;
    char  CommonDir[80];
    word  VersionNumber;
    word  FullScrChatBaud;
    byte  PressEnterColor;
    byte  AreaSelectColor[3];
    byte  StatusLineColor;
    byte  VirusChkMode;
    char  WorkPath[80];
    byte  WatchCDatDos;
    byte  UseCtrlX;
    byte  MsgAfterPageBoard;
    byte  SearchAliases;
    byte  EchoConvert;
    byte  SwapAtPackers;
    byte  InternalProtocols;
    // bit 0 : Zmodem
    // bit 1 : Ymodem batch
    // bit 2 : Xmodem
    // bit 3 : Xmodem 1K (Ymodem)
    // bit 4 : Xmodem 1K G
    // bit 5 : Ymodem-g
    char  FirstMenuInSystem[9];
    byte  ColoredQuoteText;
    byte  AddUploadersName;
    word  DaysUntilExpiration;
    char  QWKBBSID[7];
    byte  QWKDefaultBoard;
    short  QwkMaxNrToPack;
    char  StatuslineStr[2][101];
    char  Location[41];
    byte  UsPhoneNrFormat;
    char  DlCounterLBracket;
    char  DlCounterRBracket;
    byte  QWKAllowTagLines;     // 0=no, 1=yes, 2=only local areas
    word  LogonSecLvl;
    byte  LogonAge;
    char  LogonPassword[16];
    byte  NoGroupMailCheck;
    byte  NoUserListIntype27;
    word  GroupMsgSecLvl;
    byte  AskSex;
    byte  AskAnsi;              // 0=ask, 1=yes, 2=no
    byte  AskMailCheck;         // 0=ask, 1=yes, 2=no
    byte  AskNewFilesCheck;     // 0=ask, 1=yes, 2=no
    byte  AskFullScrEditor;     // 0=ask, 1=yes, 2=no
    byte  AskFullScrViewer;     // 0=ask, 1=yes, 2=no
    byte  AskPagePause;         // 0=ask, 1=yes, 2=no
    byte  AskScreenClears;      // 0=ask, 1=yes, 2=no
    char  PageStart[7][6];
    char  PageEnd[7][6];
    byte  UseIEMSI;
    byte  CapitalizeCity;
    byte  CapitalizeAlias;
    char  VirusScannerCmd[128];
    byte  NoExtractBeforeScan;
    byte  VirusFoundErrorLvl;
    byte  SysOpsFscrChatClr;
    byte  UsersFscrChatClr;
    byte  ScanForDupePhones;    // 0 = no, 1 = log entry, 2 = don't allow
    byte  NormalLongDesc;
    char  NodelistPath[73];
    word  MinCrashMailSec;
    byte  NoDorinfo1;
    byte  NoTouch;
    byte  ZoneMatching;
    byte  strictdupecheck;
    byte  noextendednodeinfo;
    byte  Birthdayverify;
    byte  realmsgnumbers;
    char  LocalAttachPath[67];
    byte  NoLACheckAtLogon;
    byte  AllowedPackers;
    // Bit 0 ; ZIP
    // Bit 1 ; ARC
    // Bit 2 ; LZH
    // Bit 3 ; ARJ
    byte  BoardsFileToCurDir;
    char  UnLockPwd[16];
    char  Resp7200[41];
    char  Resp12000[41];
    char  Resp14400[41];
    byte  LineEditorQuote;      // 0=intelligent, 1=normal, 2=no
    byte  SevenBitOnly;
    byte  nofileflagging;
    char  ReplyingToStr[81];
    byte  FreeFileTimeCheck;    // 0 = NO, 1 = YES, 2 = EVENT
    byte  PageReasonToSubj;
    byte  AgeGraphStartAge;
    word  ETGCLocalAttrib;
    word  ETGCRemoteAttrib;     // Not yet used
    // BIT 0 ; 320x200x16
    // BIT 1 ; 640x200x16
    // BIT 2 ; 640x350x16
    // BIT 3 ; 640x480x16
    // BIT 4 ; 320x200x256
    byte  AskCombinedBoards;
    byte  AskCombMailCheck;     // 0=ask, 1=yes, 2=no
    byte  UseNewFilesCheckDate;
    word  BurnOutSecs;
    byte  NoNamesInGroupMail;
    byte  AutoChatCapture;
    byte  AskDefProto;
    byte  AskHotkeys;           // 0=ask, 1=yes, 2=no
    byte  FreeAttaches;
    SbFlagType LogonFlags;
    byte  NoRemoteSysOp;
    byte  FscrReaderColors[12];
    byte  NewsDateCheck;
    byte  NoNameIdx;
    word  AkaZone[15];
    word  AkaNet[15];
    word  AkaNode[15];
    word  AkaPoint[15];
    byte  MinorVersionNumber;   // ie. 1 = Gamma-1, 2 = Gamma-2, 100 = official
    byte  Extraspace[2709];

} ExtraConfigT, *ExtraConfigP, **ExtraConfigI;


//  ------------------------------------------------------------------
//  Structure of SUSERS.BBS

typedef struct
{

    MsgToIdxRecord Name;
    char  Birthday[9];
    word  Attrib;
    byte  Flagsx[4];           // Not yet used
    char  Firsttime[6];
    char  FirstDate[8];
    byte  CombinedBoards[25];
    char  SysOpComment[80];
    char  DefaultProto;
    short  UserRecPtr;
    byte  Colors[10];
    byte  FileListType;       // Not yet used
    MsgToIdxRecord Alias;
    long  MinutesUsed;
    char  ViewFileName[13];   // SeeAlso attrib bits 4 - 6
    char  MenuToRun[9];
    word  Timeinbank;
    byte  TodayCalls;
    char  LanguageFileN[9];
    char  Expirationdate[9];
    byte  CurrentFArea;
    byte  CurrentMArea;
    byte  CurrentDoor;
    byte  DefaultPacker;
    //  not bit mapped !
    //   1 = ZIP
    //   2 = ARC
    //   3 = LZH
    //   4 = ARJ
    char  LastNewFilesCheck[9];
    byte  ExtraSpace[403];

} ExtraUserRecT, *ExtraUserRecP, **ExtraUserRecI;

//  Attrib;
//
//  1     Bit  0; MailCheck at logon
//  2     Bit  1; Newfiles Check at logon
//  4     Bit  2; No downloadratio
//  8     Bit  3; Female
//  16    Bit  4; Delete file after viewing
//  32    Bit  5; Display file only once
//  64    Bit  6; File viewed
//  128   Bit  7; Fullscreen viewer
//  256   Bit  8; Combined mail check
//  512   Bit  9; No hotkeys
//        Bit 10;
//        Bit 11;
//        Bit 12;
//        Bit 13;
//        Bit 14;
//        Bit 15;


//  ------------------------------------------------------------------
//  Structure of USERS.BBS

typedef struct
{

    MsgToIdxRecord Name;
    char  City[26];
    char  Password[16];
    char  DataPhone[13];
    char  HomePhone[13];
    char  LastTime[6];
    char  LastDate[9];
    byte  Attrib;
    SbFlagType Flagsx;
    short  Credit;
    short  Pending;
    word  MsgsPosted;
    word  HighMsgRead;
    word  SecLvl;
    word  Times;
    word  Ups;
    word  Downs;
    word  UpK;
    word  DownK;
    short  TodayK;
    short  Elapsed;
    short  Len;
    byte  ExtraSpace1[2];
    byte  Age;
    short  ExtraUserrecPtr;
    byte  ExtraSpace2[3];

} UserRecordT, *UserRecordP, **UserRecordI;

//  Attrib;
//
//  bit 0; Deleted user
//  bit 1; Screen clear codes
//  bit 2; More prompt
//  bit 3; ANSI graphics
//  bit 4; No-Kill
//  bit 5; Ignore Download Hours
//  bit 6; ANSI editor
//  bit 7; Do not disturb mode ON
//
//


//  ------------------------------------------------------------------
//  Structure of CONFIG.BBS

typedef struct
{

    byte  Status;       // 0=Disabled 1=Enabled
    char  RunTime[6];
    byte  ErrorLevel;
    byte  Days;
    byte  Forced;
    char  LastTimeRun[9];

} EventRecordT, *EventRecordP, **EventRecordI;

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;
    SbFlagType ReadFlags;

    short  WriteSecLvl;
    SbFlagType WriteFlags;

    short  SysopSecLvl;
    SbFlagType SysopFlags;

} BoardRecordT, *BoardRecordP, **BoardRecordI;

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];   // !! Not used anymore !!
    char  PagingEnd[6];     // !! Not used anymore !!

    short  MatrixZone;
    short  MatrixNet;
    short  MatrixNode;
    short  OldAkaNet[5];     // not used
    short  OldAkaNode[5];    // not used
    short  NetMailBoard;

    short  DefaultSec;
    short  DefaultCredit;
    SbFlagType DefaultFlags;

    char  EditorCmdStr[71];
    char  OriginLine[61];
    MsgToIdxRecord SysopName;
    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  OldAkaZone[5];    // not used

    short  MatrixPoint;
    short  OldAkaPoint[5];   // not used

    byte  UseAka[200];
    byte  AskAge;           // Not used
    char  SystemName[41];
    long  RegKey;

    byte  EntryfieldColor;
    byte  MenuBorderColor;

    short  SysOpSeclvl;
    byte  AllowDelMsgs;

    EventRecordT EventRec[30];
    BoardRecordT UnusedBoards[200];

} ConfigRecordT, *ConfigRecordP, **ConfigRecordI;


//  ------------------------------------------------------------------
//  Structure of BOARDS.BBS

typedef struct
{

    char  Name[31];
    char  QwkName[13];

    byte  Typ;          // 0=Standard 1=Net 3=Echo
    byte  Kinds;        // 0=Private & Public 1=Private 2=Public 3=Read-Only
    byte  Aliases;      // 0=no aliases, 1=yes, 2=ask alias, 3=Alias/name

    short  ReadSecLvl;
    SbFlagType ReadFlags;

    short  WriteSecLvl;
    SbFlagType WriteFlags;

    short  SysopSecLvl;
    SbFlagType SysopFlags;

    char  Group;
    byte  Replystatus;  // 0 = normal, 1 = net/normal, 2 = net only, 3 = no replies
    byte  Age;
    byte  Attrib;
    byte  UseAka;

} MsgBoardRecordT, *MsgBoardRecordP, **MsgBoardRecordI;

//  Attributes ;
//
//  bit 0 ; Combined
//  bit 1 ; Default combined
//  bit 2 ; Allow message deleting
//  bit 3 ; Allow taglines
//  bit 4 ; Use in template system
//  bit 5 ; Convert 8bit -> 7bit
//  bit 6 ; forced ON in the mail check


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

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

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