//  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

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