267 lines
9.7 KiB
ObjectPascal
267 lines
9.7 KiB
ObjectPascal
Unit bbs_cfg_MsgBase;
|
||
|
||
{$I M_OPS.PAS}
|
||
|
||
Interface
|
||
|
||
Procedure Configuration_MessageBaseEditor;
|
||
|
||
Implementation
|
||
|
||
Uses
|
||
m_Strings,
|
||
m_FileIO,
|
||
bbs_Ansi_MenuBox,
|
||
bbs_Ansi_MenuForm,
|
||
bbs_Cfg_Common,
|
||
bbs_Cfg_SysCfg,
|
||
bbs_Common;
|
||
|
||
Procedure EditMessageBase (Var MBase: RecMessageBase);
|
||
Var
|
||
Box : TAnsiMenuBox;
|
||
Form : TAnsiMenuForm;
|
||
Topic : String;
|
||
Begin
|
||
Topic := '|03(|09Message Base Edit|03) |01-|09> |15';
|
||
Box := TAnsiMenuBox.Create;
|
||
Form := TAnsiMenuForm.Create;
|
||
|
||
Box.Header := ' Index ' + strI2S(MBase.Index) + ' ';
|
||
|
||
Box.Open (3, 5, 77, 21);
|
||
|
||
VerticalLine (17, 6, 20);
|
||
VerticalLine (66, 6, 20);
|
||
|
||
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');
|
||
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');
|
||
|
||
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');
|
||
|
||
Repeat
|
||
WriteXY (19, 15, 113, strPadR(strAddr2Str(Config.NetAddress[MBase.NetAddr]), 19, ' '));
|
||
|
||
Case Form.Execute of
|
||
'D' : MBase.NetAddr := Configuration_EchoMailAddress(False);
|
||
#27 : Break;
|
||
End;
|
||
Until False;
|
||
|
||
MBase.NewsName := strReplace(MBase.NewsName, ' ', '.');
|
||
|
||
Box.Close;
|
||
|
||
Form.Free;
|
||
Box.Free;
|
||
End;
|
||
|
||
Procedure Configuration_MessageBaseEditor;
|
||
Var
|
||
Box : TAnsiMenuBox;
|
||
List : TAnsiMenuList;
|
||
MIndex : LongInt;
|
||
Copied : RecMessageBase;
|
||
HasCopy : Boolean = False;
|
||
MBaseFile : TBufFile;
|
||
MBase : RecMessageBase;
|
||
|
||
Procedure GlobalEdit;
|
||
Begin
|
||
End;
|
||
|
||
Procedure MakeList;
|
||
Var
|
||
Tag : Byte;
|
||
Begin
|
||
List.Clear;
|
||
|
||
MBaseFile.Reset;
|
||
|
||
While Not MBaseFile.EOF Do Begin
|
||
If MBaseFile.FilePos = 0 Then Tag := 2 Else Tag := 0;
|
||
|
||
MBaseFile.Read (MBase);
|
||
|
||
List.Add(strPadR(strI2S(MBaseFile.FilePos - 1), 5, ' ') + ' ' + strStripMCI(MBase.Name), Tag);
|
||
End;
|
||
|
||
List.Add('', 2);
|
||
End;
|
||
|
||
Procedure AssignRecord (Email: Boolean);
|
||
Begin
|
||
MIndex := List.Picked;
|
||
|
||
MBaseFile.Reset;
|
||
|
||
While Not MBaseFile.EOF Do Begin
|
||
MBaseFile.Read (MBase);
|
||
|
||
If MIndex = MBase.Index Then Begin
|
||
Inc (MIndex);
|
||
MBaseFile.Reset;
|
||
End;
|
||
End;
|
||
|
||
MBaseFile.RecordInsert (List.Picked);
|
||
|
||
FillChar (MBase, SizeOf(RecMessageBase), 0);
|
||
|
||
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;
|
||
Origin := Config.Origin;
|
||
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 := 1;
|
||
ListACS := '%';
|
||
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('<27>', 49));
|
||
WriteXY (16, 19, 112, strRep('<27>', 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|G-Global|') 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;
|
||
'G' : If List.Marked = 0 Then
|
||
ShowMsgBox(0, 'You must tag areas for global edit')
|
||
Else
|
||
GlobalEdit;
|
||
End;
|
||
#13 : If List.Picked < List.ListMax Then Begin
|
||
MBaseFile.Seek (List.Picked - 1);
|
||
MBaseFile.Read (MBase);
|
||
|
||
EditMessageBase (MBase);
|
||
|
||
MBaseFile.Seek (List.Picked - 1);
|
||
MBaseFile.Write (MBase);
|
||
End;
|
||
#27 : Break;
|
||
End;
|
||
Until False;
|
||
|
||
Box.Close;
|
||
|
||
MBaseFile.Close;
|
||
MBaseFile.Free;
|
||
List.Free;
|
||
Box.Free;
|
||
End;
|
||
|
||
End.
|