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