MsgBase format restructure. New message base editor

This commit is contained in:
mysticbbs 2012-02-26 11:52:54 -05:00
parent 0a8502afb1
commit d270e44ef7
18 changed files with 615 additions and 516 deletions

View File

@ -13,6 +13,35 @@ Uses
{$I RECORDS.PAS}
Type
OldMBaseRec = 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;
OldFBaseRec = Record { FBASES.DAT }
Name : String[40]; { File base name }
FtpName : String[60]; { FTP directory name }
@ -1074,7 +1103,6 @@ Begin
FBase.ULACS := OldFBase.ULACS;
FBase.SysopACS := OldFBase.SysopACS;
FBase.Path := OldFBase.Path;
FBase.Password := OldFBase.Password;
FBase.DefScan := OldFBase.DefScan;
FBase.CommentACS := 's20';
FBase.Flags := 0;
@ -1094,6 +1122,71 @@ Begin
DeleteFile (Config.DataPath + 'fbases.old');
End;
Procedure ConvertMessageBases;
Var
MBase : RecMessageBase;
MBaseFile : File of RecMessageBase;
OldMBase : OldMBaseRec;
OldMBaseFile : File of OldMBaseRec;
Begin
WriteLn ('[-] Updating message bases...');
If Not ReNameFile(Config.DataPath + 'mbases.dat', Config.DataPath + 'mbases.old') Then Begin
WriteLn('[!] UNABLE TO FIND: ' + Config.DataPath + 'mbases.dat');
Exit;
End;
Assign (OldMBaseFile, Config.DataPath + 'mbases.old');
Reset (OldMBaseFile);
Assign (MBaseFile, Config.DataPath + 'mbases.dat');
ReWrite (MBaseFile);
While Not Eof(OldMBaseFile) Do Begin
Read (OldMBaseFile, OldMBase);
MBase.Name := OldMBase.Name;
MBase.QWKName := OldMBase.QwkName;
MBase.NewsName := '';
MBase.FileName := OldMBase.FileName;
MBase.Path := OldMBase.Path;
MBase.BaseType := OldMBase.BaseType;
MBase.NetType := OldMBase.NetType;
MBase.ListACS := OldMBase.ACS;
MBase.ReadACS := OldMBase.ReadACS;
MBase.PostACS := OldMBase.PostACS;
MBase.SysopACS := OldMBase.SysopACS;
MBase.Sponsor := '';
MBase.ColQuote := OldMBase.ColQuote;
MBase.ColText := OldMBase.ColText;
MBase.ColTear := OldMBase.ColTear;
MBase.ColOrigin := OldMBAse.ColOrigin;
MBase.ColKludge := 8;
MBase.NetAddr := OldMBase.NetAddr;
MBase.Origin := OldMBase.Origin;
MBase.DefNScan := OldMBase.DefNScan;
MBase.DefQScan := OldMBase.DefQScan;
MBase.MaxMsgs := OldMBase.MaxMsgs;
MBase.MaxAge := OldMBase.MaxAge;
MBase.Header := OldMBase.Header;
MBase.RTemplate := 'ansimrd';
MBase.ITemplate := 'ansimlst';
MBase.Index := OldMBase.Index;
MBase.Flags := 0;
If OldMBase.UseReal Then MBase.Flags := MBase.Flags or MBRealNames;
If OldMBase.PostType = 1 Then MBase.Flags := MBase.Flags or MBPrivate;
Write (MBaseFile, MBase);
End;
Close (MBaseFile);
Close (OldMBaseFile);
DeleteFile (Config.DataPath + 'mbases.old');
End;
Var
ConfigFile : File of RecConfig;
Begin
@ -1109,7 +1202,8 @@ Begin
// ConvertUsers; //1.10a11
//ConvertSecurity; //1.10a11
//ConvertFileLists; //1.10a11
ConvertFileBases; //1.10a11
//ConvertFileBases; //1.10a11
ConvertMessageBases; //1.10a11
// ConvertArchives; //1.10a1
// ConvertGroups; //1.10a1

View File

@ -3875,3 +3875,26 @@
+ Added Copy/Paste functions into all new ANSI internal editors.
+ Added new ANSI message group and file group editors.
- Removed Password protected file and message bases. This is a barely
used feature and it doesn't integrate well when the bases are available
via FTP and NTTP, etc. Security around bases needs to be based on the
ACS system to avoid issues in those situations.
Prompts 66, and 67 are no longer used.
Prompts 103 and 104 are no longer used.
+ Ansi message reader template is now configured on a per-base level just
as the standard reader template is.
+ Ansi message reader message index is now configured on a per-base level
just like the ansi reader template.
+ Message base ACS length has been extended to 30 characters.
+ Message base standard reader header filename has been expanded to 20
characters.
+ Message base path expanded to 80 characters from 40.
+ Added new ANSI message base editor.

View File

@ -46,8 +46,7 @@ Begin
Form.AddStr ('C', ' Comment ACS ' , 9, 14, 24, 14, 13, 30, 30, @FBase.CommentACS, Topic + 'ACS to comment and rate files');
Form.AddStr ('P', ' FTP ACS' , 13, 15, 24, 15, 9, 30, 30, @FBase.FTPACS, Topic + 'ACS to access via FTP');
Form.AddStr ('S', ' Sysop ACS ' , 11, 16, 24, 16, 11, 30, 30, @FBase.SysopACS, Topic + 'ACS for Sysop access');
Form.AddTog ('E', ' Default Scan' , 8, 17, 24, 17, 14, 6, 0, 2, 'No Yes Forced', @FBase.DefScan, Topic + 'Default scan setting');
Form.AddPass ('A', ' Password' , 12, 18, 24, 18, 10, 20, 20, @FBase.Password, Topic + 'Base password (Blank/Disable)');
Form.AddTog ('E', ' Default Scan' , 8, 17, 24, 17, 14, 6, 0, 2, 'No Yes Always', @FBase.DefScan, Topic + 'Default scan setting');
Form.AddPath ('I', ' File Path' , 11, 19, 24, 19, 11, 30, 120, @FBase.Path, Topic + 'Directory where files are stored');
Form.AddBits ('R', ' Free Files' , 57, 7, 71, 7, 12, FBFreeFiles, @FBase.Flags, Topic + 'Files in base are free?');

View File

@ -20,14 +20,14 @@ Uses
bbs_cfg_SysCfg,
bbs_cfg_Archive,
bbs_cfg_Protocol,
bbs_cfg_FileBase,
bbs_cfg_MsgBase,
bbs_cfg_Groups,
//old editors to be rewritten
bbs_cfg_useredit,
bbs_cfg_groups,
bbs_cfg_events,
bbs_cfg_filebase,
bbs_cfg_language,
bbs_cfg_msgbase,
bbs_cfg_seclevel,
bbs_cfg_vote,
bbs_cfg_menuedit;
@ -40,7 +40,10 @@ Begin
Case Mode of
'A' : Configuration_ArchiveEditor;
'B' : Configuration_MessageBaseEditor;
'F' : Configuration_FileBaseEditor;
'G' : Configuration_GroupEditor(True);
'R' : Configuration_GroupEditor(False);
'P' : Configuration_ProtocolEditor;
End;
@ -74,11 +77,12 @@ End;
Procedure Configuration_MainMenu;
Var
Form : TAnsiMenuForm;
Box : TAnsiMenuBox;
Image : TConsoleImageRec;
MenuPos : Array[0..4] of Byte = (1, 1, 1, 1, 1);
Res : Char;
Form : TAnsiMenuForm;
Box : TAnsiMenuBox;
Image : TConsoleImageRec;
MenuPos : Array[0..4] of Byte = (1, 1, 1, 1, 1);
ThemeOld : LangRec;
Res : Char;
Procedure BoxOpen (X1, Y1, X2, Y2: Byte);
Begin
@ -120,8 +124,6 @@ Var
'U' : User_Editor(False, False);
'M' : Menu_Editor;
'T' : Lang_Editor;
'B' : Message_Base_Editor;
'G',
'S' : Levels_Editor;
'E' : Event_Editor;
'V' : Vote_Editor;
@ -274,9 +276,17 @@ Begin
#75 : MenuPtr := 2;
#77 : MenuPtr := 4;
End;
End Else
End Else Begin
ThemeOld := Session.Lang;
Session.Lang.FieldCol1 := 15 + 1 * 16;
Session.Lang.FieldCol2 := 9 + 1 * 16;
Session.Lang.FieldChar := 'm';
Session.Lang.EchoCh := '*';
Case Res of
'A' : Configuration_ArchiveEditor;
'B' : Configuration_MessageBaseEditor;
'F' : Configuration_FileBaseEditor;
'G' : Configuration_GroupEditor(True);
'P' : Configuration_ProtocolEditor;
@ -284,7 +294,6 @@ Begin
'U',
'M',
'T',
'B',
'S',
'E',
'V' : ExecuteOldConfiguration(Res);
@ -292,6 +301,9 @@ Begin
Else
MenuPtr := 0;
End;
Session.Lang := ThemeOld;
End;
End;
4 : Begin
BoxOpen (54, 4, 64, 6);

View File

