TIP: Click on subject to list as thread! ANSI
echo: power_bas
to: ZACK JONES
from: JAMES GOLDBLOOM
date: 1995-11-15 12:28:00
subject: Re: Deciphering structures and merging w12:28:1211/15/95

ZJ->
ZJ-> Why don't you do this.  Post the simpliest of the structures you have
ZJ-> and we'll convert 'em here on the echo -- that way others can benefit
ZJ-> from the discussion as well.
I can easily fit it all into one message in this echo, and pick out what
you want and let's go at it!  I am eager to start.  You will tell from
these structures that:
1.  They are public domain and can be used to write utils which aid in
    the developement of the product (QuickBBS) which is excellent.
2.  QuickBBS has two message base formats, Goldbase and classic.  The latter
    is really Adam Hudson's original "Hudson" base, the former being
    a slight variation which allows 500 message areas instead of 200, and
    virtually unlimited message base size.
USED WITH PERMISSION.  HERE IS COMES:
  
***************************************************************************
  (*         Structures document for QuickBBS version 2.80 Gamma-2
  (*         This information may be freely copied and used at no charge
  (*         by any party to write utilities and other software which
  (*         enhances the use of the QuickBBS software.
  (*         Use of this information in any other BBS program is
  (*         strictly prohibited.
  (*         Copyright 1991,92,93  Pegasus Software
  (*         All Rights Reserved.
  
**************************************************************************
Const
{$IFDEF GOLDBASE}
  MaxMsgAreas  = 500;
  FileExt = '.DAT';
{$ELSE}
  MaxMsgAreas  = 200;
  FileExt = '.BBS';
{$ENDIF}
  MaxFileAreas = 200;
  MaxLanguages = 30;
  MaxEvents    = 30;
type
  FlagType = array[1..4] of Byte;
  UserRecord = record
                 Name        : String[35];
                 City        : String[25];
                 ReservedZero: Byte; { Reserved, should always be 0 }
                 Language    : Byte;
                 PwdCrc      : Longint;
                 PwdChangeDate,
                 ExpireDate  : Word;
{$IFDEF GOLDBASE}
                 HighMsgRead : LongInt;
{$ELSE}
                 UnusedSpace : LongInt;
{$ENDIF}
                 ExtraSpace  : Array[5..6] of Byte;
                 DataPhone,
                 HomePhone   : String[12];
                 LastTime    : String[5];
                 LastDate    : String[8];
                 Attrib      : Byte;
                 Flags       : FlagType;
                 Credit,
                 Pending,
{$IFDEF GOLDBASE}
                 TimesPosted : Word;
                 ObsoleteField,
{$ELSE}
                 TimesPosted,
                 HighMsgRead,
{$ENDIF}
                 SecLvl,
                 Times,
                 Ups,
                 Downs,
                 UpK,
                 DownK       : Word;
                 TodayK      : Integer;
                 Elapsed,
                 Len         : Integer;
                 CombinedPtr : Word; (* Record number in COMBINED.BBS *)
                 AliasPtr    : Word; (* Record number in ALIAS.BBS *)
                 Birthday    : Longint;
               end;
(*  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)
*)
type
  UserActivityType = (InMenu, InDoor, InCallback,
                      ReadingMessages, WritingMessage,
                      ChattingWithSysop, ChattingWithUsers,
                      AnsweringQuestionaire, ViewingTextFile,
                      DownloadingFile, UploadingFile, ViewingFileList,
                      DoingFileSearch, LoggingOn, LoggingOff);
  USERONrecord   = record
                     Name           : String[35];
                     Alias          : String[35];
                     Line           : Byte;
                     Baud           : Word;
                     City           : String[25];
                     DoNotDisturb   : Boolean;
                     Conference     : Byte;
                     Activity       : UserActivityType;
                     Language       : Byte;
                     Spare          : Array[2..9] of Byte;
                   end;
  AliasRecord = String[35]; (* for ALIAS.BBS *)
  MsgToIdxRecord = String[35];
  MsgTxtRecord = String[255];
  { Nodelist Records *************************************************** }
  NodeTypes      = (ntZone, ntRegion, ntNet, ntNode, ntPrefix);
  NodeIdxRecord  = record
                       NodeType       : NodeTypes;
                       Number,
                       Cost           : Word;
                       RawFile        : Byte;
                       RawPos         : LongInt;
                   end;
  FileNameType   = String[12];
  NodeIncRecord  = record
                       FileName       : FileNameType;
                       DateStamp      : LongInt;
                   end;
  { Message Records ******************************************************}
  CombSelectType = array[1..MaxMsgAreas] of Boolean; (* for COMBINED.BBS *)
  InfoRecord = record
{$IFDEF GOLDBASE}
                 LowMsg  : LongInt; { Lowest Message in File }
                 HighMsg : LongInt; { Highest Message in File }
                 TotalActive : LongInt; { Total Active Messages }
                 ActiveMsgs : array[1..MaxMsgAreas] of Word;
{$ELSE}
                 LowMsg  : Integer; { Lowest Message in File }
                 HighMsg : Integer; { Highest Message in File }
                 TotalActive : Integer; { Total Active Messages }
                 ActiveMsgs : array[1..MaxMsgAreas] of Integer;
{$ENDIF}
               end;
  IdxRecord = record
{$IFDEF GOLDBASE}
                MsgNum : LongInt;
                Board  : Word;
{$ELSE}
                MsgNum : Integer;
                Board  : Byte;
{$ENDIF}
              end;
  HdrRecord = record
{$IFDEF GOLDBASE}
                MsgNum,
                ReplyTo,
                SeeAlsoNum : LongInt;
{$ELSE}
                MsgNum,
                ReplyTo,
                SeeAlsoNum,
{$ENDIF}
                TRead    : Integer;
{$IFDEF GOLDBASE}
                StartRec : LongInt;
{$ELSE}
                StartRec : Word;
{$ENDIF}
                NumRecs,
                DestNet,
                DestNode,
                OrigNet,
                OrigNode : Integer;
                DestZone,
                OrigZone : Byte;
                Cost     : Integer;
                MsgAttr,
                NetAttr,
{$IFDEF GOLDBASE}
                Board    : Word;
{$ELSE}
                Board    : Byte;
{$ENDIF}
                PostTime : String[5];
                PostDate : String[8];
                WhoTo,
                WhoFrom  : String[35];
                Subj     : String[72];
              end;
(* Msg Attributes:
      Bit 0: Deleted
      Bit 1: Unmoved Outgoing Net Message
      Bit 2: Is a Net Mail Message
      Bit 3: Private
      Bit 4: Received
      Bit 5: Unmoved Outgoing Echo Message
      Bit 6: Local Bit
      Bit 7: Group Message
   Net Attributes:
      Bit 0: Kill Message after it's been sent
      Bit 1: Sent OK
      Bit 2: File(s) Attached
      Bit 3: Crash Priority
      Bit 4: Request Receipt
      Bit 5: Audit Request
      Bit 6: Is a Return Receipt
      Bit 7: Freq
*)
  { Other Stuff *********************************************************** }
  SysInfoRecord = record
                    CallCount        : LongInt;
                    LastCallerName   : String[35];
                    LastCallerAlias  : String[35];
                    ExtraSpace : array[1..92] of Byte;
                  end;
  TodayRecord = record
                     Name           : String[35];
                     Alias          : String[35];
                     Line           : Byte;
                     City           : String[25];
                     Date           : Longint;
                     Time           : Longint;
                   end;
  TimeLogRecord = record
                    StartDate   : String[8];
                    BusyPerHour : array[0..23] of Integer;
                    BusyPerDay  : array[0..6] of Integer;
                  end;
{$IFDEF GOLDBASE}
  LastReadType = Array[1..MaxMsgAreas] of LongInt;
{$ELSE}
  LastReadType = Array[1..MaxMsgAreas] of Word;
{$ENDIF}
  MenuRecord = record
                 Typ   : Byte;
                 Sec   : Word;
                 Flags : FlagType;
                 Str   : String[75];
                 Key   : Char;
                 Data  : String[80];
                 Fg,
                 Bg    : Byte;
               end;
  Type
    PhraseRecord=Record
      TextString : String[80];
      KeyString  : String[10];
      Color      : Byte;
     End;
  { Configuration Information ********************************************** 

  TypeMsgs  = (Standard,Netmail,FMail,EchoMail);
  KindMsgs  = (Both,Private,Public,ROnly);
  EventStat = (Deleted, Enabled, Disabled);
  AskType   = (No, Maybe, Yes);
  ProtocolEnableType = (Never, MNP_Only, Always);
  SecurityRecord = Record
    Security : Word;
    Flags    : FlagType;
  End;
  FileAreaRecord = Record (* FILECFG.DAT *)
    AreaName,
    FilePath,
    ListPath    : String[66];
    AllowUploads,
    IgnoreKlimit,
    IgnoreRatio : Boolean;
    DlSec       : SecurityRecord;
    SearchSec   : SecurityRecord;
    TemplateSec : SecurityRecord;
    CheckDupes  : Boolean;
    Group       : Byte;
    Spare       : Array[3..12] of Byte;
  End;
  BoardRecord = record (* MSGCFG.DAT *)
                  Name            : String[40];
                  Typ             : TypeMsgs;
                  Kinds           : KindMsgs;
                  Combined        : Boolean;
                  Aliases         : AskType;
                  Aka             : Byte;
                  OriginLine      : String[58];
                  AllowDelete     : Boolean;
                  KeepCnt,                (* Max # of Msgs to keep *)
                  KillRcvd,               (* Kill received msgs after this 
an
                  KillOld         : Word; (* Kill msgs after this many days 
)
                  ReadSec         : SecurityRecord;
                  WriteSec        : SecurityRecord;
                  TemplateSec     : SecurityRecord;
                  SysopSec        : SecurityRecord;
                  FileArea        : Integer;  (* for Fmail *)
                  Group           : Byte;
                  Spare           : Array[4..12] of Byte;
                end;
   EventRecord = record (* EVENTCFG.DAT *)
                  Status      : EventStat;
                  RunTime     : LongInt;
                  ErrorLevel  : Byte;
                  Days        : Byte;
                  Forced      : Boolean;
                  LastTimeRun : LongInt;
                  Spare       : Array[1..7] of Byte;
                end;
   FileKLimitRecord = record
                        Baud  : Word;
                        Limit : Integer;
                      end;
   LimitRecord = record (* LIMITS.DAT *)
                   Security     : Word;
                   DailyLimit,
                   SessionLimit,
                   DownLimit    : Integer;
                   PwdLife      : Byte;
                   MinBaud      : Word;
                   FileKLimits  : Array[1..8] of FileKLimitRecord;
                   FileKRatio   : Integer;
                   FileRatio    : Integer;
                   ExpireQuest  : String[8];  (* Questionaire to run when
                                               subscription expires *)
                   ExpireText   : String[8];  (* Text File to display when
                                               subscription expires soon *)
                   DaysWarning  : Byte;  (* Number of days before expiration
                                            to start displaying ExpireText *)
                   Description  : String[40];
                   TopMenu      : String[8];
                   UserPurge    : Byte;  (* For UserPack - delete users who
                                            haven't called in this many days 

                   Spare        : Array[2..20] of Byte;
                 end;
   LanguageRecord = record (* LANGUAGE.DAT *)
                      DisplayName : String[20];
                      IEMSIname   : String[5];
                      Available   : Boolean;
                      PhraseFile,
                      MenuPath,
                      TextPath,
                      QuestPath   : String[66];
                      Spare       : Array[1..200] of Byte;
                    end;
   ModemTranslationRecord = Record
                   TranslateFrom : String[25];
                   TranslateTo   : Word;
                 End;
   ConfigRecord = record  (* QUICKCFG.DAT *)
                   VersionID : Word;
                   Node      : Byte;
                   (*  Modem Parameters  *)
                   CommPort      : Integer;
                   InitBaud      : Word;
                   ModemDelay    : Word;
                   InitTimes,
                   AnswerWait    : Integer;
                   ModemInitStr,
                   ModemBusyStr  : String[70];
                   ModemInitResp,
                   ModemBusyResp : String[40];
                   ModemConnectResp :
                     Array[1..8] of ModemTranslationRecord;
                   CBV_CallbackDelay,
                   CBV_WakeupDelay : Word;
                   ARQ_String      : String[8];
                   ModemSpareInfo : Array[14..22] of Byte;
                   (*  System Paths  *)
                   EditorCmdStr    : String[70];
                   Stat6Line1,
                   Stat6Line2,
                   NetPath,
                   NodelistPath,
                   MsgPath,
                   SwapPath,
                   OverlayPath     : String[66];
                   OldPrompts : Array[1..213] of Byte;
                   (* System misc strings *)
{                   LoadingMessage  : String[70];
                   SelectionPrompt : String[70];
                   NoMailString    : String[70]; }
                   OriginLine      : String[58];
                   QuoteStr        : String[3];
                   (*  User Restrictions *)
                   LowBaudStart,
                   LowBaudEnd,
                   DownloadStart,
                   DownloadEnd     : LongInt;
                   MaxPageTimes,
                   PageBellLen     : Integer;
                   PagingStart,
                   PagingEnd       : LongInt;
                   MinBaud,
                   GraphicsBaud,
                   XferBaud        : Integer;
                   (*  Matrix Information  *)
                   MatrixZone,
                   MatrixNet,
                   MatrixNode,
                   MatrixPoint     : array[0..10] of Integer;
                   NetMailBoard    : Integer;
                   (*  Default Information for New Users  *)
                   DefaultSec      : SecurityRecord;
                   MinimumSec      : SecurityRecord;
                   DefaultCredit   : Integer;
                   (*  Sysop Security Etc. *)
                   SysopSecurity   : SecurityRecord;
                   SysopName       : String[35];
                   SystemName      : String[40];
                   RegKey          : LongInt;
                   (*  Misc System Parameters  *)
                   TextFileShells,
                   AltJswap,
                   Editorswap,
                   AutoLogonChar,
                   FastLogon,
                   UseLastRead,
                   MonoMode,
                   DirectWrite,
                   SnowCheck,
                   NetEchoExit,
                   OneWordNames,
                   CheckMail,
                   AskHomePhone,
                   AskDataPhone,
                   AskBirthday,
                   AskSex,
                   Use_Xmodem,
                   Use_Xmodem1k,
                   Use_Ymodem      : Boolean;
                   Use_YmodemG     : ProtocolEnableType;
                   Use_Kermit,
                   Use_Zmodem,
                   Inp_Fields,
                   GraphicsAvail,
                   ForceUS_Phone   : Boolean;
                   InactiveTimeOut : Integer;
                   LogonTime       : Integer;
                   DefFgColor      : Integer;
                   DefBgColor      : Integer;
                   PasswordTries   : Integer;
                   EntFldColor     : Byte; (* Color for entry fields *)
                   BorderColor     : Byte; (* Color for menu borders *)
                   WindowColor     : Byte;
                   StatusBarColor  : Byte;
                   UploadCredit    : Integer;
                   ScreenBlank     : Byte;
                   (* Callback verifier *)
                   VerifierInit    : string[35];
                   DialString      : string[15];
                   DialSuffix      : string[15];
                   DupeCheck       : Boolean;
                   NewUserSec,
                   MemberSec       : Word;
                   MemberFlags     : Array[1..4,1..8] of Char;
                   LDcost          : Word;
                   LDenable,
                   ResumeLocal,
                   ResumeLD        : Boolean;
                   LDstart,
                   LDend           : Longint;
                   ForgotPwdBoard  : Byte;
                   SendATA         : Boolean;
                   Location        : String[60];
                   ArchiveNetMail  : Boolean;
                   IEMSI,
                   IEMSI_New,
                   AutoAnsi,
                   MultiNode,
                   AutoLogChat     : Boolean;
                   UserEditor      : String[70];
                   FileAreaCols,
                   MsgAreaCols     : Byte;
                   ExtraSpace      : Array[143..400] of Byte;
                 end;
  GosubDataType = array[1..20] of String[8];
  ExitRecord = record (* EXITINFO.BBS *)
                 BaudRate        : Integer;
                 SysInfo         : SysInfoRecord;
                 TimeLogInfo     : TimeLogRecord;
                 UserInfo        : UserRecord;
                 EventInfo       : EventRecord;
                 NetMailEntered  : Boolean;
                 EchoMailEntered : Boolean;
                 LoginTime       : String[5];
                 LoginDate       : String[8];
                 TmLimit         : Integer;
                 LoginSec        : LongInt;
                 Credit          : LongInt;
                 UserRecNum      : Integer;
                 ReadThru        : Integer;
                 PageTimes       : Integer;
                 DownLimit       : Integer;
                 WantChat        : Boolean;
                 GosubLevel      : Byte;
                 GosubData       : GosubDataType;
                 Menu            : String[8];
                 ScreenClear     : Boolean;
                 MorePrompts     : Boolean;
                 GraphicsMode    : Boolean;
                 ExternEdit      : Boolean;
                 ScreenLength    : Integer;
                 MNP_Connect     : Boolean;
                 ChatReason      : String[48];
                 ExternLogoff    : Boolean;
                 ANSI_Capable    : Boolean;
                 CurrentLanguage : Byte;
                 ExtraSpace      : Array[1..200] of Byte;
               end;
--- QuickBBS 2.80 GoldBase (Zeta-1)
---------------
* Origin: AD Message BBS/10th Year Online! (703)998-2958 (1:109/611@FIDONET)

SOURCE: echomail via exec-pc

Email questions or comments to sysop@ipingthereforeiam.com
All parts of this website painstakingly hand-crafted in the U.S.A.!
IPTIA BBS/MUD/Terminal/Game Server List, © 2025 IPTIA Consulting™.