mysticbbs/mystic/bbs_cfg_msgbase.pas

267 lines
9.7 KiB
ObjectPascal
Raw Normal View History

2012-02-13 16:50:48 -08:00
Unit bbs_cfg_MsgBase;
{$I M_OPS.PAS}
Interface
Procedure Configuration_MessageBaseEditor;
2012-02-13 16:50:48 -08:00
Implementation
Uses
m_Strings,
m_FileIO,
bbs_Ansi_MenuBox,
bbs_Ansi_MenuForm,
bbs_Cfg_Common,
bbs_Cfg_SysCfg,
bbs_Common;
2012-02-27 15:43:39 -08:00
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;
2012-02-13 16:50:48 -08:00
Var
2012-02-27 15:43:39 -08:00
Box : TAnsiMenuBox;
List : TAnsiMenuList;
MIndex : LongInt;
Copied : RecMessageBase;
HasCopy : Boolean = False;
MBaseFile : TBufFile;
MBase : RecMessageBase;
2012-03-17 11:11:50 -07:00
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;
2012-03-17 11:11:50 -07:00
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;
2012-02-13 16:50:48 -08:00
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
2012-03-17 11:11:50 -07:00
'/' : 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;
2012-03-17 11:11:50 -07:00
'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);
2012-02-27 15:43:39 -08:00
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.