@ -4,233 +4,251 @@ Unit bbs_cfg_MsgBase;
Interface
Procedure Message_Base_Editor;
Procedure Configuration_MessageBaseEditor;
Implementation
Uses
m_FileIO,
m_Strings,
bbs_Common,
bbs_Core,
bbs_User;
m_FileIO,
bbs_Ansi_MenuBox,
bbs_Ansi_MenuForm,
bbs_Cfg_Common,
bbs_Cfg_SysCfg,
bbs_Common;
Procedure Message_Base_Editor;
Const
BT : Array[0..1] of String[6] = ('JAM', 'Squish');
NT : Array[0..3] of String[8] = ('Local ', 'EchoMail', 'UseNet ', 'NetMail ');
ST : Array[0..2] of String[6] = ('No', 'Yes', 'Always');
Var
A,
B : Word; { was integer }
MBaseFile : TBufFile;
MBase : RecMessageBase;
Procedure EditMessageBase;
Var
Box : TAnsiMenuBox;
Form : TAnsiMenuForm;
Topic : String;
Begin
Session.SystemLog ('*MBASE EDITOR*');
Topic := '|03(|09Message Base Edit|03) |01-|09> |15';
Box := TAnsiMenuBox.Create;
Form := TAnsiMenuForm.Create;
Repeat
Session.io.AllowPause := True;
Box.Header := ' Index ' + strI2S(MBase.Index) + ' ';
Session.io.OutFullLn ('|CL|14Message Base Editor|CR|CR|09### Name|$D37 Type Format|CR--- |$D40- ------- ------');
Box.Open (3, 5, 77, 21);
Reset (Session.Msgs.MBaseFile);
While Not Eof(Session.Msgs.MBaseFile) Do Begin
Read (Session.Msgs.MBaseFile, Session.Msgs.MBase);
VerticalLine (17, 6, 20);
VerticalLine (66, 6, 20);
Session.io.OutFullLn ('|15' + strPadR(strI2S(FilePos(Session.Msgs.MBaseFile) - 1), 3, ' ') + ' |14|$R41|MB|10' +
NT[Session.Msgs.MBase.NetType] + ' ' + BT[Session.Msgs.MBase.BaseType]);
Form.AddStr ('N', ' Name' , 11, 6, 19, 6, 6, 30, 40, @MBase.Name, Topic + 'Message base description');
Form.AddStr ('W', ' Newsgroup' , 6, 7, 19, 7, 11, 30, 60, @MBase.NewsName, Topic + 'Newsgroup name (Blank/Disabled)');
Form.AddStr ('Q', ' QWK Name' , 7, 8, 19, 8, 10, 13, 13, @MBase.QwkName, Topic + 'Qwk Short name');
Form.AddStr ('F', ' File Name' , 6, 9, 19, 9, 11, 30, 40, @MBase.FileName, Topic + 'Message base storage file name');
Form.AddPath ('P', ' Path' , 11, 10, 19, 10, 6, 30, 80, @MBase.Path, Topic + 'Message base storage path');
Form.AddStr ('L', ' List ACS' , 7, 11, 19, 11, 10, 30, 30, @MBase.ListACS, Topic + 'Access required to see in base list');
Form.AddStr ('R', ' Read ACS' , 7, 12, 19, 12, 10, 30, 30, @MBase.ReadACS, Topic + 'Access required to read messages');
Form.AddStr ('P', ' Post ACS' , 7, 13, 19, 13, 10, 30, 30, @MBase.PostACS, Topic + 'Access required to post messages');
Form.AddStr ('Y', ' Sysop ACS' , 6, 14, 19, 14, 11, 30, 30, @MBase.SysopACS, Topic + 'Access required for Sysop access');
Form.AddNone ('D', ' Net Address' , 4, 15, 13, Topic + 'NetMail Address');
Form.AddStr ('I', ' Origin' , 9, 16, 19, 16, 8, 30, 50, @MBase.Origin, Topic + 'Message base origin line');
Form.AddStr ('S', ' Sponsor' , 8, 17, 19, 17, 9, 30, 30, @MBase.Sponsor, Topic + 'User name of base''s sponser');
Form.AddStr ('H', ' Header' , 9, 18, 19, 18, 8, 20, 20, @MBase.Header, Topic + 'Display file name of msg header');
Form.AddStr ('T', ' R Template' , 5, 19, 19, 19, 12, 20, 20, @MBase.RTemplate, Topic + 'Template for full screen reader');
Form.AddStr ('M', ' L Template' , 5, 20, 19, 20, 12, 20, 20, @MBase.ITemplate, Topic + 'Template for lightbar message list');
If (Session.io.PausePtr = Session.User.ThisUser.ScreenSize) and (Session.io.AllowPause) Then
Case Session.io.MorePrompt of
'N' : Break;
'C' : Session.io.AllowPause := False;
End;
End;
Session.io.OutFull ('|CR|09(I)nsert, (D)elete, (E)dit, (M)ove, (Q)uit? ');
case Session.io.OneKey (#13'DIEMQ', True) of
'D' : begin
Session.io.OutFull ('Delete which? ');
a := strS2I(Session.io.GetInput(3, 3, 11, ''));
If (A > 0) and (A <= FileSize(Session.Msgs.MBaseFile)) Then Begin
Seek (Session.Msgs.MBaseFile, A);
Read (Session.Msgs.MBaseFile, Session.Msgs.MBase);
Form.AddAttr ('Q', ' Quote Color' , 53, 6, 68, 6, 13, @MBase.ColQuote, Topic + 'Color for quoted text');
Form.AddAttr ('X', ' Text Color' , 54, 7, 68, 7, 12, @MBase.ColText, Topic + 'Color for message text');
Form.AddAttr ('E', ' Tear Color' , 54, 8, 68, 8, 12, @MBase.ColTear, Topic + 'Color for tear line');
Form.AddAttr ('G', ' Origin Color', 52, 9, 68, 9, 14, @MBase.ColOrigin, Topic + 'Color for origin line');
Form.AddAttr ('K', ' Kludge Color', 52, 10, 68, 10, 14, @MBase.ColKludge, Topic + 'Color for kludge line');
Form.AddWord ('M', ' Max Msgs' , 56, 11, 68, 11, 10, 5, 0, 65535, @MBase.MaxMsgs, Topic + 'Maximum number of message in base');
Form.AddWord ('1', ' Max Msg Age' , 53, 12, 68, 12, 13, 5, 0, 65535, @MBase.MaxAge, Topic + 'Maximum age (days) to keep messages');
Form.AddTog ('2', ' New Scan' , 56, 13, 68, 13, 10, 6, 0, 2, 'No Yes Forced', @MBase.DefNScan, Topic + 'Newscan default for users');
Form.AddTog ('3', ' QWK Scan' , 56, 14, 68, 14, 10, 6, 0, 2, 'No Yes Forced', @MBase.DefQScan, Topic + 'QWKscan default for users');
Form.AddBits ('4', ' Real Names' , 54, 15, 68, 15, 12, MBRealNames, @MBase.Flags, Topic + 'Use real names in this base?');
Form.AddBits ('5', ' Autosigs' , 56, 16, 68, 16, 10, MBAutoSigs, @MBase.Flags, Topic + 'Allow auto signatures in this base?');
Form.AddBits ('6', ' Kill Kludge' , 53, 17, 68, 17, 13, MBKillKludge, @MBase.Flags, Topic + 'Filter out kludge lines');
Form.AddBits ('V', ' Private' , 57, 18, 68, 18, 9, MBPrivate, @MBase.Flags, Topic + 'Is this a private base?');
Form.AddTog ('A', ' Base Type' , 55, 19, 68, 19, 11, 9, 0, 3, 'Local EchoMail Newsgroup Netmail', @MBase.NetType, Topic + 'Message base type');
Form.AddTog ('B', ' Base Format' , 53, 20, 68, 20, 13, 6, 0, 1, 'JAM Squish', @MBase.BaseType, Topic + 'Message base storage format');
FileErase (config.msgspath + Session.Msgs.MBase.filename + '.jhr');
FileErase (config.msgspath + Session.Msgs.MBase.filename + '.jlr');
FileErase (config.msgspath + Session.Msgs.MBase.filename + '.jdt');
FileErase (config.msgspath + Session.Msgs.MBase.filename + '.jdx');
FileErase (config.msgspath + Session.Msgs.MBase.filename + '.sqd');
FileErase (config.msgspath + Session.Msgs.MBase.filename + '.sqi');
FileErase (config.msgspath + Session.Msgs.MBase.filename + '.sql');
Repeat
WriteXY (19, 15, 113, strPadR(strAddr2Str(Config.NetAddress[MBase.NetAddr]), 19, ' '));
KillRecord (Session.Msgs.MBaseFile, A+1, SizeOf(MBaseRec));
End;
end;
'I' : begin
Session.io.OutFull ('Insert before? (1-' + strI2S(filesize(Session.Msgs.MBaseFile)) + '): ');
a := strS2I(Session.io.GetInput(3, 3, 11, ''));
if (a > 0) and (a <= filesize(Session.Msgs.MBaseFile)) then begin
AddRecord (Session.Msgs.MBaseFile, A, SizeOf(Session.Msgs.MBaseFile));
Case Form.Execute of
'D' : MBase.NetAddr := Configuration_EchoMailAddress(False);
#27 : Break;
End;
Until False;
{find permanent mbase index}
b := a + 1;
reset (Session.Msgs.MBaseFile);
while not eof(Session.Msgs.MBaseFile) do begin
read (Session.Msgs.MBaseFile, Session.Msgs.mbase);
if B = Session.Msgs.MBase.index then begin
inc (b);
reset (Session.Msgs.MBaseFile);
end;
end;
Session.Msgs.MBase.name := 'New Message Base';
Session.Msgs.MBase.qwkname := 'New Messages';
Session.Msgs.MBase.filename := 'NEW';
Session.Msgs.MBase.Path := config.msgspath;
Session.Msgs.MBase.nettype := 0;
Session.Msgs.MBase.posttype := 0;
Session.Msgs.MBase.acs := 's255';
Session.Msgs.MBase.readacs := 's255';
Session.Msgs.MBase.postacs := 's255';
Session.Msgs.MBase.sysopacs := 's255';
Session.Msgs.MBase.index := B;
Session.Msgs.MBase.netaddr := 1;
Session.Msgs.MBase.origin := config.origin;
Session.Msgs.MBase.usereal := false;
Session.Msgs.MBase.colquote := config.colorquote;
Session.Msgs.MBase.coltext := config.colortext;
Session.Msgs.MBase.coltear := config.colortear;
Session.Msgs.MBase.colorigin := config.colororigin;
Session.Msgs.MBase.defnscan := 1;
Session.Msgs.MBase.defqscan := 1;
Session.Msgs.MBase.basetype := 0;
seek (Session.Msgs.MBaseFile, a);
write (Session.Msgs.MBaseFile, Session.Msgs.mbase);
end;
end;
'E' : begin
Session.io.OutFull ('Edit which? ');
a := strS2I(Session.io.GetInput(3, 3, 11, ''));
if (a >= 0) and (a < filesize(Session.Msgs.MBaseFile)) then begin
seek (Session.Msgs.MBaseFile, a);
read (Session.Msgs.MBaseFile, Session.Msgs.mbase);
repeat
Session.io.OutFullLn ('|CL|14Message Base '+strI2S(FilePos(Session.Msgs.MBaseFile)-1)+' of '+strI2S(FileSize(Session.Msgs.MBaseFile)-1)+' |08[Perm Idx:' + strI2S(Session.Msgs.MBase.index) + ']|CR|03');
Session.io.OutRawln ('A. Name : ' + Session.Msgs.MBase.name);
Session.io.OutRawln ('B. QWK Name : ' + Session.Msgs.MBase.qwkname);
Session.io.OutRawln ('C. Filename : ' + Session.Msgs.MBase.filename);
Session.io.OutRawln ('D. Storage Path : ' + Session.Msgs.MBase.path);
Session.io.OutRaw ('E. Post Type : ');
If Session.Msgs.MBase.PostType = 0 Then Session.io.OutRaw ('Public ') Else Session.io.OutRaw ('Private');
Session.io.OutRawLn (strRep(' ', 23) + 'Y. Base Format : ' + BT[Session.Msgs.MBase.BaseType]);
Box.Close;
Session.io.OutFull ('|CRF. List ACS : ' + strPadR(Session.Msgs.MBase.acs, 30, ' '));
Session.io.OutFull ('O. Quote Color : ');
Session.io.AnsiColor(Session.Msgs.MBase.ColQuote);
Session.io.OutFullLn ('XX> Quote|03|16');
Form.Free;
Box.Free;
End;
Session.io.OutRaw ('G. Read ACS : ' + strPadR(Session.Msgs.MBase.readacs, 30, ' '));
Session.io.OutFull ('P. Text Color : ');
Session.io.AnsiColor(Session.Msgs.MBase.ColText);
Session.io.OutFullLn ('Text|03|16');
Procedure Configuration_MessageBaseEditor;
Var
Box : TAnsiMenuBox;
List : TAnsiMenuList;
MIndex : LongInt;
Copied : RecMessageBase;
HasCopy : Boolean = False;
Session.io.OutRaw ('H. Post ACS : ' + strPadR(Session.Msgs.MBase.postacs, 30, ' '));
Session.io.OutFull ('R. Tear Color : ');
Session.io.AnsiColor(Session.Msgs.MBase.ColTear);
Session.io.OutFullLn ('--- Tear|03|16');
Procedure MakeList;
Var
Tag : Byte;
Begin
List.Clear;
Session.io.OutRaw ('I. Sysop ACS : ' + strPadR(Session.Msgs.MBase.sysopacs, 30, ' '));
Session.io.OutFull ('S. Origin Color : ');
Session.io.AnsiColor(Session.Msgs.MBase.ColOrigin);
Session.io.OutFullLn ('* Origin:|03|16');
MBaseFile.Reset;
Session.io.OutRaw ('J. Password : ' + strPadR(Session.Msgs.MBase.password, 30, ' '));
Session.io.OutRawln ('T. Header File : ' + Session.Msgs.MBase.Header);
Session.io.OutRawLn ('K. Base Type : ' + NT[Session.Msgs.MBase.NetType]);
Session.io.OutRawln ('L. Net Address : ' + strAddr2Str(config.netaddress[Session.Msgs.MBase.netaddr]) + ' (' + Config.NetDesc[Session.Msgs.MBase.NetAddr] + ')');
Session.io.OutRawln ('M. Origin line : ' + Session.Msgs.MBase.origin);
Session.io.OutRawLn ('N. Use Realnames: ' + Session.io.OutYN(Session.Msgs.MBase.UseReal));
While Not MBaseFile.EOF Do Begin
If MBaseFile.FilePos = 0 Then Tag := 2 Else Tag := 0;
Session.io.OutFullLn ('|CRU. Default New Scan: ' + strPadR(ST[Session.Msgs.MBase.DefNScan], 27, ' ') +
'W. Max Messages : ' + strI2S(Session.Msgs.MBase.MaxMsgs));
MBaseFile.Read (MBase);
Session.io.OutRawLn ('V. Default QWK Scan: ' + strPadR(ST[Session.Msgs.MBase.DefQScan], 27, ' ') +
'X. Max Msg Age : ' + strI2S(Session.Msgs.MBase.MaxAge) + ' days');
List.Add(strPadR(strI2S(MBaseFile.FilePos), 5, ' ') + ' ' + strStripMCI(MBase.Name), Tag);
End;
Session.io.OutFull ('|CR|09([) Prev, (]) Next, (Q)uit: ');
case Session.io.OneKey('[]ABCDEFGHIJKLMNOPQRSTUVWXY', True) of
'[' : If FilePos(Session.Msgs.MBaseFile) > 1 Then Begin
Seek (Session.Msgs.MBaseFile, FilePos(Session.Msgs.MBaseFile)-1);
Write (Session.Msgs.MBaseFile, Session.Msgs.MBase);
Seek (Session.Msgs.MBaseFile, FilePos(Session.Msgs.MBaseFile)-2);
Read (Session.Msgs.MBaseFile, Session.Msgs.MBase);
End;
']' : If FilePos(Session.Msgs.MBaseFile) < FileSize(Session.Msgs.MBaseFile) Then Begin
Seek (Session.Msgs.MBaseFile, FilePos(Session.Msgs.MBaseFile)-1);
Write (Session.Msgs.MBaseFile, Session.Msgs.MBase);
Read (Session.Msgs.MBaseFile, Session.Msgs.MBase);
End;
'A' : Session.Msgs.MBase.Name := Session.io.InXY(19, 3, 40, 40, 11, Session.Msgs.MBase.Name);
'B' : Session.Msgs.MBase.QwkName := Session.io.InXY(19, 4, 13, 13, 11, Session.Msgs.MBase.QwkName);
'C' : Session.Msgs.MBase.FileName := Session.io.InXY(19, 5, 40, 40, 11, Session.Msgs.MBase.filename);
'D' : Session.Msgs.MBase.Path := CheckPath(Session.io.InXY(19, 6, 39, 39, 11, Session.Msgs.MBase.Path));
'E' : If Session.Msgs.MBase.PostType = 0 Then Inc(Session.Msgs.MBase.PostType) Else Dec(Session.Msgs.MBase.PostType);
'F' : Session.Msgs.MBase.ACS := Session.io.InXY(19, 9, 20, 20, 11, Session.Msgs.MBase.acs);
'G' : Session.Msgs.MBase.ReadACS := Session.io.InXY(19, 10, 20, 20, 11, Session.Msgs.MBase.readacs);
'H' : Session.Msgs.MBase.PostACS := Session.io.InXY(19, 11, 20, 20, 11, Session.Msgs.MBase.postacs);
'I' : Session.Msgs.MBase.SysopACS := Session.io.InXY(19, 12, 20, 20, 11, Session.Msgs.MBase.sysopacs);
'J' : Session.Msgs.MBase.Password := Session.io.InXY(19, 13, 15, 15, 12, Session.Msgs.MBase.password);
'K' : If Session.Msgs.MBase.NetType < 3 Then Inc(Session.Msgs.MBase.NetType) Else Session.Msgs.MBase.NetType := 0;
'L' : begin
Session.io.OutFullLn ('|03');
For A := 1 to 30 Do Begin
Session.io.OutRaw (strPadR(strI2S(A) + '.', 5, ' ') + strPadR(strAddr2Str(Config.NetAddress[A]), 30, ' '));
If A Mod 2 = 0 then Session.io.OutRawLn('');
End;
Session.io.OutFull ('|CR|09Address: ');
a := strS2I(Session.io.GetInput(2, 2, 12, ''));
if (a > 0) and (a < 31) then Session.Msgs.MBase.netaddr := a;
end;
'M' : Session.Msgs.MBase.origin := Session.io.InXY(19, 16, 50, 50, 11, Session.Msgs.MBase.origin);
'N' : Session.Msgs.MBase.usereal := Not Session.Msgs.MBase.UseReal;
'O' : Session.Msgs.MBase.ColQuote := getColor(Session.Msgs.MBase.ColQuote);
'P' : Session.Msgs.MBase.ColText := getColor(Session.Msgs.MBase.ColText);
'R' : Session.Msgs.MBase.ColTear := getColor(Session.Msgs.MBase.ColTear);
'S' : Session.Msgs.MBase.ColOrigin := getColor(Session.Msgs.MBase.ColOrigin);
'T' : Session.Msgs.MBase.Header := Session.io.InXY(67, 13, 8, 8, 11, Session.Msgs.MBase.Header);
'U' : If Session.Msgs.MBase.DefNScan < 2 Then Inc(Session.Msgs.MBase.DefNScan) Else Session.Msgs.MBase.DefNScan := 0;
'V' : If Session.Msgs.MBase.DefQScan < 2 Then Inc(Session.Msgs.MBase.DefQScan) Else Session.Msgs.MBase.DefQScan := 0;
'W' : Session.Msgs.MBase.MaxMsgs := strS2I(Session.io.InXY(67, 19, 5, 5, 12, strI2S(Session.Msgs.MBase.MaxMsgs)));
'X' : Session.Msgs.MBase.MaxAge := strS2I(Session.io.InXY(67, 20, 5, 5, 12, strI2S(Session.Msgs.MBase.MaxAge)));
'Y' : If Session.Msgs.MBase.BaseType = 0 Then Session.Msgs.MBase.BaseType := 1 Else Session.Msgs.MBase.BaseType := 0;
'Q' : Break;
End;
Until False;
Seek (Session.Msgs.MBaseFile, FilePos(Session.Msgs.MBaseFile) - 1);
Write (Session.Msgs.MBaseFile, Session.Msgs.MBase);
End;
End;
'M' : Begin
Session.io.OutRaw ('Move which? ');
A := strS2I(Session.io.GetInput(3, 3, 12, ''));
List.Add('', 2);
End;
Session.io.OutRaw ('Move before? (1-' + strI2S(FileSize(Session.Msgs.MBaseFile)) + '): ');
B := strS2I(Session.io.GetInput(3, 3, 12, ''));
Procedure AssignRecord (Email: Boolean);
Begin
MIndex := List.Picked;
If (A > 0) and (A <= FileSize(Session.Msgs.MBaseFile)) and (B > 0) and (B <= FileSize(Session.Msgs.MBaseFile)) Then Begin
Seek (Session.Msgs.MBaseFile, A);
Read (Session.Msgs.MBaseFile, Session.Msgs.MBase);
MBaseFile.Reset;
AddRecord (Session.Msgs.MBaseFile, B+1, SizeOf(MBaseRec));
Write (Session.Msgs.MBaseFile, Session.Msgs.MBase);
While Not MBaseFile.EOF Do Begin
MBaseFile.Read (MBase);
If A > B Then Inc(A);
If MIndex = MBase.Index Then Begin
Inc (MIndex);
MBaseFile.Reset;
End;
End;
KillRecord (Session.Msgs.MBaseFile, A+1, SizeOf(MBaseRec));
End;
End;
'Q' : break;
end;
MBaseFile.RecordInsert (List.Picked);
until False;
close (Session.Msgs.MBaseFile);
end;
FillChar (MBase, SizeOf(RecMessageBase), 0);
end.
With MBase Do Begin
Index := MIndex;
FileName := 'new';
Path := Config.MsgsPath;
Name := 'New Base';
DefNScan := 1;
DefQScan := 1;
MaxMsgs := 500;
MaxAge := 365;
Header := 'msghead';
RTemplate := 'ansimrd';
ITemplate := 'ansimlst';
SysopACS := 's255';
NetAddr := 1;
ColQuote := Config.ColorQuote;
ColText := Config.ColorText;
ColTear := Config.ColorTear;
ColOrigin := Config.ColorOrigin;
ColKludge := Config.ColorKludge;
Flags := MBAutoSigs or MBKillKludge;
If Email Then Begin
FileName := 'email';
Name := 'Electronic Mail';
Index := 0;
Flags := Flags or MBPrivate;
End;
End;
MBaseFile.Write(MBase);
End;
Begin
MBaseFile := TBufFile.Create(4096);
If Not MBaseFile.Open(Config.DataPath + 'mbases.dat', fmOpenCreate, fmReadWrite + fmDenyNone, SizeOf(RecMessageBase)) Then Begin
MBaseFile.Free;
Exit;
End;
Box := TAnsiMenuBox.Create;
List := TAnsiMenuList.Create;
List.NoWindow := True;
List.LoChars := #13#27#47;
List.AllowTag := True;
If MBaseFile.FileSize = 0 Then AssignRecord(True);
Box.Open (15, 5, 65, 21);
WriteXY (17, 6, 112, '##### Message Base Description');
WriteXY (16, 7, 112, strRep('Ä', 49));
WriteXY (16, 19, 112, strRep('Ä', 49));
WriteXY (29, 20, 112, cfgCommandList);
Repeat
MakeList;
List.Open (15, 7, 65, 19);
List.Close;
Case List.ExitCode of
'/' : Case GetCommandOption(10, 'I-Insert|D-Delete|C-Copy|P-Paste|') of
'I' : If List.Picked > 1 Then Begin
AssignRecord(False);
MakeList;
End;
'D' : If (List.Picked > 1) and (List.Picked < List.ListMax) Then
If ShowMsgBox(1, 'Delete this entry?') Then Begin
MBaseFile.Seek (List.Picked - 1);
MBaseFile.Read (MBase);
MBaseFile.RecordDelete (List.Picked);
If ShowMsgBox(1, 'Delete data files?') Then Begin
FileErase (MBase.Path + MBase.FileName + '.jhr');
FileErase (MBase.Path + MBase.FileName + '.jlr');
FileErase (MBase.Path + MBase.FileName + '.jdt');
FileErase (MBase.Path + MBase.FileName + '.jdx');
FileErase (MBase.Path + MBase.FileName + '.sqd');
FileErase (MBase.Path + MBase.FileName + '.sqi');
FileErase (MBase.Path + MBase.FileName + '.sql');
FileErase (MBase.Path + MBase.FileName + '.scn');
End;
MakeList;
End;
'C' : If List.Picked <> List.ListMax Then Begin
MBaseFile.Seek (List.Picked - 1);
MBaseFile.Read (Copied);
HasCopy := True;
End;
'P' : If HasCopy Then Begin
MBaseFile.RecordInsert (List.Picked);
MBaseFile.Write (Copied);
MakeList;
End;
End;
#13 : If List.Picked < List.ListMax Then Begin
MBaseFile.Seek (List.Picked - 1);
MBaseFile.Read (MBase);
EditMessageBase;
MBaseFile.Seek (List.Picked - 1);
MBaseFile.Write (MBase);
End;
#27 : Break;
End;
Until False;
Box.Close;
MBaseFile.Free;
List.Free;
Box.Free;
End;
End.

View File

@ -1434,21 +1434,6 @@ Var
Old : RecFileBase;
Str : String[5];
Compress : Boolean;
Function CheckPassword : Boolean;
Begin
CheckPassword := True;
If FBase.Password <> '' Then
If Not Session.io.GetPW(Session.GetPrompt(66), Session.GetPrompt(417), FBase.Password) Then Begin
Session.io.OutFullLn (Session.GetPrompt(67));
FBase := Old;
Close (FBaseFile);
CheckPassword := False;
Exit;
End;
End;
Begin
Old := FBase;
Compress := Config.FCompress;
@ -1472,7 +1457,6 @@ Begin
If IoResult <> 0 Then Break;
If Session.User.Access(FBase.ListACS) Then Begin
If Not CheckPassword Then Exit;
Session.User.ThisUser.LastFBase := FilePos(FBaseFile);
Close (FBaseFile);
Exit;
@ -1494,7 +1478,6 @@ Begin
Read (FBaseFile, FBase);
If Session.User.Access(FBase.ListACS) Then Begin
If Not CheckPassword Then Exit;
Session.User.ThisUser.LastFBase := FilePos(FBaseFile)
End Else
FBase := Old;
@ -1555,8 +1538,6 @@ Begin
End;
End;
If Not CheckPassword Then Exit;
Session.User.ThisUser.LastFBase := FilePos(FBaseFile);
Close (FBaseFile);

View File

@ -24,7 +24,7 @@ Type
TBBSIO = Class
Core : Pointer;
Term : TTermAnsi;
ScreenInfo : Array[0..9] of Record X, Y, A : Byte; End;
ScreenInfo : Array[0..9] of Record X, Y, A : Byte; End;
PromptInfo : Array[1..MaxPromptInfo] of String[89];
FmtString : Boolean;
FmtLen : Byte;
@ -265,8 +265,8 @@ Begin
Ch := OneKey('YNC' + #13, False);
OutBS(Screen.CursorX, True);
AnsiColor(SavedAttr);
OutBS (Screen.CursorX, True);
AnsiColor (SavedAttr);
PausePtr := 1;
AllowMCI := SavedMCI;
@ -345,7 +345,9 @@ End;
Procedure TBBSIO.OutRaw (Str: String);
Begin
If FmtString Then Begin
FmtString := False;
Case FmtType of
1 : Str := strPadR(Str, FmtLen, ' ');
2 : Str := strPadL(Str, FmtLen, ' ');
@ -1296,8 +1298,14 @@ Begin
Repeat
AnsiMoveX (X);
If Yes Then OutFull (TBBSCore(Core).GetPrompt(316)) Else OutFull (TBBSCore(Core).GetPrompt(317));
If Yes Then
OutFull (TBBSCore(Core).GetPrompt(316))
Else
OutFull (TBBSCore(Core).GetPrompt(317));
Ch := UpCase(GetKey);
If IsArrow Then Begin
If Ch = #77 Then Yes := False;
If Ch = #75 Then Yes := True;
@ -1306,14 +1314,18 @@ Begin
If Ch = #32 Then Yes := Not Yes Else
If Ch = 'Y' Then Begin
Yes := True;
AnsiMoveX(X);
OutFull (TBBSCore(Core).GetPrompt(316));
AnsiMoveX (X);
OutFull (TBBSCore(Core).GetPrompt(316));
Break;
End Else
If Ch = 'N' Then Begin
Yes := False;
AnsiMoveX (X);
OutFull (TBBSCore(Core).GetPrompt(317));
OutFull (TBBSCore(Core).GetPrompt(317));
Break;
End;
Until False;
@ -1321,7 +1333,7 @@ Begin
OutRawLn('');
AllowArrow := Temp;
GetYNL := Yes;
Result := Yes;
End;
Function TBBSIO.GetYN (Str: String; Yes: Boolean) : Boolean;
@ -1340,7 +1352,7 @@ Begin
OutFullLn (OutYN(Yes));
GetYN := Yes;
Result := Yes;
End;
Function TBBSIO.GetPW (Str: String; BadStr: String; PW: String) : Boolean;
@ -1404,7 +1416,7 @@ Function TBBSIO.GetInput (Field, Max, Mode: Byte; Default: String) : String;
Var
FieldCh : Char;
Ch : Char;
S : String;
Str : String;
StrPos : Integer;
xPos : Byte;
Junk : Integer;
@ -1415,7 +1427,7 @@ Var
Procedure pWrite (Str : String);
Begin
If (Mode = 6) and (S <> '') Then
If (Mode = 6) and (Str <> '') Then
BufAddStr (strRep(TBBSCore(Core).Lang.EchoCh, Length(Str)))
Else
BufAddStr (Str);
@ -1425,9 +1437,9 @@ Var
Begin
AnsiMoveX (xPos);
pWrite (Copy(S, Junk, Field));
pWrite (Copy(Str, Junk, Field));
If UseInField Then AnsiColor(TBBSCore(Core).Lang.FieldCol2);
pWrite (strRep(FieldCh, Field - Length(Copy(S, Junk, Field))));
pWrite (strRep(FieldCh, Field - Length(Copy(Str, Junk, Field))));
If UseInField Then AnsiColor(TBBSCore(Core).Lang.FieldCol1);
AnsiMoveX (xPos + CurPos - 1);
@ -1435,9 +1447,9 @@ Var
Procedure ReDrawPart;
Begin
pWrite (Copy(S, StrPos, Field - CurPos + 1));
pWrite (Copy(Str, StrPos, Field - CurPos + 1));
If UseInField Then AnsiColor(TBBSCore(Core).Lang.FieldCol2);
pWrite (strRep(FieldCh, (Field - CurPos + 1) - Length(Copy(S, StrPos, Field - CurPos + 1))));
pWrite (strRep(FieldCh, (Field - CurPos + 1) - Length(Copy(Str, StrPos, Field - CurPos + 1))));
If UseInField Then AnsiColor(TBBSCore(Core).Lang.FieldCol1);
AnsiMoveX (xPos + CurPos - 1);
@ -1446,7 +1458,7 @@ Var
Procedure ScrollRight;
Begin
Inc (Junk, Field DIV 2); {scroll size}
If Junk > Length(S) Then Junk := Length(S);
If Junk > Length(Str) Then Junk := Length(Str);
If Junk > Max Then Junk := Max;
CurPos := StrPos - Junk + 1;
ReDraw;
@ -1464,8 +1476,8 @@ Var
Begin
If CurPos > Field then ScrollRight;
Insert (Ch, S, StrPos);
If StrPos < Length(S) Then ReDrawPart;
Insert (Ch, Str, StrPos);
If StrPos < Length(Str) Then ReDrawPart;
Inc (StrPos);
Inc (CurPos);
@ -1496,6 +1508,7 @@ Begin
If UseInField and (Graphics = 1) Then Begin
FieldCh := TBBSCore(Core).Lang.FieldChar;
AnsiColor (TBBSCore(Core).Lang.FieldCol2);
BufAddStr (strRep(FieldCh, Field));
AnsiColor (TBBSCore(Core).Lang.FieldCol1);
@ -1517,12 +1530,15 @@ Begin
AllowArrow := (Mode in [1..3, 7..9]) and (Graphics > 0);
BackPos := 0;
S := Default;
StrPos := Length(S) + 1;
Junk := StrPos - Field;
Str := Default;
StrPos := Length(Str) + 1;
Junk := StrPos - Field;
If Junk < 1 Then Junk := 1;
CurPos := StrPos - Junk + 1;
pWrite (Copy(S, Junk, Field));
PWrite (Copy(Str, Junk, Field));
PurgeInputBuffer;
@ -1540,10 +1556,10 @@ Begin
#72 : If (BackPos < mysMaxInputHistory) And (BackPos < InputPos) Then Begin
Inc (BackPos);
If BackPos = 1 Then BackSaved := S;
If BackPos = 1 Then BackSaved := Str;
S := InputData[BackPos];
StrPos := Length(S) + 1;
Str := InputData[BackPos];
StrPos := Length(Str) + 1;
Junk := StrPos - Field;
If Junk < 1 Then Junk := 1;
CurPos := StrPos - Junk + 1;
@ -1556,14 +1572,14 @@ Begin
If CurPos < 1 then CurPos := 1;
AnsiMoveX (Screen.CursorX - 1);
End;
#77 : If StrPos < Length(S) + 1 Then Begin
If (CurPos = Field) and (StrPos < Length(S)) Then ScrollRight;
#77 : If StrPos < Length(Str) + 1 Then Begin
If (CurPos = Field) and (StrPos < Length(Str)) Then ScrollRight;
Inc (CurPos);
Inc (StrPos);
AnsiMoveX (Screen.CursorX + 1);
End;
#79 : Begin
StrPos := Length(S) + 1;
StrPos := Length(Str) + 1;
Junk := StrPos - Field;
If Junk < 1 Then Junk := 1;
CurPos := StrPos - Junk + 1;
@ -1573,18 +1589,18 @@ Begin
Dec (BackPos);
If BackPos = 0 Then
S := BackSaved
Str := BackSaved
Else
S := InputData[BackPos];
Str := InputData[BackPos];
StrPos := Length(S) + 1;
StrPos := Length(Str) + 1;
Junk := StrPos - Field;
If Junk < 1 Then Junk := 1;
CurPos := StrPos - Junk + 1;
ReDraw;
End;
#83 : If (StrPos <= Length(S)) and (Length(S) > 0) Then Begin
Delete(S, StrPos, 1);
#83 : If (StrPos <= Length(Str)) and (Length(Str) > 0) Then Begin
Delete(Str, StrPos, 1);
ReDrawPart;
End;
End;
@ -1593,12 +1609,12 @@ Begin
#02 : ReDraw;
#08 : If StrPos > 1 Then Begin
Dec (StrPos);
Delete (S, StrPos, 1);
Delete (Str, StrPos, 1);
If CurPos = 1 Then
ScrollLeft
Else
If StrPos = Length(S) + 1 Then Begin
If StrPos = Length(Str) + 1 Then Begin
If UseInField Then AnsiColor(TBBSCore(Core).Lang.FieldCol2);
BufAddStr (#8 + FieldCh + #8);
If UseInField Then AnsiColor(TBBSCore(Core).Lang.FieldCol1);
@ -1611,19 +1627,19 @@ Begin
End;
#13 : Break;
^Y : Begin
S := '';
Str := '';
StrPos := 1;
Junk := 1;
CurPos := 1;
ReDraw;
End;
#32..
#254: If Length(S) < Max Then
#254: If Length(Str) < Max Then
Case Mode of
1 : AddChar (Ch);
2 : AddChar (UpCase(Ch));
3 : Begin
If (CurPos = 1) or (S[StrPos-1] in [' ', '.']) Then
If (CurPos = 1) or (Str[StrPos-1] in [' ', '.']) Then
Ch := UpCase(Ch)
Else
Ch := LoCase(Ch);
@ -1667,7 +1683,7 @@ Begin
For Junk := 4 DownTo 2 Do
InputData[Junk] := InputData[Junk - 1];
InputData[1] := S;
InputData[1] := Str;
If InputPos < mysMaxInputHistory Then Inc(InputPos);
End;
@ -1680,15 +1696,15 @@ Begin
Case Mode of
5 : Case TBBSCore(Core).User.ThisUser.DateType of { Convert to MM/DD/YY }
{DD/MM/YY}
2 : S := Copy(S, 4, 2) + '/' + Copy(S, 1, 2) + '/' + Copy(S, 7, 2);
2 : Str := Copy(Str, 4, 2) + '/' + Copy(Str, 1, 2) + '/' + Copy(Str, 7, 2);
{YY/DD/MM}
3 : S := Copy(S, 7, 2) + '/' + Copy(S, 4, 2) + '/' + Copy(S, 1, 2);
3 : Str := Copy(Str, 7, 2) + '/' + Copy(Str, 4, 2) + '/' + Copy(Str, 1, 2);
End;
End;
UseInField := True;
AllowArrow := ArrowSave;
GetInput := S;
Result := Str;
End;
Function TBBSIO.InXY (X, Y, Field, Max, Mode: Byte; Default: String) : String;

View File

@ -320,7 +320,7 @@ Begin
'F' : Configuration_ExecuteEditor('F');
'G' : Configuration_ExecuteEditor('G');
'L' : Levels_Editor;
'M' : Message_Base_Editor;
'M' : Configuration_ExecuteEditor('B');
'P' : Configuration_ExecuteEditor('P');
'S' : Configuration_MainMenu;
'U' : User_Editor(False, False);

View File

@ -15,13 +15,13 @@ Uses
Type
TMsgBase = Class
MBaseFile : File of MBaseRec;
MBaseFile : File of RecMessageBase;
MScanFile : File of MScanRec;
GroupFile : File of RecGroup;
TotalMsgs : Integer;
TotalConf : Integer;
MsgBase : PMsgBaseABS;
MBase : MBaseRec;
MBase : RecMessageBase;
MScan : MScanRec;
Group : RecGroup;
MsgText : RecMessageText;
@ -31,12 +31,12 @@ Type
Constructor Create (Var Owner: Pointer);
Destructor Destroy; Override;
Function OpenCreateBase (Var Msg: PMsgBaseABS; Var Area: MBaseRec) : Boolean;
Function OpenCreateBase (Var Msg: PMsgBaseABS; Var Area: RecMessageBase) : Boolean;
Procedure AppendMessageText (Var Msg: PMsgBaseABS; Lines: Integer; ReplyID: String);
Procedure AssignMessageData (Var Msg: PMsgBaseABS);
Function GetTotalMessages (Var TempBase: MBaseRec) : LongInt;
Function GetTotalMessages (Var TempBase: RecMessageBase) : LongInt;
Procedure PostTextFile (Data: String; AllowCodes: Boolean);
Function SaveMessage (mArea: MBaseRec; mFrom, mTo, mSubj: String; mAddr: RecEchoMailAddr; mLines: Integer) : Boolean;
Function SaveMessage (mArea: RecMessageBase; mFrom, mTo, mSubj: String; mAddr: RecEchoMailAddr; mLines: Integer) : Boolean;
Function ListAreas (Compress: Boolean) : Integer;
Procedure ChangeArea (Data: String);
Procedure SetMessageScan;
@ -58,7 +58,7 @@ Type
Procedure UploadREP;
Procedure WriteCONTROLDAT;
Function WriteMSGDAT : LongInt;
Function ResolveOrigin (var mArea: MBaseRec) : String;
Function ResolveOrigin (var mArea: RecMessageBase) : String;
End;
Implementation
@ -110,7 +110,7 @@ Begin
Inherited Destroy;
End;
Function TMsgBase.OpenCreateBase (Var Msg: PMsgBaseABS; Var Area: MBaseRec) : Boolean;
Function TMsgBase.OpenCreateBase (Var Msg: PMsgBaseABS; Var Area: RecMessageBase) : Boolean;
Begin
Result := False;
@ -135,7 +135,7 @@ Begin
Result := True;
End;
Function TMsgBase.GetTotalMessages (Var TempBase: MBaseRec) : LongInt;
Function TMsgBase.GetTotalMessages (Var TempBase: RecMessageBase) : LongInt;
Var
TempMsg : PMsgBaseABS;
Begin
@ -241,7 +241,7 @@ Var
Begin
Msg^.StartNewMsg;
If MBase.UseReal Then
If MBase.Flags And MBRealNames <> 0 Then
Msg^.SetFrom(Session.User.ThisUser.RealName)
Else
Msg^.SetFrom(Session.User.ThisUser.Handle);
@ -279,33 +279,18 @@ Begin
End Else
Msg^.SetMailType(mmtNormal);
Msg^.SetPriv(MBase.PostType = 1);
Msg^.SetDate(DateDos2Str(CurDateDos, 1));
Msg^.SetTime(TimeDos2Str(CurDateDos, False));
Msg^.SetPriv (MBase.Flags and MBPrivate <> 0);
Msg^.SetDate (DateDos2Str(CurDateDos, 1));
Msg^.SetTime (TimeDos2Str(CurDateDos, False));
End;
Procedure TMsgBase.ChangeArea (Data: String);
Var
A,
Total : Word;
Old : MBaseRec;
Old : RecMessageBase;
Str : String[5];
Compress : Boolean;
Function CheckPassword : Boolean;
Begin
CheckPassword := True;
If MBase.Password <> '' Then
If Not Session.io.GetPW(Session.GetPrompt(103), Session.GetPrompt(417), MBase.Password) Then Begin
Session.io.OutFullLn (Session.GetPrompt(67));
MBase := Old;
Close (MBaseFile);
CheckPassword := False;
Exit;
End;
End;
Begin
Compress := Config.MCompress;
Old := MBase;
@ -328,8 +313,7 @@ Begin
If IoResult <> 0 Then Break;
If Session.User.Access(MBase.ACS) Then Begin
If Not CheckPassword Then Break;
If Session.User.Access(MBase.ListACS) Then Begin
Session.User.ThisUser.LastMBase := FilePos(MBaseFile);
Close (MBaseFile);
Exit;
@ -349,8 +333,7 @@ Begin
If A <= FileSize(MBaseFile) Then Begin
Seek (MBaseFile, A-1);
Read (MBaseFile, MBase);
If Session.User.Access(MBase.ACS) Then Begin
If Not CheckPassword Then Exit;
If Session.User.Access(MBase.ListACS) Then Begin
Session.User.ThisUser.LastMBase := FilePos(MBaseFile)
End Else
MBase := Old;
@ -389,7 +372,7 @@ Begin
If Not Compress Then Begin
Seek (MBaseFile, A - 1);
Read (MBaseFile, MBase);
If Not Session.User.Access(MBase.ACS) Then Begin
If Not Session.User.Access(MBase.ListACS) Then Begin
MBase := Old;
Close (MBaseFile);
Exit;
@ -399,7 +382,7 @@ Begin
While Not Eof(MBaseFile) And (A <> Total) Do Begin
Read (MBaseFile, MBase);
If Session.User.Access(MBase.ACS) Then Inc(Total);
If Session.User.Access(MBase.ListACS) Then Inc(Total);
End;
If A <> Total Then Begin
@ -409,8 +392,6 @@ Begin
End;
End;
If Not CheckPassword Then Exit;
Session.User.ThisUser.LastMBase := FilePos(MBaseFile);
Close (MBaseFile);
@ -442,7 +423,7 @@ Var
While Not Eof(MBaseFile) Do Begin
Read (MBaseFile, MBase);
If Session.User.Access(MBase.ACS) Then Begin
If Session.User.Access(MBase.ListACS) Then Begin
Inc (Total);
Session.io.PromptInfo[1] := strI2S(Total);
@ -482,7 +463,7 @@ Var
Repeat
Read (MBaseFile, MBase);
If Session.User.Access(MBase.ACS) Then Inc(B);
If Session.User.Access(MBase.ListACS) Then Inc(B);
If A = B Then Break;
Until False;
@ -520,7 +501,7 @@ Var
End;
Var
Old : MBaseRec;
Old : RecMessageBase;
Temp : String[11];
A : Word;
N1 : Word;
@ -565,7 +546,7 @@ Var
A : Word;
Total : Word;
tGroup : RecGroup;
tMBase : MBaseRec;
tMBase : RecMessageBase;
tLast : Word;
Areas : Word;
Data : Word;
@ -661,7 +642,7 @@ Begin
Read (MBaseFile, tMBase); { Skip EMAIL base }
While Not Eof(MBaseFile) Do Begin
Read (MBaseFile, tMBase);
If Session.User.Access(tMBase.ACS) Then Inc(Areas);
If Session.User.Access(tMBase.ListACS) Then Inc(Areas);
End;
Close (MBaseFile);
End;
@ -720,7 +701,7 @@ Function TMsgBase.ListAreas (Compress: Boolean) : Integer;
Var
Total : Word = 0;
Listed : Word = 0;
TempBase : MBaseRec;
TempBase : RecMessageBase;
Begin
Reset (MBaseFile);
@ -730,7 +711,7 @@ Begin
While Not Eof(MBaseFile) Do Begin
Read (MBaseFile, TempBase);
If Session.User.Access(TempBase.ACS) Then Begin
If Session.User.Access(TempBase.ListACS) Then Begin
Inc (Listed);
If Listed = 1 Then
@ -983,9 +964,10 @@ Begin
MsgBase^.SetDest(DestAddr)
End;
End Else
If MBase.PostType = 1 Then Begin
If MBase.Flags And MBPrivate <> 0 Then Begin
Temp1 := Session.io.GetInput (30, 30, 11, MsgBase^.GetTo);
If Session.User.SearchUser(Temp1, MBase.UseReal) Then
If Session.User.SearchUser(Temp1, MBase.Flags and MBRealNames <> 0) Then
MsgBase^.SetTo(Temp1);
End Else
MsgBase^.SetTo(Session.io.GetInput(30, 30, 11, MsgBase^.GetTo));
@ -1095,7 +1077,7 @@ Var
Var
MsgNew : PMsgBaseABS;
Str : String;
TempBase : MBaseRec;
TempBase : RecMessageBase;
Area : Integer;
Addr : RecEchoMailAddr;
Begin
@ -2222,7 +2204,7 @@ Begin
If Mode = 'E' Then
ScanMode := 1
Else
If (MBase.PostType = 1) or (Mode = 'Y') or (Mode = 'P') Then
If (MBase.Flags and MBPrivate <> 0) or (Mode = 'Y') or (Mode = 'P') Then
ScanMode := 2
Else
If (Mode = 'S') or (Mode = 'T') Then
@ -2298,7 +2280,7 @@ Var
A : Integer;
Lines : Integer;
Forced : Boolean;
Old : MBaseRec;
Old : RecMessageBase;
Begin
Old := MBase;
@ -2358,11 +2340,11 @@ Begin
If Not strStr2Addr(MsgAddr, DestAddr) Then MsgTo := '';
End;
End Else
If MBase.PostType = 1 Then Begin { if the base is flagged private }
If MBase.Flags and MBPrivate <> 0 Then Begin
If MsgTo = '' Then Begin
Session.io.OutFull (Session.GetPrompt(450));
MsgTo := Session.io.GetInput (30, 30, 18, '');
If Not Session.User.SearchUser(MsgTo, MBase.UseReal) Then MsgTo := '';
If Not Session.User.SearchUser(MsgTo, MBase.Flags and MBRealNames <> 0) Then MsgTo := '';
End Else
If strUpper(MsgTo) = 'SYSOP' Then MsgTo := Config.SysopName;
@ -2466,7 +2448,7 @@ End;
Procedure TMsgBase.CheckEMail;
Var
Old : MBaseRec;
Old : RecMessageBase;
Total : Integer;
Begin
Session.io.OutFull (Session.GetPrompt(123));
@ -2589,7 +2571,7 @@ Begin
Session.io.OutFullLn (Session.GetPrompt(460));
If Global Then Begin
ioReset (MBaseFile, SizeOf(MBaseRec), fmRWDN);
ioReset (MBaseFile, SizeOf(RecMessageBase), fmRWDN);
ioRead (MBaseFile, MBase);
While Not Eof(MBaseFile) Do Begin
@ -2606,7 +2588,7 @@ Procedure TMsgBase.MessageNewScan (Data : String);
{ /M : scan only mandatory bases }
{ /G : scan all bases in all groups }
Var
Old : MBaseRec;
Old : RecMessageBase;
Mode : Char;
Mand : Boolean;
Begin
@ -2669,7 +2651,7 @@ Procedure TMsgBase.GlobalMessageSearch (Mode : Char);
{ A = all areas in all groups }
Var
SearchStr : String;
Old : MBaseRec;
Old : RecMessageBase;
Begin
If Not (Mode in ['A', 'C', 'G']) Then Mode := 'G';
@ -2728,7 +2710,7 @@ Var
MsgTo : String[30];
MsgSubj : String[60];
Lines : Integer;
Old : MBaseRec;
Old : RecMessageBase;
OldUser : RecUser;
Procedure Write_Mass_Msg;
@ -2789,7 +2771,7 @@ Begin
Session.io.OutFull (Session.GetPrompt(390));
Str := Session.io.GetInput (30, 30, 18, '');
If Str <> '' Then Begin
If Session.User.SearchUser(Str, MBase.UseReal) Then Begin
If Session.User.SearchUser(Str, MBase.Flags And MBRealNames <> 0) Then Begin
Inc (NamePos);
Names[NamePos] := Str;
End;
@ -2890,7 +2872,7 @@ End;
Procedure TMsgBase.ViewSentEmail;
Var
Old : MBaseRec;
Old : RecMessageBase;
Begin
Old := MBase;
@ -3119,7 +3101,7 @@ End;
Procedure TMsgBase.UploadREP;
Var
DataFile : File;
OldMBase : MBaseRec;
OldMBase : RecMessageBase;
QwkHdr : QwkDATHdr;
Temp : String[128];
A : SmallInt;
@ -3238,7 +3220,7 @@ Type
Pos : LongInt;
End;
Var
Old : MBaseRec;
Old : RecMessageBase;
DataFile : File;
Temp : String;
QwkLR : QwkLRRec;
@ -3459,7 +3441,7 @@ Begin
End;
*)
Function TMsgBase.SaveMessage (mArea: MBaseRec; mFrom, mTo, mSubj: String; mAddr: RecEchoMailAddr; mLines: Integer) : Boolean;
Function TMsgBase.SaveMessage (mArea: RecMessageBase; mFrom, mTo, mSubj: String; mAddr: RecEchoMailAddr; mLines: Integer) : Boolean;
Var
SemFile : File;
Count : SmallInt;
@ -3498,7 +3480,7 @@ Begin
End Else
Msg^.SetMailType (mmtNormal);
Msg^.SetPriv (mArea.PostType = 1);
Msg^.SetPriv (mArea.Flags And MBPrivate <> 0);
Msg^.SetDate (DateDos2Str(CurDateDos, 1));
Msg^.SetTime (TimeDos2Str(CurDateDos, False));
Msg^.SetFrom (mFrom);
@ -3541,7 +3523,7 @@ Var
Pages : Integer;
Count : Integer;
Offset : Integer;
TempBase : MBaseRec;
TempBase : RecMessageBase;
Begin
mName := strWordGet(1, Data, ';');
mArea := strS2I(strWordGet(2, Data, ';'));
@ -3562,7 +3544,7 @@ Begin
End;
Assign (MBaseFile, Config.DataPath + 'mbases.dat');
ioReset (MBaseFile, SizeOf(MBaseRec), fmReadWrite + fmDenyNone);
ioReset (MBaseFile, SizeOf(RecMessageBase), fmReadWrite + fmDenyNone);
If Not ioSeek (MBaseFile, mArea) Then Begin
Close (MBaseFile);
@ -3624,7 +3606,7 @@ Begin
End;
End;
Function TMsgBase.ResolveOrigin (Var mArea: MBaseRec) : String;
Function TMsgBase.ResolveOrigin (Var mArea: RecMessageBase) : String;
Var
Loc : Byte;
FN : String;

View File

@ -149,8 +149,8 @@
063 |CR|12Cannot download files in local mode!|DE|DE|DE
064 |01[|10þ|01] |09Search all file groups? |11
065 |CR|12Start your transfer now.
066 |CR|14File area "|FB" is password protected.|CR|09Password:
067 |CR|12Access denied.
066 UNUSED
067 UNUSED
068 |CR|12You do not have access to upload here!
069 |CR|12Illegal filename.|DE|DE|DE
070 |CR|14Searching for duplicate files ...
@ -203,8 +203,8 @@
; &1 = base number &2 = base name &3 = total messages
101 |15|$L05|&1 |07|$R32|&2
102 |09|$D77Ä |CR |09Select Message Base |01[|10?|01/|10List|01]|09:
103 |CR|14Message area "|MB" is password protected.|CR|09Password:
104 Access denied.
103 UNUSED
104 UNUSED
105 |CR|12You don't have access to post here!
106 |CR|12Use the full screen editor? |11
107 |01[|10þ|01] |09Saving Message|01...
@ -594,8 +594,7 @@
313 |12Your download ratio would be exceeded.|PN
; Lightbar file list: Batch queue is full.
314 |12Your batch queue is full.|PN
; Node login ACS failed
315 |CR|14You do not have access to call this node.
315 UNUSED
; Lightbar Y/N: YES text
316 |08++(|23|00 yes |16|08/ |07no |08)++
; Lightbar Y/N: NO text

View File

@ -392,11 +392,11 @@ End;
Procedure UpdateDataFiles;
Var
CfgFile : File of RecConfig;
MBaseFile : File of MBaseRec;
MBaseFile : File of RecMessageBase;
FBaseFile : File of RecFileBase;
LangFile : File of LangRec;
Cfg : RecConfig;
MBase : MBaseRec;
MBase : RecMessageBase;
FBase : RecFileBase;
TLang : LangRec;
TF : Text;

View File

@ -644,8 +644,8 @@ Var
UserFile : File of RecUser;
TUserFile : File of RecUser;
User : RecUser;
MBaseFile : File of MBaseRec;
MBase : MBaseRec;
MBaseFile : File of RecMessageBase;
MBase : RecMessageBase;
MScanFile : File of MScanRec;
MScan : MScanRec;
FBaseFile : File of RecFileBase;
@ -688,7 +688,7 @@ Begin
While Not Eof(MBaseFile) Do Begin
Read (MBaseFile, MBase);
If MBase.PostType <> 1 Then Continue;
If MBase.Flags And MBPrivate = 0 Then Continue;
Case MBase.BaseType of
0 : MsgBase := New(PMsgBaseJAM, Init);
@ -852,8 +852,8 @@ Procedure MsgBase_Trash;
Var
TF : Text;
BadName : String;
MBaseFile : File of MBaseRec;
MBase : MBaseRec;
MBaseFile : File of RecMessageBase;
MBase : RecMessageBase;
MsgBase : PMsgBaseABS;
Begin
Write ('Trashing Messages :');

View File

@ -156,8 +156,8 @@ End;
Procedure TPOP3Server.CreateMailBoxData;
Var
MBaseFile : File of MBaseRec;
MBase : MBaseRec;
MBaseFile : File of RecMessageBase;
MBase : RecMessageBase;
MsgBase : PMsgBaseABS;
Function ParseDateTime (Date, Time : String) : String;
@ -176,7 +176,7 @@ Var
Begin
Assign (MBaseFile, bbsConfig.DataPath + 'mbases.dat');
If Not ioReset(MBaseFile, SizeOf(MBaseRec), fmRWDN) Then Exit;
If Not ioReset(MBaseFile, SizeOf(RecMessageBase), fmRWDN) Then Exit;
ioRead (MBaseFile, MBase);
Close (MBaseFile);
@ -231,13 +231,13 @@ End;
Procedure TPOP3Server.DeleteMessages;
Var
Count : LongInt;
MBaseFile : File of MBaseRec;
MBase : MBaseRec;
MBaseFile : File of RecMessageBase;
MBase : RecMessageBase;
MsgBase : PMsgBaseABS;
Begin
Assign (MBaseFile, bbsConfig.DataPath + 'mbases.dat');
If Not ioReset(MBaseFile, SizeOf(MBaseRec), fmRWDN) Then Exit;
If Not ioReset(MBaseFile, SizeOf(RecMessageBase), fmRWDN) Then Exit;
ioRead (MBaseFile, MBase);
Close (MBaseFile);

View File

@ -152,8 +152,8 @@ Procedure TSMTPServer.cmdDATA;
Var
InData : String;
HackCount : LongInt;
MBaseFile : File of MBaseRec;
MBase : MBaseRec;
MBaseFile : File of RecMessageBase;
MBase : RecMessageBase;
MsgBase : PMsgBaseABS;
MsgText : TStringList;
MsgSubject : String;
@ -205,7 +205,7 @@ Begin
Until False;
Assign (MBaseFile, bbsConfig.DataPath + 'mbases.dat');
ioReset (MBaseFile, SizeOf(MBaseRec), fmRWDN);
ioReset (MBaseFile, SizeOf(RecMessageBase), fmRWDN);
ioRead (MBaseFile, MBase);
Close (MBaseFile);

View File

@ -86,7 +86,7 @@ Type
Procedure GetUserVars (Var U: RecUser);
Function GetUserRecord (Num: LongInt) : Boolean;
Procedure GetMBaseVars (Var M: MBaseRec);
Procedure GetMBaseVars (Var M: RecMessageBase);
Function GetMBaseRecord (Num: LongInt) : Boolean;
Procedure GetMGroupVars (Var G: RecGroup);
Function GetMGroupRecord (Num: LongInt) : Boolean;
@ -150,11 +150,11 @@ Begin
Close (F);
End;
Procedure TInterpEngine.GetMBaseVars (Var M: MBaseRec);
Procedure TInterpEngine.GetMBaseVars (Var M: RecMessageBase);
Begin
Move (M.Index, VarData[IdxVarMBase ]^.Data^, SizeOf(M.Index));
Move (M.Name, VarData[IdxVarMBase + 1 ]^.Data^, SizeOf(M.Name));
Move (M.ACS, VarData[IdxVarMBase + 2 ]^.Data^, SizeOf(M.ACS));
Move (M.ListACS, VarData[IdxVarMBase + 2 ]^.Data^, SizeOf(M.ListACS));
Move (M.ReadACS, VarData[IdxVarMBase + 3 ]^.Data^, SizeOf(M.ReadACS));
Move (M.PostACS, VarData[IdxVarMBase + 4 ]^.Data^, SizeOf(M.PostACS));
Move (M.SysopACS, VarData[IdxVarMBase + 5 ]^.Data^, SizeOf(M.SysopACS));
@ -163,12 +163,12 @@ End;
Function TInterpEngine.GetMBaseRecord (Num: LongInt) : Boolean;
Var
F : File;
M : MBaseRec;
M : RecMessageBase;
Begin
Result := False;
Assign (F, Config.DataPath + 'mbases.dat');
If Not ioReset(F, SizeOf(MBaseRec), fmRWDN) Then Exit;
If Not ioReset(F, SizeOf(RecMessageBase), fmRWDN) Then Exit;
If ioSeek(F, Num) And (ioRead(F, M)) Then Begin
GetMBaseVars(M);

View File

@ -44,6 +44,7 @@ Uses
Procedure InitClasses;
Begin
Assign (ConfigFile, 'mystic.dat');
if ioReset(ConfigFile, SizeOf(RecConfig), fmReadWrite + fmDenyNone) Then Begin
Read (ConfigFile, Config);
Close (ConfigFile);
@ -80,12 +81,7 @@ Begin
ExitProc := ExitSave;
If ErrorAddr <> NIL Then Begin
Session.io.OutFull('|CR|12System Error #' + strI2S(ExitCode));
Session.SystemLog ('ERROR #' + strI2S(ExitCode));
ExitCode := 1;
End;
If ErrorAddr <> NIL Then ExitCode := 1;
If Session.User.UserNum <> -1 Then Begin
Session.User.ThisUser.LastOn := CurDateDos;
@ -204,24 +200,46 @@ Procedure CheckPathsAndDataFiles;
Var
Count : Byte;
PR : PercentRec;
MBase : MBaseRec;
Begin
If Not Session.ConfigMode Then Begin
CheckDIR (Config.SystemPath);
CheckDIR (Config.AttachPath);
CheckDIR (Config.DataPath);
CheckDIR (Config.MsgsPath);
CheckDIR (Config.SemaPath);
CheckDIR (Config.QwkPath);
CheckDIR (Config.ScriptPath);
CheckDIR (Config.LogsPath);
End;
Randomize;
Session.TempPath := Config.SystemPath + 'temp' + strI2S(Session.NodeNum) + PathChar;
{$I-}
MkDir (Config.SystemPath + 'temp' + strI2S(Session.NodeNum));
If IoResult <> 0 Then;
{$I+}
DirClean(Session.TempPath, '');
Assign (Session.LangFile, Config.DataPath + 'language.dat');
{$I-} Reset (Session.LangFile); {$I+}
If IoResult <> 0 Then Begin
Screen.WriteLine ('ERROR: No theme configuration. Use MYSTIC -CFG');
DisposeClasses;
Halt(1);
End;
Close (Session.LangFile);
If Not Session.LoadThemeData(Config.DefThemeFile) Then Begin
If Not Session.ConfigMode Then Begin
Screen.WriteLine ('ERROR: Default theme prompts not found [' + Config.DefThemeFile + '.lng]');
DisposeClasses;
Halt(1);
End;
End;
If Session.ConfigMode Then Exit;
CheckDIR (Config.SystemPath);
CheckDIR (Config.AttachPath);
CheckDIR (Config.DataPath);
CheckDIR (Config.MsgsPath);
CheckDIR (Config.SemaPath);
CheckDIR (Config.QwkPath);
CheckDIR (Config.ScriptPath);
CheckDIR (Config.LogsPath);
Assign (RoomFile, Config.DataPath + 'chatroom.dat');
{$I-} Reset (RoomFile); {$I+}
If IoResult <> 0 Then Begin
@ -232,52 +250,6 @@ Begin
End;
Close (RoomFile);
Assign (Session.LangFile, Config.DataPath + 'language.dat');
{$I-} Reset (Session.LangFile); {$I+}
If IoResult <> 0 Then Begin
Session.Lang.Desc := 'Default';
Session.Lang.FileName := 'default';
Session.Lang.TextPath := Config.SystemPath + 'text' + PathChar;
Session.Lang.MenuPath := Config.SystemPath + 'menus' + PathChar;
Session.Lang.BarYN := True;
Session.Lang.FieldCol1 := 31;
Session.Lang.FieldCol2 := 25;
Session.Lang.FieldChar := ' ';
Session.Lang.QuoteColor := 31;
Session.Lang.EchoCh := '*';
Session.Lang.TagCh := 'û';
Session.Lang.okASCII := True;
Session.Lang.okANSI := True;
Session.Lang.FileHi := 112;
Session.Lang.FileLo := 11;
Session.Lang.NewMsgChar := 'N';
PR.BarLen := 15;
PR.LoChar := '°';
PR.LoAttr := 8;
PR.HiChar := 'Û';
PR.HiAttr := 9;
Session.Lang.VotingBar := PR;
Session.Lang.FileBar := PR;
Session.Lang.MsgBar := PR;
Session.Lang.GalleryBar := PR;
ReWrite (Session.LangFile);
Write (Session.LangFile, Session.Lang);
End;
Close (Session.LangFile);
If Not Session.LoadThemeData(Config.DefThemeFile) Then Begin
If Not Session.ConfigMode Then Begin
Screen.WriteLine ('ERROR: Default theme prompts not found [' + Config.DefThemeFile + '.lng]');
DisposeClasses;
Halt(1);
End;
End;
Assign (Session.User.UserFile, Config.DataPath + 'users.dat');
{$I-} Reset (Session.User.UserFile); {$I+}
If IoResult <> 0 Then Begin
@ -299,35 +271,9 @@ Begin
Assign (Session.Msgs.MBaseFile, Config.DataPath + 'mbases.dat');
{$I-} Reset(Session.Msgs.MBaseFile); {$I+}
If IoResult <> 0 Then Begin
ReWrite (Session.Msgs.MBaseFile);
MBase.Name := 'E-mail';
MBase.QWKName := 'Email';
MBase.FileName := 'email';
MBase.Path := Config.MsgsPath;
MBase.BaseType := 0;
MBase.NetType := 0;
MBase.PostType := 1;
MBase.ACS := '%';
MBase.ReadACS := '';
MBase.PostACS := '';
MBase.SysopACS := 's255';
MBase.Password := '';
MBase.ColQuote := Config.ColorQuote;
MBase.ColText := Config.ColorText;
MBase.ColTear := Config.ColorTear;
MBase.ColOrigin := Config.ColorOrigin;
MBase.NetAddr := 1;
MBase.Origin := Config.Origin;
MBase.UseReal := False;
MBase.DefNScan := 1;
MBase.DefQScan := 1;
MBase.MaxMsgs := 0;
MBase.MaxAge := 0;
MBase.Header := '';
MBase.Index := 1;
Write (Session.Msgs.MBaseFile, MBase);
Screen.WriteLine ('ERROR: No message base configuration. Use MYSTIC -CFG');
DisposeClasses;
Halt(1);
End;
Close (Session.Msgs.MBaseFile);
@ -370,14 +316,6 @@ Begin
{$I-} Reset (Session.FileBase.ProtocolFile); {$I+}
If IoResult <> 0 Then ReWrite (Session.FileBase.ProtocolFile);
Close (Session.FileBase.ProtocolFile);
Session.FindNextEvent;
Session.TempPath := Config.SystemPath + 'temp' + strI2S(Session.NodeNum) + PathChar;
DirClean(Session.TempPath, '');
Randomize;
End;
Var
@ -471,6 +409,8 @@ Begin
Halt(0);
End;
Session.FindNextEvent;
Session.SystemLog ('Node ' + strI2S(Session.NodeNum) + ' online');
If Session.TimeOffset > 0 Then

View File

@ -122,9 +122,9 @@ Const
Var
ConfigFile : File of RecConfig;
MBaseFile : File of MBaseRec;
MBaseFile : File of RecMessageBase;
Config : RecConfig;
MBase : MBaseRec;
MBase : RecMessageBase;
Const
DATEC1970 = 2440588;

View File

@ -253,17 +253,6 @@ Const
//FUTURE DATA FILE UPDATES NEEDED
//LASTON needs optional1-10 compare to Mystic2
//MBASES
// expand header filename[20]
// add template[20]
// add msgbase sponser[30]
// add newsname[60]
// 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)
@ -274,13 +263,6 @@ Const
// (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
// help percent bar
// horizontal/vertical percent bars
Type
RecUser = Record { USERS.DAT }
@ -408,33 +390,47 @@ Type
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 }
Const
MBRealNames = $00000001;
MBKillKludge = $00000002;
MBAutosigs = $00000004;
MBNoAttach = $00000008;
MBPrivate = $00000010;
MBCrossPost = $00000020;
Type
RecMessageBase = Record
Name : String[40];
QWKName : String[13];
NewsName : String[60];
FileName : String[40];
Path : String[mysMaxPathSize];
BaseType : Byte;
NetType : Byte;
ReadType : Byte;
ListType : Byte;
ListACS : String[mysMaxAcsSize];
ReadACS : String[mysMaxAcsSize];
PostACS : String[mysMaxAcsSize];
SysopACS : String[mysMaxAcsSize];
Sponsor : String[30];
ColQuote : Byte;
ColText : Byte;
ColTear : Byte;
ColOrigin : Byte;
ColKludge : Byte;
NetAddr : Byte; { Net AKA to use for this base }
Origin : String[50]; { Net origin line for this base }
DefNScan : Byte; { 0 = off, 1 = on, 2 = always }
DefQScan : Byte; { 0 = off, 1 = on, 2 = always }
MaxMsgs : Word;
MaxAge : Word;
Header : String[20];
RTemplate : String[20];
ITemplate : String[20];
Index : Word;
Flags : LongInt;
Res : Array[1..110] of Byte;
End;
FScanRec = Record { <Data Path> *.SCN }
@ -462,7 +458,6 @@ Type
CommentACS : String[30];
SysOpACS : String[30];
Path : String[80];
Password : String[15];
DefScan : Byte;
Flags : LongInt;
Res : Array[1..36] of Byte;
@ -549,6 +544,15 @@ Type
LHText : String[79];
End;
RecPercent = Record
BarLength : Byte;
LoChar : Char;
LoAttr : Byte;
HiChar : Char;
HiAttr : Byte;
Format : Byte;
End;
PercentRec = Record // percentage bar record
BarLen : Byte;
LoChar : Char;
@ -557,6 +561,37 @@ Type
HiAttr : Byte;
End;
Const
ThmAllowASCII = $00000001;
ThmAllowANSI = $00000002;
ThmLightbarYN = $00000004;
ThmFallback = $00000008;
Type
RecTheme = Record
FileName : String[20];
Desc : String[40];
TextPath : String[mysMaxPathSize];
MenuPath : String[mysMaxPathSize];
ScriptPath : String[mysMaxPathSize];
TemplatePath : String[mysMaxPathSize];
Flags : LongInt;
FieldCol1 : Byte;
FieldCol2 : Byte;
FieldChar : Char;
EchoCh : Char;
QuoteColor : Byte;
TagCh : Char;
FileHi : Byte;
FileLo : Byte;
NewMsgChar : Char;
VotingBar : RecPercent;
FileBar : RecPercent;
MsgBar : RecPercent;
GalleryBar : RecPercent;
HelpBar : RecPercent;
End;
LangRec = Record { LANGUAGE.DAT }
FileName : String[8]; { Language file name }
Desc : String[30]; { Language description }