703 lines
29 KiB
ObjectPascal
703 lines
29 KiB
ObjectPascal
{
|
|
===========================================================================
|
|
Mystic BBS Software Copyright (C) 1997-2012 By James Coyle
|
|
===========================================================================
|
|
File | RECORDS.PAS
|
|
Desc | This file holds the data file records for all data files used
|
|
within Mystic BBS software. Mystic BBS is compiled with the
|
|
latest version of Free Pascal for all platforms.
|
|
===========================================================================
|
|
}
|
|
|
|
Const
|
|
mysSoftwareID = 'Mystic';
|
|
mysCopyYear = '1997-2012';
|
|
mysVersion = '1.10 A11';
|
|
mysDataChanged = '1.10 A11';
|
|
|
|
{$IFDEF WIN32}
|
|
PathChar = '\';
|
|
LineTerm = #13#10;
|
|
OSID = 'Windows';
|
|
OSType = 0;
|
|
{$ENDIF}
|
|
|
|
{$IFDEF LINUX}
|
|
PathChar = '/';
|
|
LineTerm = #10;
|
|
OSID = 'Linux';
|
|
OSType = 1;
|
|
{$ENDIF}
|
|
|
|
{$IFDEF DARWIN}
|
|
PathChar = '/';
|
|
LineTerm = #10;
|
|
OSID = 'OSX';
|
|
OSType = 2;
|
|
{$ENDIF}
|
|
|
|
mysMaxAcsSize = 30; // Max ACS string size
|
|
mysMaxPathSize = 80;
|
|
mysMaxMsgLines = 1000; // Max message base lines
|
|
mysMaxInputHistory = 5; // Input history stack size
|
|
mysMaxFileDescLen = 50;
|
|
mysMaxBatchQueue = 50;
|
|
mysMaxVoteQuestion = 20; { Max number of voting questions }
|
|
mysMaxMenuNameLen = 20;
|
|
mysMaxMenuCmds = 75; { Maximum menu commands per menu }
|
|
mysMaxLanguageStr = 478; { Total # of strings in language file }
|
|
|
|
Type
|
|
SmallWord = System.Word;
|
|
Integer = SmallInt; { force Integer to be a 2-byte signed }
|
|
Word = SmallWord;
|
|
|
|
RecMessageText = Array[1..mysMaxMsgLines] of String[79];
|
|
|
|
AccessFlagType = Set of 1..25; { flags A to Z }
|
|
|
|
RecEchoMailAddr = Record { FidoNet-style network address }
|
|
Zone,
|
|
Net,
|
|
Node,
|
|
Point : Word;
|
|
End;
|
|
|
|
RecUserOptionalField = Record
|
|
Ask : Boolean;
|
|
Desc : String[12];
|
|
iType : Byte;
|
|
iField : Byte;
|
|
iMax : Byte;
|
|
End;
|
|
|
|
RecConfig = Record // MYSTIC.DAT
|
|
// INTERNALS
|
|
DataChanged : String[8]; // Version of last data change
|
|
SystemCalls : LongInt; // system caller number
|
|
UserIdxPos : LongInt; // permanent user # position
|
|
// SYSTEM PATHS
|
|
SystemPath : String[mysMaxPathSize];
|
|
DataPath : String[mysMaxPathSize];
|
|
LogsPath : String[mysMaxPathSize];
|
|
MsgsPath : String[mysMaxPathSize];
|
|
AttachPath : String[mysMaxPathSize];
|
|
ScriptPath : String[mysMaxPathSize];
|
|
QwkPath : String[mysMaxPathSize];
|
|
SemaPath : String[mysMaxPathSize];
|
|
TemplatePath : String[mysMaxPathSize];
|
|
MenuPath : String[mysMaxPathsize];
|
|
TextPath : String[mysMaxPathSize];
|
|
WebPath : String[mysMaxPathSize];
|
|
// GENERAL SETTINGS
|
|
BBSName : String[30];
|
|
SysopName : String[30];
|
|
SysopPW : String[15];
|
|
SystemPW : String[15];
|
|
FeedbackTo : String[30];
|
|
Inactivity : Word;
|
|
LoginTime : Byte;
|
|
LoginAttempts : Byte;
|
|
PWAttempts : Byte;
|
|
PWChange : Word;
|
|
PWInquiry : Boolean;
|
|
DefStartMenu : String[20];
|
|
DefFallMenu : String[20];
|
|
DefThemeFile : String[20];
|
|
DefTermMode : Byte;
|
|
DefScreenSize : Byte;
|
|
DefScreenCols : Byte;
|
|
UseMatrix : Boolean;
|
|
MatrixMenu : String[20];
|
|
MatrixPW : String[15];
|
|
MatrixAcs : String[mysMaxAcsSize];
|
|
AcsSysop : String[mysMaxAcsSize];
|
|
AcsInvisLogin : String[mysMaxAcsSize];
|
|
AcsSeeInvis : String[mysMaxAcsSize];
|
|
AcsMultiLogin : String[mysMaxAcsSize];
|
|
SysopMacro : Array[1..4] of String[80]; // Sysop Macros
|
|
ChatStart : SmallInt; // Chat hour start
|
|
ChatEnd : SmallInt; // Chat hour end: mins since midnight
|
|
ChatFeedback : Boolean; // E-mail sysop if page isn't answered
|
|
ChatLogging : Boolean; // Record SysOp chat to CHAT.LOG?
|
|
UseStatusBar : Boolean;
|
|
StatusColor1 : Byte;
|
|
StatusColor2 : Byte;
|
|
StatusColor3 : Byte;
|
|
// NEW USER SETTINGS
|
|
AllowNewUsers : Boolean;
|
|
NewUserSec : SmallInt;
|
|
NewUserPW : String[15];
|
|
NewUserEMail : Boolean;
|
|
StartMGroup : Word;
|
|
StartFGroup : Word;
|
|
UseUSAPhone : Boolean;
|
|
UserNameFormat : Byte;
|
|
UserDateType : Byte; // 1=MM/DD/YY 2=DD/MM/YY 3=YY/DD/MM 4=Ask
|
|
UserEditorType : Byte; // 0=Line 1=Full 2=Ask
|
|
UserHotKeys : Byte; // 0=no 1=yes 2=ask
|
|
UserFullChat : Byte; // 0=no 1=yes 2=ask
|
|
UserFileList : Byte; // 0=Normal 1=Lightbar 2=Ask
|
|
UserReadType : Byte; // 0=normal 1=ansi 2=ask
|
|
UserMailIndex : Byte;
|
|
UserReadIndex : Byte;
|
|
UserQuoteWin : Byte;
|
|
AskTheme : Boolean;
|
|
AskRealName : Boolean;
|
|
AskAlias : Boolean;
|
|
AskStreet : Boolean;
|
|
AskCityState : Boolean;
|
|
AskZipCode : Boolean;
|
|
AskHomePhone : Boolean;
|
|
AskDataPhone : Boolean;
|
|
AskBirthdate : Boolean;
|
|
AskGender : Boolean;
|
|
AskEmail : Boolean;
|
|
AskUserNote : Boolean;
|
|
AskScreenSize : Boolean;
|
|
AskScreenCols : Boolean;
|
|
OptionalField : Array[1..10] of RecUserOptionalField;
|
|
// MESSAGE BASE SETTINGS
|
|
MCompress : Boolean;
|
|
MColumns : Byte;
|
|
MShowHeader : Boolean; // re-show msg header after pause
|
|
MShowBases : Boolean;
|
|
MaxAutoSig : Byte;
|
|
qwkMaxBase : Word;
|
|
qwkMaxPacket : Word;
|
|
qwkArchive : String[4];
|
|
qwkBBSID : String[8];
|
|
qwkWelcome : String[mysMaxPathSize];
|
|
qwkNews : String[mysMaxPathSize];
|
|
qwkGoodbye : String[mysMaxPathSize];
|
|
Origin : String[50]; // Default origin line
|
|
NetAddress : Array[1..30] of RecEchoMailAddr; // echomail addresses
|
|
NetDesc : Array[1..30] of String[20]; // echomail network description
|
|
NetCrash : Boolean;
|
|
NetHold : Boolean;
|
|
NetKillSent : Boolean;
|
|
ColorQuote : Byte;
|
|
ColorText : Byte;
|
|
ColorTear : Byte;
|
|
ColorOrigin : Byte;
|
|
ColorKludge : Byte;
|
|
AcsCrossPost : String[mysMaxAcsSize];
|
|
AcsFileAttach : String[mysMaxAcsSize];
|
|
AcsNodeLookup : String[mysMaxAcsSize];
|
|
FSEditor : Boolean;
|
|
FSCommand : String[60];
|
|
// FILE BASE SETTINGS
|
|
FCompress : Boolean;
|
|
FColumns : Byte;
|
|
FShowHeader : Boolean;
|
|
FShowBases : Boolean;
|
|
FDupeScan : Byte; // 0=no 1=yes 2=global
|
|
UploadBase : Word; // Default upload file base
|
|
ImportDIZ : Boolean;
|
|
FreeUL : LongInt;
|
|
FreeCDROM : LongInt;
|
|
MaxFileDesc : Byte;
|
|
FCommentLines : Byte;
|
|
FCommentLen : Byte;
|
|
TestUploads : Boolean;
|
|
TestPassLevel : Byte;
|
|
TestCmdLine : String[mysMaxPathSize];
|
|
AcsValidate : String[mysMaxAcsSize];
|
|
AcsSeeUnvalid : String[mysMaxAcsSize];
|
|
AcsDLUnvalid : String[mysMaxAcsSize];
|
|
AcsSeeFailed : String[mysMaxAcsSize];
|
|
AcsDLFailed : String[mysMaxAcsSize];
|
|
// INTERNET SERVER SETTINGS
|
|
inetDomain : String[25];
|
|
inetIPBlocking : Boolean;
|
|
inetIPLogging : Boolean;
|
|
inetSMTPUse : Boolean;
|
|
inetSMTPPort : Word;
|
|
inetSMTPMax : Word;
|
|
inetSMTPDupes : Byte;
|
|
inetPOP3Use : Boolean;
|
|
inetPOP3Port : Word;
|
|
inetPOP3Max : Word;
|
|
inetPOP3Dupes : Byte;
|
|
inetPOP3Delete : Boolean;
|
|
inetPOP3Timeout : Word;
|
|
inetTNUse : Boolean;
|
|
inetTNPort : Word;
|
|
inetTNNodes : Byte;
|
|
inetTNDupes : Byte;
|
|
inetFTPUse : Boolean;
|
|
inetFTPPort : Word;
|
|
inetFTPMax : Word;
|
|
inetFTPDupes : Byte;
|
|
inetFTPPortMin : Word;
|
|
inetFTPPortMax : Word;
|
|
inetFTPAnon : Boolean;
|
|
inetFTPTimeout : Word;
|
|
inetNNTPUse : Boolean;
|
|
inetNNTPPort : Word;
|
|
inetNNTPMax : Word;
|
|
inetNNTPDupes : Byte;
|
|
// UNSORTED
|
|
Reserved : Array[1..488] of Char;
|
|
End;
|
|
|
|
Const
|
|
UserLockedOut = $01;
|
|
UserNoRatio = $02;
|
|
UserDeleted = $04;
|
|
UserNoKill = $08;
|
|
UserNoCaller = $10;
|
|
UserNoPWChange = $20;
|
|
|
|
//FUTURE DATA FILE UPDATES NEEDED
|
|
//LASTON needs optional1-10 compare to Mystic2
|
|
//FBASE
|
|
// ACS to comment on file
|
|
//FDIR
|
|
// pointer to comments record
|
|
// rating moved here from comment record
|
|
// file deletes and mbbsutil need updating to deal with comments
|
|
//MBASES
|
|
// expand header filename[20]
|
|
// add template[20]
|
|
// add msgbase sponser[30]
|
|
// add newsname[80]
|
|
// add colorkludge[b]
|
|
// add flags[l] merge in useReal
|
|
// flags:
|
|
// userealname, forced, allow autosig, allow attachments, kludge filter
|
|
// remove password?
|
|
// ACS to s[30]
|
|
//MENUS
|
|
// remove fallback?
|
|
// (flags)
|
|
// menu descriptions
|
|
// node action
|
|
// command timer
|
|
// input chars
|
|
// (commands)
|
|
// TBD compare to mystic 2
|
|
// VOTING: expand ACS to s[30]
|
|
// LANGREC
|
|
// example path sizes
|
|
// add script path?
|
|
// compare to mystic 2 for fallback stuff?
|
|
// rename to THEME
|
|
// horizontal/vertical percent bars
|
|
|
|
Type
|
|
RecUser = Record { USERS.DAT }
|
|
PermIdx : LongInt; // permanent user number
|
|
Flags : Byte; { User Flags }
|
|
Handle : String[30]; { Handle }
|
|
RealName : String[30]; { Real Name }
|
|
Password : String[15]; { Password }
|
|
Address : String[30]; { Address }
|
|
City : String[25]; { City }
|
|
ZipCode : String[9]; { Zipcode }
|
|
HomePhone : String[15]; { Home Phone }
|
|
DataPhone : String[15]; { Data Phone }
|
|
Birthday : LongInt;
|
|
Gender : Char; { M> Male F> Female }
|
|
Email : String[60]; { email address }
|
|
Optional : Array[1..10] of String[60];
|
|
UserInfo : String[30]; { user comment field }
|
|
Theme : String[20]; { user's language file }
|
|
AF1 : AccessFlagType;
|
|
AF2 : AccessFlagType; { access flags set #2 }
|
|
Security : SmallInt; { Security Level }
|
|
Expires : String[8];
|
|
ExpiresTo : Byte;
|
|
LastPWChange : String[8];
|
|
StartMenu : String[20]; { Start menu for user }
|
|
Archive : String[4]; { default archive extension }
|
|
QwkFiles : Boolean; { Include new files in QWK? }
|
|
DateType : Byte; { Date format (see above) }
|
|
ScreenSize : Byte; { user's screen length }
|
|
ScreenCols : Byte;
|
|
PeerIP : String[20];
|
|
PeerName : String[50];
|
|
FirstOn : LongInt; { Date/Time of First Call }
|
|
LastOn : LongInt; { Date/Time of Last Call }
|
|
Calls : LongInt; { Number of calls to BBS }
|
|
CallsToday : SmallInt; { Number of calls today }
|
|
DLs : SmallInt; { # of downloads }
|
|
DLsToday : SmallInt; { # of downloads today }
|
|
DLk : LongInt; { # of downloads in K }
|
|
DLkToday : LongInt; { # of downloaded K today }
|
|
ULs : LongInt; { total number of uploads }
|
|
ULk : LongInt; { total number of uploaded K }
|
|
Posts : LongInt; { total number of msg posts }
|
|
Emails : LongInt; { total number of sent email }
|
|
TimeLeft : LongInt; { time left online for today }
|
|
TimeBank : SmallInt; { number of mins in timebank }
|
|
FileRatings : LongInt;
|
|
FileComment : LongInt;
|
|
LastFBase : Word; { Last file base }
|
|
LastMBase : Word; { Last message base }
|
|
LastMGroup : Word; { Last group accessed }
|
|
LastFGroup : Word; { Last file group accessed }
|
|
Vote : Array[1..mysMaxVoteQuestion] of Byte; { Voting booth data }
|
|
EditType : Byte; { 0 = Line, 1 = Full, 2 = Ask }
|
|
FileList : Byte; { 0 = Normal, 1 = Lightbar }
|
|
SigUse : Boolean; { Use auto-signature? }
|
|
SigOffset : LongInt; { offset to sig in AUTOSIG.DAT }
|
|
SigLength : Byte; { number of lines in sig }
|
|
HotKeys : Boolean; { does user have hotkeys on? }
|
|
MReadType : Byte; { 0 = line 1 = full 2 = ask }
|
|
UseLBIndex : Boolean; { use lightbar index? }
|
|
UseLBQuote : Boolean; { use lightbar quote mode }
|
|
UseLBMIdx : Boolean; { use lightbar index in email? }
|
|
UseFullChat : Boolean; { use full screen teleconference }
|
|
Credits : LongInt;
|
|
Reserved : Array[1..393] of Byte;
|
|
End;
|
|
|
|
EventRec = Record { EVENTS.DAT }
|
|
Active : Boolean; { Is event active? }
|
|
Name : String[30]; { Event Name }
|
|
Forced : Boolean; { Is this a forced event }
|
|
ErrLevel : Byte; { Errorlevel to Exit }
|
|
ExecTime : SmallInt; { Minutes after midnight }
|
|
Warning : Byte; { Warn user before the event }
|
|
Offhook : Boolean; { Offhook modem for event? }
|
|
Node : Byte; { Node number. 0 = all }
|
|
LastRan : LongInt; { Last time event was ran }
|
|
End;
|
|
|
|
(* SECURITY.DAT in the data directory holds 255 records, one for each *)
|
|
(* possible security level. *)
|
|
|
|
RecSecurity = Record { SECURITY.DAT }
|
|
Desc : String[30]; { Description of security level }
|
|
Time : SmallInt; { Time online (mins) per day }
|
|
MaxCalls : SmallInt; { Max calls per day }
|
|
MaxDLs : SmallInt; { Max downloads per day }
|
|
MaxDLk : SmallInt; { Max download kilobytes per day }
|
|
MaxTB : SmallInt; { Max mins allowed in time bank }
|
|
DLRatio : Byte; { Download ratio (# of DLs per UL) }
|
|
DLKRatio : SmallInt; { DL K ratio (# of DLed K per UL K }
|
|
AF1 : AccessFlagType; { Access flags for this level A-Z }
|
|
AF2 : AccessFlagType; { Access flags #2 for this level }
|
|
Hard : Boolean; { Do a hard AF upgrade? }
|
|
StartMenu : String[20]; { Start Menu for this level }
|
|
PCRatio : SmallInt; { Post / Call ratio per 100 calls }
|
|
Expires : Word;
|
|
ExpiresTo : Word;
|
|
Posts : Word;
|
|
PostsTo : Word;
|
|
Download : Word;
|
|
DownloadTo : Word;
|
|
Upload : Word;
|
|
UploadTo : Word;
|
|
Calls : Word;
|
|
CallsTo : Word;
|
|
Reserved : Array[1..64] of Byte;
|
|
End;
|
|
|
|
RecArchive = Record { ARCHIVE.DAT }
|
|
OSType : Byte;
|
|
Active : Boolean;
|
|
Desc : String[30];
|
|
Ext : String[4];
|
|
Pack : String[80];
|
|
Unpack : String[80];
|
|
View : String[80];
|
|
End;
|
|
|
|
MScanRec = Record { <Message Base Path> *.SCN }
|
|
NewScan : Byte; { Include this base in new scan? }
|
|
QwkScan : Byte; { Include this base in qwk scan? }
|
|
End;
|
|
|
|
MBaseRec = Record { MBASES.DAT }
|
|
Name : String[40]; { Message base name }
|
|
QWKName : String[13]; { QWK (short) message base name }
|
|
FileName : String[40]; { Message base file name }
|
|
Path : String[40]; { Path where files are stored }
|
|
BaseType : Byte; { 0 = JAM, 1 = Squish }
|
|
NetType : Byte; { 0 = Local 1 = EchoMail }
|
|
{ 2 = UseNet 3 = NetMail }
|
|
PostType : Byte; { 0 = Public 1 = Private }
|
|
ACS, { ACS required to see this base }
|
|
ReadACS, { ACS required to read messages }
|
|
PostACS, { ACS required to post messages }
|
|
SysopACS : String[20]; { ACS required for sysop options }
|
|
Password : String[15]; { Password for this message base }
|
|
ColQuote : Byte; { Quote text color }
|
|
ColText : Byte; { Text color }
|
|
ColTear : Byte; { Tear line color }
|
|
ColOrigin: Byte; { Origin line color }
|
|
NetAddr : Byte; { Net AKA to use for this base }
|
|
Origin : String[50]; { Net origin line for this base }
|
|
UseReal : Boolean; { Use real names? }
|
|
DefNScan : Byte; { 0 = off, 1 = on, 2 = always }
|
|
DefQScan : Byte; { 0 = off, 1 = on, 2 = always }
|
|
MaxMsgs : Word; { Max messages to allow }
|
|
MaxAge : Word; { Max age of messages before purge }
|
|
Header : String[8]; { Display Header file name }
|
|
Index : SmallInt; { QWK index - NEVER CHANGE THIS }
|
|
End;
|
|
|
|
FScanRec = Record { <Data Path> *.SCN }
|
|
NewScan : Byte; { Include this base in new scan? }
|
|
LastNew : LongInt; { Last file scan (packed datetime)}
|
|
End;
|
|
|
|
FBaseRec = Record { FBASES.DAT }
|
|
Name : String[40]; { File base name }
|
|
FtpName : String[60]; { FTP directory name }
|
|
Filename : String[40]; { File name }
|
|
DispFile : String[20]; { Pre-list display file name }
|
|
Template : String[20]; { ansi file list template }
|
|
ListACS, { ACS required to see this base }
|
|
FtpACS, { ACS to see in FTP directory }
|
|
SysopACS, { ACS required for SysOp functions}
|
|
ULACS, { ACS required to upload files }
|
|
DLACS : String[mysMaxAcsSize]; { ACS required to download files }
|
|
Path : String[120]; { Path where files are stored }
|
|
Password : String[20]; { Password to access this base }
|
|
DefScan : Byte; { Default New Scan Setting }
|
|
ShowUL : Boolean;
|
|
IsCDROM : Boolean;
|
|
IsFREE : Boolean;
|
|
End;
|
|
// make flags and merge in shouul, iscdrom,isfree, etc
|
|
|
|
(* The file directory listing are stored as <FBaseRec.FileName>.DIR in *)
|
|
(* the data directory. Each record stores the info on one file. File *)
|
|
(* descriptions are stored in <FBaseRec.FileName>.DES in the data *)
|
|
(* directory. FDirRec.Pointer points to the file position in the .DES *)
|
|
(* file where the file description for the file begins. FDirRec.Lines is *)
|
|
(* the number of lines in the file description. Each line is stored as a *)
|
|
(* Pascal-like string (ie the first byte is the length of the string, *)
|
|
(* followed by text which is the length of the first byte *)
|
|
|
|
Const
|
|
FDirOffline = $01;
|
|
FDirInvalid = $02;
|
|
FDirDeleted = $04;
|
|
FDirFailed = $08;
|
|
FDirFree = $10;
|
|
|
|
Type
|
|
RecFileList = Record
|
|
FileName : String[70];
|
|
Size : LongInt;
|
|
DateTime : LongInt;
|
|
Uploader : String[30];
|
|
Flags : Byte;
|
|
Downloads : LongInt;
|
|
Rating : Byte;
|
|
DescPtr : LongInt;
|
|
DescLines : Byte;
|
|
End;
|
|
|
|
RecFileComment = Record { .FCI and .FCT in DATA directory }
|
|
UserName : String[30];
|
|
Rating : Byte;
|
|
Date : LongInt;
|
|
Pointer : LongInt;
|
|
Lines : Word;
|
|
End;
|
|
|
|
RecGroup = Record { GROUP_*.DAT }
|
|
Name : String[30]; { Group name }
|
|
ACS : String[30]; { ACS required to access group }
|
|
Hidden : Boolean;
|
|
End;
|
|
|
|
(* Mystic BBS stores it's menu files as text files. They *)
|
|
(* have been stored this way to make it possible to edit them with a text *)
|
|
(* editor (which is sometimes easier then using the menu editor). The *)
|
|
(* following records do not need to be used, but provide one way of *)
|
|
(* reading a menu into a record. *)
|
|
|
|
MenuRec = Record
|
|
Header : String[255];
|
|
Prompt : String[255];
|
|
DispCols : Byte;
|
|
ACS : String[20];
|
|
Password : String[15];
|
|
TextFile : String[8];
|
|
FallBack : String[8];
|
|
MenuType : Byte; { 0 = standard, 1 = lightbar, 2 = lightbar grid }
|
|
InputType : Byte; { 0 = user setting, 1 = longkey, 2 = hotkey }
|
|
DoneX : Byte;
|
|
DoneY : Byte;
|
|
Global : Byte; { 0 = no, 1 = yes }
|
|
End;
|
|
|
|
MenuCmdRec = Record
|
|
Text : String[79];
|
|
HotKey : String[8];
|
|
LongKey : String[8];
|
|
ACS : string[20];
|
|
Command : String[2];
|
|
Data : String[79];
|
|
X : Byte;
|
|
Y : Byte;
|
|
cUp : Byte;
|
|
cDown : Byte;
|
|
cLeft : Byte;
|
|
cRight : Byte;
|
|
LText : String[79];
|
|
LHText : String[79];
|
|
End;
|
|
|
|
PercentRec = Record // percentage bar record
|
|
BarLen : Byte;
|
|
LoChar : Char;
|
|
LoAttr : Byte;
|
|
HiChar : Char;
|
|
HiAttr : Byte;
|
|
End;
|
|
|
|
LangRec = Record { LANGUAGE.DAT }
|
|
FileName : String[8]; { Language file name }
|
|
Desc : String[30]; { Language description }
|
|
TextPath : String[40]; { Path where text files are stored }
|
|
MenuPath : String[40]; { Path where menu files are stored }
|
|
okASCII : Boolean; { Allow ASCII }
|
|
okANSI : Boolean; { Allow ANSI }
|
|
BarYN : Boolean; { Use Lightbar Y/N with this lang }
|
|
FieldCol1 : Byte; { Field input color }
|
|
FieldCol2 : Byte;
|
|
FieldChar : Char;
|
|
EchoCh : Char; { Password echo character }
|
|
QuoteColor : Byte; { Color for quote lightbar }
|
|
TagCh : Char; { File Tagged Char }
|
|
FileHi : Byte; { Color of file search highlight }
|
|
FileLo : Byte; { Non lightbar description color }
|
|
NewMsgChar : Char; { Lightbar Msg Index New Msg Char }
|
|
VotingBar : PercentRec; { voting booth bar }
|
|
FileBar : PercentRec; { file list bar }
|
|
MsgBar : PercentRec; { lightbar msg reader bar }
|
|
GalleryBar : PercentRec;
|
|
Reserved : Array[1..95] of Byte; { RESERVED }
|
|
End;
|
|
|
|
BBSListRec = Record
|
|
cType : Byte;
|
|
Phone : String[15];
|
|
Telnet : String[40];
|
|
BBSName : String[30];
|
|
Location : String[25];
|
|
SysopName : String[30];
|
|
BaudRate : String[6];
|
|
Software : String[10];
|
|
Deleted : Boolean;
|
|
AddedBy : String[30];
|
|
Verified : LongInt;
|
|
Res : Array[1..6] of Byte;
|
|
End;
|
|
|
|
(* ONELINERS.DAT found in the data directory. This file contains all the
|
|
one-liner data. It can be any number of records in size. *)
|
|
|
|
OneLineRec = Record
|
|
Text : String[79];
|
|
From : String[30];
|
|
End;
|
|
|
|
(* Each record of VOTES.DAT is one question. Mystic only allows for up *)
|
|
(* to 20 questions. *)
|
|
|
|
VoteRec = Record { VOTES.DAT in DATA directory }
|
|
Votes : SmallInt; { Total votes for this question }
|
|
AnsNum : Byte; { Total # of Answers }
|
|
User : String[30]; { User name who added question }
|
|
ACS : String[20]; { ACS to see this question }
|
|
AddACS : String[20]; { ACS to add an answer }
|
|
ForceACS : String[20]; { ACS to force voting of question }
|
|
Question : String[79]; { Question text }
|
|
Answer : Array[1..15] of Record { Array[1..15] of Answer data }
|
|
Text : String[40]; { Answer text }
|
|
Votes : SmallInt; { Votes for this answer }
|
|
End;
|
|
End;
|
|
|
|
(* CHATx.DAT is created upon startup, where X is the node number being *)
|
|
(* loaded. These files are used to store all the user information for a *)
|
|
(* node. *)
|
|
|
|
ChatRec = Record { CHATx.DAT }
|
|
Active : Boolean; { Is there a user on this node? }
|
|
Name : String[30]; { User's name on this node }
|
|
Action : String[40]; { User's action on this node }
|
|
Location : String[30]; { User's City/State on this node }
|
|
Gender : Char; { User's gender }
|
|
Age : Byte; { User's age }
|
|
Baud : String[6]; { User's baud rate }
|
|
Invisible : Boolean; { Is node invisible? }
|
|
Available : Boolean; { Is node available? }
|
|
InChat : Boolean; { Is user in multi-node chat? }
|
|
Room : Byte; { Chat room }
|
|
End;
|
|
|
|
(* Chat room record - partially used by the multi node chat functions *)
|
|
|
|
RoomRec = Record
|
|
Name : String[40]; { Channel Name }
|
|
Reserved : Array[1..128] of Byte; { RESERVED }
|
|
End;
|
|
|
|
(* CALLERS.DAT holds information on the last ten callers to the BBS. This *)
|
|
(* file is always 10 records long with the most recent caller being the *)
|
|
(* 10th record. *)
|
|
|
|
LastOnRec = Record { CALLERS.DAT }
|
|
Handle : String[30]; { User's Name }
|
|
City : String[25]; { City/State }
|
|
Address : String[30]; { user's address }
|
|
Baud : String[6]; { Baud Rate }
|
|
DateTime : LongInt; { Date & Time (UNIX) }
|
|
Node : Byte; { Node number of login }
|
|
CallNum : LongInt; { Caller Number }
|
|
EmailAddr : String[35]; { email address }
|
|
UserInfo : String[30]; { user info field }
|
|
Option1 : String[35]; { optional data 1 }
|
|
Option2 : String[35]; { " " 2 }
|
|
Option3 : String[35]; { " " 3 }
|
|
End;
|
|
|
|
HistoryRec = Record
|
|
Date : LongInt;
|
|
Emails : Word;
|
|
Posts : Word;
|
|
Downloads : Word;
|
|
Uploads : Word;
|
|
DownloadKB : LongInt;
|
|
UploadKB : LongInt;
|
|
Calls : LongInt;
|
|
NewUsers : Word;
|
|
End;
|
|
|
|
RecProtocol = Record
|
|
OSType : Byte;
|
|
Active : Boolean;
|
|
Batch : Boolean;
|
|
Key : Char;
|
|
Desc : String[40];
|
|
SendCmd : String[60];
|
|
RecvCmd : String[60];
|
|
End;
|
|
|
|
PromptRec = String[255];
|
|
|
|
NodeMsgRec = Record
|
|
FromNode : Byte;
|
|
FromWho : String[30];
|
|
ToWho : String[30];
|
|
Message : String[250];
|
|
MsgType : Byte;
|
|
{ 1 = Chat Pub and broadcast }
|
|
{ 2 = System message }
|
|
{ 3 = User message }
|
|
{ 4 = Chat Private }
|
|
{ 5 = chat status note }
|
|
{ 6 = chat action }
|
|
{ 7 = chat topic update }
|
|
Room : Byte; { Chat room number. 0 = chat broadcast }
|
|
End;
|