diff --git a/mystic/bbs_ansi_help.pas b/mystic/bbs_ansi_help.pas index 7f4534d..a7ad56a 100644 --- a/mystic/bbs_ansi_help.pas +++ b/mystic/bbs_ansi_help.pas @@ -43,6 +43,7 @@ Uses bbs_Ansi_MenuBox, bbs_Core, bbs_Common, + bbs_dataBase, MPL_Execute; Constructor TAnsiMenuHelp.Create; @@ -261,7 +262,6 @@ Var Delete (Key, 1, 1); Temp := strWordGet(1, Key, ']'); - Cmd := strWordGet(1, Temp, ';'); Data := strWordGet(2, Temp, ';'); @@ -434,6 +434,7 @@ Begin CurKey := Keyword Else Begin CurKey := LastKey[LastPos]; + Dec (LastPos); End; @@ -459,7 +460,7 @@ Begin '!' : Begin Session.io.AnsiColor(7); - ExecuteMPL(NIL, Copy(Text[TopPage + CurLine - 1].Link[CurLPos].Key, 2, 255)); + ExecuteMPL (NIL, Copy(Text[TopPage + CurLine - 1].Link[CurLPos].Key, 2, 255)); ShowTemplate; End; diff --git a/mystic/bbs_ansi_menuform.pas b/mystic/bbs_ansi_menuform.pas index d7f3be4..ef2f370 100644 --- a/mystic/bbs_ansi_menuform.pas +++ b/mystic/bbs_ansi_menuform.pas @@ -7,6 +7,7 @@ Interface Uses m_Types, bbs_Ansi_MenuInput, + bbs_dataBase, bbs_Common; Const diff --git a/mystic/bbs_cfg_archive.pas b/mystic/bbs_cfg_archive.pas index 6ce3a2c..7200c27 100644 --- a/mystic/bbs_cfg_archive.pas +++ b/mystic/bbs_cfg_archive.pas @@ -12,6 +12,7 @@ Uses m_FileIO, m_Strings, bbs_Common, + bbs_dataBase, bbs_Ansi_MenuBox, bbs_Ansi_MenuForm, bbs_cfg_Common; @@ -81,7 +82,7 @@ Var End; Begin - Assign (ArcFile, Config.DataPath + 'archive.dat'); + Assign (ArcFile, bbsCfg.DataPath + 'archive.dat'); If Not ioReset(ArcFile, SizeOf(RecArchive), fmRWDN) Then If Not ioReWrite(ArcFile, SizeOf(RecArchive), fmRWDN) Then diff --git a/mystic/bbs_cfg_echomail.pas b/mystic/bbs_cfg_echomail.pas index 5459ba6..eeb73ec 100644 --- a/mystic/bbs_cfg_echomail.pas +++ b/mystic/bbs_cfg_echomail.pas @@ -6,7 +6,8 @@ Interface Uses BBS_Core, - BBS_Common; + BBS_Common, + bbs_dataBase; Function GetNodeByIndex (Num: LongInt; Var TempNode: RecEchoMailNode) : Boolean; Procedure AddExportByBase (Var MBase: RecMessageBase; Idx: LongInt); @@ -93,7 +94,7 @@ Var MBaseFile : File of RecMessageBase; MBase : RecMessageBase; Begin - Assign (MBaseFile, Config.DataPath + 'mbases.dat'); + Assign (MBaseFile, bbsCfg.DataPath + 'mbases.dat'); If Not ioReset(MBaseFile, SizeOf(RecMessageBase), fmRWDN) Then Exit; @@ -112,7 +113,7 @@ Var Begin Result := False; - Assign (F, Config.DataPath + 'echonode.dat'); + Assign (F, bbsCfg.DataPath + 'echonode.dat'); If Not ioReset(F, SizeOf(RecEchoMailNode), fmRWDN) Then Exit; @@ -205,7 +206,7 @@ Var Var NewIdx : LongInt; Begin - Assign (MBaseFile, Config.DataPath + 'mbases.dat'); + Assign (MBaseFile, bbsCfg.DataPath + 'mbases.dat'); If Not ioReset(MBaseFile, SizeOf(RecMessageBase), fmRWDN) Then Exit; @@ -333,7 +334,7 @@ Var Begin Result := -1; - Assign (EchoFile, Config.DataPath + 'echonode.dat'); + Assign (EchoFile, bbsCfg.DataPath + 'echonode.dat'); If Not ioReset(EchoFile, SizeOf(EchoNode), fmRWDN) Then If Not ioReWrite(EchoFile, SizeOf(EchoNode), fmRWDN) Then @@ -439,27 +440,30 @@ Function Configuration_EchomailAddress (Edit: Boolean) : Byte; WriteXY (21, 8, 112, 'Address'); - Form.AddWord ('Z', ' Zone' , 23, 9, 31, 9, 6, 5, 0, 65535, @Config.NetAddress[Num].Zone, Topic + 'Network Zone'); - Form.AddWord ('N', ' Net' , 24, 10, 31, 10, 5, 5, 0, 65535, @Config.NetAddress[Num].Net, Topic + 'Network Net'); - Form.AddWord ('O', ' Node' , 23, 11, 31, 11, 6, 5, 0, 65535, @Config.NetAddress[Num].Node, Topic + 'Network Node'); - Form.AddWord ('P', ' Point' , 22, 12, 31, 12, 7, 5, 0, 65535, @Config.NetAddress[Num].Point, Topic + 'Network Point'); + Form.AddWord ('Z', ' Zone' , 23, 9, 31, 9, 6, 5, 0, 65535, @bbsCfg.NetAddress[Num].Zone, Topic + 'Network Zone'); + Form.AddWord ('N', ' Net' , 24, 10, 31, 10, 5, 5, 0, 65535, @bbsCfg.NetAddress[Num].Net, Topic + 'Network Net'); + Form.AddWord ('O', ' Node' , 23, 11, 31, 11, 6, 5, 0, 65535, @bbsCfg.NetAddress[Num].Node, Topic + 'Network Node'); + Form.AddWord ('P', ' Point' , 22, 12, 31, 12, 7, 5, 0, 65535, @bbsCfg.NetAddress[Num].Point, Topic + 'Network Point'); - Form.AddStr ('M', ' Domain', 21, 14, 31, 14, 8, 8, 8, @Config.NetDomain[Num], Topic + 'Network domain'); - Form.AddStr ('D', ' Description', 16, 15, 31, 15, 13, 25, 25, @Config.NetDesc[Num], Topic + 'Network description'); - Form.AddBol ('I', ' Primary', 20, 16, 31, 16, 9, 3, @Config.NetPrimary[Num], Topic + 'Is this a primary address?'); + Form.AddStr ('M', ' Domain', 21, 14, 31, 14, 8, 8, 8, @bbsCfg.NetDomain[Num], Topic + 'Network domain'); + Form.AddStr ('D', ' Description', 16, 15, 31, 15, 13, 25, 25, @bbsCfg.NetDesc[Num], Topic + 'Network description'); + Form.AddBol ('I', ' Primary', 20, 16, 31, 16, 9, 3, @bbsCfg.NetPrimary[Num], Topic + 'Is this a primary address?'); Form.Execute; - If Config.NetPrimary[Num] Then + If bbsCfg.NetPrimary[Num] Then For Count := 1 to 30 Do - If Config.NetPrimary[Count] and (Count <> Num) Then - Config.NetPrimary[Count] := False; + If bbsCfg.NetPrimary[Count] and (Count <> Num) Then + bbsCfg.NetPrimary[Count] := False; Box.Close; Form.Free; Box.Free; - If Config.NetDomain[Num] = '' Then Begin + If strAddr2Str(bbsCfg.NetAddress[Num]) = '0:0/0' Then + bbsCfg.NetDomain[Num] := '' + Else + If bbsCfg.NetDomain[Num] = '' Then Begin ShowMsgBox(0, 'You must supply a domain'); Goto Start; End; @@ -476,7 +480,7 @@ Var List.Clear; For A := 1 to 30 Do - List.Add(strPadR(strAddr2Str(Config.NetAddress[A]), 23, ' ') + ' ' + strPadR(Config.NetDomain[A], 8, ' ') + ' ' + strPadR(strYN(Config.NetPrimary[A]), 3, ' ') + ' ' + Config.NetDesc[A], 0); + List.Add(strPadR(strAddr2Str(bbsCfg.NetAddress[A]), 23, ' ') + ' ' + strPadR(bbsCfg.NetDomain[A], 8, ' ') + ' ' + strPadR(strYN(bbsCfg.NetPrimary[A]), 3, ' ') + ' ' + bbsCfg.NetDesc[A], 0); End; Begin diff --git a/mystic/bbs_cfg_events.pas b/mystic/bbs_cfg_events.pas index 3843ef6..ec7c3b1 100644 --- a/mystic/bbs_cfg_events.pas +++ b/mystic/bbs_cfg_events.pas @@ -13,6 +13,7 @@ Uses m_DateTime, m_FileIO, bbs_Common, + bbs_dataBase, bbs_ansi_MenuBox, bbs_ansi_MenuForm, bbs_cfg_Common; @@ -110,7 +111,7 @@ Var End; Begin - Assign (F, Config.DataPath + 'event.dat'); + Assign (F, bbsCfg.DataPath + 'event.dat'); If Not ioReset(F, SizeOf(Event), fmRWDN) Then ioReWrite (F, SizeOf(Event), fmRWDN); diff --git a/mystic/bbs_cfg_filebase.pas b/mystic/bbs_cfg_filebase.pas index 892557b..76a7483 100644 --- a/mystic/bbs_cfg_filebase.pas +++ b/mystic/bbs_cfg_filebase.pas @@ -16,6 +16,7 @@ Uses bbs_Ansi_MenuBox, bbs_Ansi_MenuForm, bbs_Common, + bbs_DataBase, bbs_cfg_Common; Type @@ -46,12 +47,12 @@ Begin Sort.Sort (1, Sort.Total, qAscending); Close (FBaseFile); - ReName (FBaseFile, Config.DataPath + 'fbases.sortbak'); + ReName (FBaseFile, bbsCfg.DataPath + 'fbases.sortbak'); - Assign (TempFile, Config.DataPath + 'fbases.sortbak'); + Assign (TempFile, bbsCfg.DataPath + 'fbases.sortbak'); Reset (TempFile); - Assign (FBaseFile, Config.DataPath + 'fbases.dat'); + Assign (FBaseFile, bbsCfg.DataPath + 'fbases.dat'); ReWrite (FBaseFile); While FilePos(TempFile) < SortFirst - 1 Do Begin @@ -181,7 +182,7 @@ Var With FBase Do Begin FileName := 'new'; - Path := Config.SystemPath + 'files' + PathChar + 'new' + PathChar; + Path := bbsCfg.SystemPath + 'files' + PathChar + 'new' + PathChar; Name := 'New File Base'; FtpName := Name; DefScan := 1; @@ -196,7 +197,7 @@ Var End; Begin - Assign (FBaseFile, Config.DataPath + 'fbases.dat'); + Assign (FBaseFile, bbsCfg.DataPath + 'fbases.dat'); If Not ioReset(FBaseFile, SizeOf(FBase), fmRWDN) Then Exit; @@ -238,9 +239,9 @@ Begin KillRecord (FBaseFile, List.Picked, SizeOf(FBase)); If ShowMsgBox(1, 'Delete data files?') Then Begin - FileErase (Config.DataPath + FBase.FileName + '.dir'); - FileErase (Config.DataPath + FBase.FileName + '.dat'); - FileErase (Config.DataPath + FBase.FileName + '.scn'); + FileErase (bbsCfg.DataPath + FBase.FileName + '.dir'); + FileErase (bbsCfg.DataPath + FBase.FileName + '.dat'); + FileErase (bbsCfg.DataPath + FBase.FileName + '.scn'); End; MakeList; diff --git a/mystic/bbs_cfg_groups.pas b/mystic/bbs_cfg_groups.pas index ff200d1..54055be 100644 --- a/mystic/bbs_cfg_groups.pas +++ b/mystic/bbs_cfg_groups.pas @@ -12,6 +12,7 @@ Uses bbs_Ansi_MenuBox, bbs_Ansi_MenuForm, bbs_cfg_Common, + bbs_dataBase, bbs_Common; Procedure EditGroup (Var Group: RecGroup); @@ -65,9 +66,9 @@ Var Begin If Msg Then - Assign (GroupFile, Config.DataPath + 'groups_g.dat') + Assign (GroupFile, bbsCfg.DataPath + 'groups_g.dat') Else - Assign (GroupFile, Config.DataPath + 'groups_f.dat'); + Assign (GroupFile, bbsCfg.DataPath + 'groups_f.dat'); If Not ioReset(GroupFile, SizeOf(RecGroup), fmRWDN) Then If Not ioReWrite(GroupFile, SizeOf(RecGroup), fmRWDN) Then diff --git a/mystic/bbs_cfg_main.pas b/mystic/bbs_cfg_main.pas index 33dab0a..c26dfed 100644 --- a/mystic/bbs_cfg_main.pas +++ b/mystic/bbs_cfg_main.pas @@ -15,6 +15,7 @@ Uses bbs_Core, bbs_IO, bbs_Common, + bbs_DataBase, bbs_Ansi_MenuBox, bbs_Ansi_MenuForm, bbs_cfg_SysCfg, @@ -112,7 +113,7 @@ Var End; Begin - Session.io.OutFile(Config.DataPath + 'cfgroot', False, 0); + Session.io.OutFile(bbsCfg.DataPath + 'cfgroot', False, 0); Form := TAnsiMenuForm.Create; @@ -315,7 +316,7 @@ Begin Form.Free; ReWrite (ConfigFile); - Write (ConfigFile, Config); + Write (ConfigFile, bbsCfg); Close (ConfigFile); End; diff --git a/mystic/bbs_cfg_menuedit.pas b/mystic/bbs_cfg_menuedit.pas index cfad1ed..7454328 100644 --- a/mystic/bbs_cfg_menuedit.pas +++ b/mystic/bbs_cfg_menuedit.pas @@ -20,6 +20,7 @@ Uses BBS_Core, BBS_Common, BBS_MenuData, + bbs_dataBase, bbs_cfg_Theme, bbs_cfg_Common; diff --git a/mystic/bbs_cfg_msgbase.pas b/mystic/bbs_cfg_msgbase.pas index 8b1a209..a921be9 100644 --- a/mystic/bbs_cfg_msgbase.pas +++ b/mystic/bbs_cfg_msgbase.pas @@ -18,7 +18,8 @@ Uses bbs_Ansi_MenuForm, bbs_Cfg_Common, bbs_Cfg_EchoMail, - bbs_Common; + bbs_Common, + bbs_dataBase; Type RecMessageBaseFile = File of RecMessageBase; @@ -60,12 +61,12 @@ Begin Sort.Sort (1, Sort.Total, qAscending); Close (MBaseFile); - ReName (MBaseFile, Config.DataPath + 'mbases.sortbak'); + ReName (MBaseFile, bbsCfg.DataPath + 'mbases.sortbak'); - Assign (TempFile, Config.DataPath + 'mbases.sortbak'); + Assign (TempFile, bbsCfg.DataPath + 'mbases.sortbak'); Reset (TempFile); - Assign (MBaseFile, Config.DataPath + 'mbases.dat'); + Assign (MBaseFile, bbsCfg.DataPath + 'mbases.dat'); ReWrite (MBaseFile); While FilePos(TempFile) < SortFirst - 1 Do Begin @@ -152,7 +153,7 @@ Begin Form.AddBits ('9', ' Pvt Reply' , 55, 21, 68, 21, 11, MBPrivReply, @MBase.Flags, Topic + 'Allow private posts in public?'); Repeat - WriteXY (19, 15, 113, strPadR(strAddr2Str(Config.NetAddress[MBase.NetAddr]), 19, ' ')); + WriteXY (19, 15, 113, strPadR(strAddr2Str(bbsCfg.NetAddress[MBase.NetAddr]), 19, ' ')); Links := FileByteSize(MBase.Path + MBase.FileName + '.lnk'); @@ -281,7 +282,7 @@ Var Form.LoExitChars := #21#27; Repeat - WriteXY (28, 12, 113, strPadR(strAddr2Str(Config.NetAddress[Global.NetAddr]), 19, ' ')); + WriteXY (28, 12, 113, strPadR(strAddr2Str(bbsCfg.NetAddress[Global.NetAddr]), 19, ' ')); If AddStr <> '' Then WriteXY (28, 20, 113, strPadR(AddStr, 12, ' ')); @@ -383,7 +384,7 @@ Var If MBase.NetType = 0 Then Addr := 'Local' Else - Addr := strAddr2Str(Config.NetAddress[MBase.NetAddr]); + Addr := strAddr2Str(bbsCfg.NetAddress[MBase.NetAddr]); List.Add(strPadR(strI2S(FilePos(MBaseFile) - 1), 5, ' ') + ' ' + strPadR(strStripMCI(MBase.Name), 35, ' ') + ' ' + strPadL(Addr, 12, ' '), Tag); End; @@ -426,7 +427,7 @@ Var Created := CurDateDos; FileName := 'new'; - Path := Config.MsgsPath; + Path := bbsCfg.MsgsPath; Name := 'New Base'; DefNScan := 1; DefQScan := 1; @@ -437,12 +438,12 @@ Var ITemplate := 'ansimlst'; SysopACS := 's255'; NetAddr := 1; - Origin := Config.Origin; - ColQuote := Config.ColorQuote; - ColText := Config.ColorText; - ColTear := Config.ColorTear; - ColOrigin := Config.ColorOrigin; - ColKludge := Config.ColorKludge; + Origin := bbsCfg.Origin; + ColQuote := bbsCfg.ColorQuote; + ColText := bbsCfg.ColorText; + ColTear := bbsCfg.ColorTear; + ColOrigin := bbsCfg.ColorOrigin; + ColKludge := bbsCfg.ColorKludge; Flags := MBAutoSigs or MBKillKludge; If Email Then Begin @@ -475,7 +476,7 @@ Var Begin Result := -1; - Assign (MBaseFile, Config.DataPath + 'mbases.dat'); + Assign (MBaseFile, bbsCfg.DataPath + 'mbases.dat'); If Not ioReset(MBaseFile, SizeOf(MBase), fmRWDN) Then Exit; diff --git a/mystic/bbs_cfg_protocol.pas b/mystic/bbs_cfg_protocol.pas index bceaeb2..7525a48 100644 --- a/mystic/bbs_cfg_protocol.pas +++ b/mystic/bbs_cfg_protocol.pas @@ -12,6 +12,7 @@ Uses m_FileIO, m_Strings, bbs_Common, + bbs_dataBase, bbs_ansi_MenuBox, bbs_ansi_MenuForm, bbs_cfg_Common; @@ -83,7 +84,7 @@ Var End; Begin - Assign (ProtFile, Config.DataPath + 'protocol.dat'); + Assign (ProtFile, bbsCfg.DataPath + 'protocol.dat'); If Not ioReset(ProtFile, SizeOf(RecProtocol), fmRWDN) Then If Not ioReWrite(ProtFile, SizeOf(RecProtocol), fmRWDN) Then diff --git a/mystic/bbs_cfg_seclevel.pas b/mystic/bbs_cfg_seclevel.pas index 68dc65c..4fcc03f 100644 --- a/mystic/bbs_cfg_seclevel.pas +++ b/mystic/bbs_cfg_seclevel.pas @@ -12,6 +12,7 @@ Uses m_Strings, m_FileIO, bbs_Common, + bbs_dataBase, bbs_Ansi_MenuBox, bbs_Ansi_MenuForm, bbs_Cfg_Common; @@ -87,7 +88,7 @@ Var Begin HideMode := True; - Assign (SecFile, Config.DataPath + 'security.dat'); + Assign (SecFile, bbsCfg.DataPath + 'security.dat'); If Not ioReset(SecFile, SizeOf(RecSecurity), fmReadWrite + fmDenyNone) Then Begin ReWrite (SecFile, SizeOf(RecSecurity)); diff --git a/mystic/bbs_cfg_syscfg.pas b/mystic/bbs_cfg_syscfg.pas index e1d1f2d..d48d07d 100644 --- a/mystic/bbs_cfg_syscfg.pas +++ b/mystic/bbs_cfg_syscfg.pas @@ -27,6 +27,7 @@ Implementation Uses m_Strings, bbs_Common, + bbs_dataBase, bbs_ansi_MenuBox, bbs_ansi_MenuForm; @@ -47,17 +48,17 @@ Begin VerticalLine (26, 8, 18); - Form.AddPath ('S', ' System Path', 13, 8, 28, 8, 13, 45, mysMaxPathSize, @Config.SystemPath, Topic + 'Root Mystic BBS directory'); - Form.AddPath ('D', ' Data File Path', 10, 9, 28, 9, 16, 45, mysMaxPathSize, @Config.DataPath, Topic + 'Data file directory'); - Form.AddPath ('L', ' Log File Path', 11, 10, 28, 10, 15, 45, mysMaxPathSize, @Config.LogsPath, Topic + 'Log file directory'); - Form.AddPath ('M', ' Message Base Path', 7, 11, 28, 11, 19, 45, mysMaxPathSize, @Config.MsgsPath, Topic + 'Message base directory'); - Form.AddPath ('A', ' File Attach Path', 8, 12, 28, 12, 18, 45, mysMaxPathSize, @Config.AttachPath, Topic + 'File attachment directory'); - Form.AddPath ('E', ' Semaphore Path', 10, 13, 28, 13, 16, 45, mysMaxPathSize, @Config.SemaPath, Topic + 'Semaphore file directory'); - Form.AddPath ('U', ' Menu File Path', 10, 14, 28, 14, 16, 45, mysMaxPathSize, @Config.MenuPath, Topic + 'Default menu file directory'); - Form.AddPath ('T', ' Text File Path', 10, 15, 28, 15, 16, 45, mysMaxPathSize, @Config.TextPath, Topic + 'Default display file directory'); - Form.AddPath ('R', ' Script Path', 13, 16, 28, 16, 13, 45, mysMaxPathSize, @Config.ScriptPath, Topic + 'Default script (MPL) directory'); - Form.AddPath ('I', ' Inbound EchoMail', 8, 17, 28, 17, 18, 45, mysMaxPathSize, @Config.InboundPath, Topic + 'Inbound Echomail directory'); - Form.AddPath ('O', ' Outbound EchoMail', 7, 18, 28, 18, 19, 45, mysMaxPathSize, @Config.OutboundPath, Topic + 'Outbound Echomail directory'); + Form.AddPath ('S', ' System Path', 13, 8, 28, 8, 13, 45, mysMaxPathSize, @bbsCfg.SystemPath, Topic + 'Root Mystic BBS directory'); + Form.AddPath ('D', ' Data File Path', 10, 9, 28, 9, 16, 45, mysMaxPathSize, @bbsCfg.DataPath, Topic + 'Data file directory'); + Form.AddPath ('L', ' Log File Path', 11, 10, 28, 10, 15, 45, mysMaxPathSize, @bbsCfg.LogsPath, Topic + 'Log file directory'); + Form.AddPath ('M', ' Message Base Path', 7, 11, 28, 11, 19, 45, mysMaxPathSize, @bbsCfg.MsgsPath, Topic + 'Message base directory'); + Form.AddPath ('A', ' File Attach Path', 8, 12, 28, 12, 18, 45, mysMaxPathSize, @bbsCfg.AttachPath, Topic + 'File attachment directory'); + Form.AddPath ('E', ' Semaphore Path', 10, 13, 28, 13, 16, 45, mysMaxPathSize, @bbsCfg.SemaPath, Topic + 'Semaphore file directory'); + Form.AddPath ('U', ' Menu File Path', 10, 14, 28, 14, 16, 45, mysMaxPathSize, @bbsCfg.MenuPath, Topic + 'Default menu file directory'); + Form.AddPath ('T', ' Text File Path', 10, 15, 28, 15, 16, 45, mysMaxPathSize, @bbsCfg.TextPath, Topic + 'Default display file directory'); + Form.AddPath ('R', ' Script Path', 13, 16, 28, 16, 13, 45, mysMaxPathSize, @bbsCfg.ScriptPath, Topic + 'Default script (MPL) directory'); + Form.AddPath ('I', ' Inbound EchoMail', 8, 17, 28, 17, 18, 45, mysMaxPathSize, @bbsCfg.InboundPath, Topic + 'Inbound Echomail directory'); + Form.AddPath ('O', ' Outbound EchoMail', 7, 18, 28, 18, 19, 45, mysMaxPathSize, @bbsCfg.OutboundPath, Topic + 'Outbound Echomail directory'); Form.Execute; @@ -85,23 +86,23 @@ Begin VerticalLine (24, 7, 16); VerticalLine (67, 7, 12); - Form.AddStr ('B', ' BBS Name', 14, 7, 26, 7, 10, 25, 30, @Config.BBSName, Topic); - Form.AddStr ('S', ' Sysop Name', 12, 8, 26, 8, 12, 25, 30, @Config.SysopName, Topic); - Form.AddPass ('Y', ' Sysop Password', 8, 9, 26, 9, 16, 15, 15, @Config.SysopPW, Topic); - Form.AddPass ('T', ' System Password', 7, 10, 26, 10, 17, 15, 15, @Config.SystemPW, Topic); - Form.AddStr ('O', ' Sysop ACS', 13, 11, 26, 11, 11, 25, 30, @Config.ACSSysop, Topic); - Form.AddStr ('F', ' Feedback To', 11, 12, 26, 12, 13, 25, 30, @Config.FeedbackTo, Topic); - Form.AddStr ('A', ' Start Menu', 12, 13, 26, 13, 12, 20, 20, @Config.DefStartMenu, Topic); - Form.AddStr ('H', ' Theme', 17, 14, 26, 14, 7, 20, 20, @Config.DefThemeFile, Topic); - Form.AddBol ('K', ' Ask Theme', 13, 15, 26, 15, 11, 3, @Config.ThemeOnStart, Topic + 'Ask theme each connection'); - Form.AddTog ('E', ' Terminal', 14, 16, 26, 16, 10, 10, 0, 3, 'Ask Detect Detect/Ask ANSI', @Config.DefTermMode, Topic); + Form.AddStr ('B', ' BBS Name', 14, 7, 26, 7, 10, 25, 30, @bbsCfg.BBSName, Topic); + Form.AddStr ('S', ' Sysop Name', 12, 8, 26, 8, 12, 25, 30, @bbsCfg.SysopName, Topic); + Form.AddPass ('Y', ' Sysop Password', 8, 9, 26, 9, 16, 15, 15, @bbsCfg.SysopPW, Topic); + Form.AddPass ('T', ' System Password', 7, 10, 26, 10, 17, 15, 15, @bbsCfg.SystemPW, Topic); + Form.AddStr ('O', ' Sysop ACS', 13, 11, 26, 11, 11, 25, 30, @bbsCfg.ACSSysop, Topic); + Form.AddStr ('F', ' Feedback To', 11, 12, 26, 12, 13, 25, 30, @bbsCfg.FeedbackTo, Topic); + Form.AddStr ('A', ' Start Menu', 12, 13, 26, 13, 12, 20, 20, @bbsCfg.DefStartMenu, Topic); + Form.AddStr ('H', ' Theme', 17, 14, 26, 14, 7, 20, 20, @bbsCfg.DefThemeFile, Topic); + Form.AddBol ('K', ' Ask Theme', 13, 15, 26, 15, 11, 3, @bbsCfg.ThemeOnStart, Topic + 'Ask theme each connection'); + Form.AddTog ('E', ' Terminal', 14, 16, 26, 16, 10, 10, 0, 3, 'Ask Detect Detect/Ask ANSI', @bbsCfg.DefTermMode, Topic); - Form.AddBol ('L', ' Chat Logging', 53, 7, 69, 7, 14, 3, @Config.ChatLogging, Topic); - Form.AddByte ('R', ' Hours Start', 54, 8, 69, 8, 13, 2, 0, 24, @Config.ChatStart, Topic); - Form.AddByte ('N', ' Hours End', 56, 9, 69, 9, 11, 2, 0, 24, @Config.ChatEnd, Topic); - Form.AddBol ('D', ' Chat Feedback', 52, 10, 69, 10, 15, 3, @Config.ChatFeedback, Topic); - Form.AddByte ('Z', ' Screen Size', 54, 11, 69, 11, 13, 2, 1, 25, @Config.DefScreenSize, Topic); - Form.AddWord ('I', ' Inactivity', 55, 12, 69, 12, 12, 5, 0, 65535, @Config.Inactivity, Topic + 'Inactivity timeout (seconds) 0/Disable'); + Form.AddBol ('L', ' Chat Logging', 53, 7, 69, 7, 14, 3, @bbsCfg.ChatLogging, Topic); + Form.AddByte ('R', ' Hours Start', 54, 8, 69, 8, 13, 2, 0, 24, @bbsCfg.ChatStart, Topic); + Form.AddByte ('N', ' Hours End', 56, 9, 69, 9, 11, 2, 0, 24, @bbsCfg.ChatEnd, Topic); + Form.AddBol ('D', ' Chat Feedback', 52, 10, 69, 10, 15, 3, @bbsCfg.ChatFeedback, Topic); + Form.AddByte ('Z', ' Screen Size', 54, 11, 69, 11, 13, 2, 1, 25, @bbsCfg.DefScreenSize, Topic); + Form.AddWord ('I', ' Inactivity', 55, 12, 69, 12, 12, 5, 0, 65535, @bbsCfg.Inactivity, Topic + 'Inactivity timeout (seconds) 0/Disable'); Form.Execute; @@ -128,19 +129,19 @@ Begin VerticalLine (35, 7, 19); - Form.AddByte ('A', ' Login Attempts', 19, 7, 37, 7, 16, 3, 1, 255, @Config.LoginAttempts, Topic + 'Maximum login attempts before disconnect'); - Form.AddByte ('T', ' Login Time', 23, 8, 37, 8, 12, 3, 1, 255, @Config.LoginTime, Topic + 'Max time in minutes to give for user login'); - Form.AddWord ('C', ' Password Change', 18, 9, 37, 9, 17, 5, 0, 65535, @Config.PWChange, Topic + 'Days before forcing PW change (0/Disabled)'); - Form.AddBol ('I', ' Password Inquiry', 17, 10, 37, 10, 18, 3, @Config.PWInquiry, Topic + 'Allow password inquiry e-mails?'); - Form.AddByte ('W', ' Password Attempts', 16, 11, 37, 11, 19, 2, 1, 99, @Config.PWAttempts, Topic + 'Max Password attempts'); - Form.AddTog ('O', ' Start Code Page', 18, 12, 37, 12, 17, 5, 0, 1, 'CP437 UTF-8', @Config.StartCodePage, Topic + 'Logging in user''s code page'); - Form.AddBol ('U', ' Use Matrix Login', 17, 13, 37, 13, 18, 3, @Config.UseMatrix, Topic + 'Use Matrix login menu?'); - Form.AddStr ('M', ' Matrix Menu', 22, 14, 37, 14, 13, 20, 20, @Config.MatrixMenu, Topic + 'Matrix menu file name'); - Form.AddPass ('P', ' Matrix Password', 18, 15, 37, 15, 17, 15, 15, @Config.MatrixPW, Topic + 'Matrix password to login (Blank/Disabled)'); - Form.AddStr ('S', ' Matrix ACS', 23, 16, 37, 16, 12, 30, 30, @Config.MatrixACS, Topic + 'ACS to see matrix password or login'); - Form.AddStr ('V', ' Invisible Login ACS', 14, 17, 37, 17, 21, 30, 30, @Config.AcsInvisLogin, Topic + 'ACS to login as invisible user'); - Form.AddStr ('N', ' See Invisible ACS', 16, 18, 37, 18, 19, 30, 30, @Config.AcsSeeInvis, Topic + 'ACS to see invisible users'); - Form.AddStr ('L', ' Multi Login ACS', 18, 19, 37, 19, 17, 30, 30, @Config.AcsMultiLogin, Topic + 'ACS to login to multiple nodes at once'); + Form.AddByte ('A', ' Login Attempts', 19, 7, 37, 7, 16, 3, 1, 255, @bbsCfg.LoginAttempts, Topic + 'Maximum login attempts before disconnect'); + Form.AddByte ('T', ' Login Time', 23, 8, 37, 8, 12, 3, 1, 255, @bbsCfg.LoginTime, Topic + 'Max time in minutes to give for user login'); + Form.AddWord ('C', ' Password Change', 18, 9, 37, 9, 17, 5, 0, 65535, @bbsCfg.PWChange, Topic + 'Days before forcing PW change (0/Disabled)'); + Form.AddBol ('I', ' Password Inquiry', 17, 10, 37, 10, 18, 3, @bbsCfg.PWInquiry, Topic + 'Allow password inquiry e-mails?'); + Form.AddByte ('W', ' Password Attempts', 16, 11, 37, 11, 19, 2, 1, 99, @bbsCfg.PWAttempts, Topic + 'Max Password attempts'); + Form.AddTog ('O', ' Start Code Page', 18, 12, 37, 12, 17, 5, 0, 1, 'CP437 UTF-8', @bbsCfg.StartCodePage, Topic + 'Logging in user''s code page'); + Form.AddBol ('U', ' Use Matrix Login', 17, 13, 37, 13, 18, 3, @bbsCfg.UseMatrix, Topic + 'Use Matrix login menu?'); + Form.AddStr ('M', ' Matrix Menu', 22, 14, 37, 14, 13, 20, 20, @bbsCfg.MatrixMenu, Topic + 'Matrix menu file name'); + Form.AddPass ('P', ' Matrix Password', 18, 15, 37, 15, 17, 15, 15, @bbsCfg.MatrixPW, Topic + 'Matrix password to login (Blank/Disabled)'); + Form.AddStr ('S', ' Matrix ACS', 23, 16, 37, 16, 12, 30, 30, @bbsCfg.MatrixACS, Topic + 'ACS to see matrix password or login'); + Form.AddStr ('V', ' Invisible Login ACS', 14, 17, 37, 17, 21, 30, 30, @bbsCfg.AcsInvisLogin, Topic + 'ACS to login as invisible user'); + Form.AddStr ('N', ' See Invisible ACS', 16, 18, 37, 18, 19, 30, 30, @bbsCfg.AcsSeeInvis, Topic + 'ACS to see invisible users'); + Form.AddStr ('L', ' Multi Login ACS', 18, 19, 37, 19, 17, 30, 30, @bbsCfg.AcsMultiLogin, Topic + 'ACS to login to multiple nodes at once'); Form.Execute; @@ -164,11 +165,11 @@ Begin Box.Header := ' Optional User Fields '; For Count := 1 to 10 Do Begin - Form.AddBol ('1', 'Ask' , 8, 7 + Count, 12, 7 + Count, 3, 3, @Config.OptionalField[Count].Ask, Topic + 'Ask optional field #' + strI2S(Count)); - Form.AddStr ('2', 'Desc', 18, 7 + Count, 23, 7 + Count, 4, 13, 13, @Config.OptionalField[Count].Desc, Topic + 'Description of field (for user editor)'); - Form.AddTog ('3', 'Type', 41, 7 + Count, 46, 7 + Count, 4, 8, 1, 8, 'Standard Upper Proper Phone Date Password Lower Yes/No', @Config.OptionalField[Count].iType, Topic + 'Field input type'); - Form.AddByte ('4', 'Field', 57, 7 + Count, 63, 7 + Count, 5, 2, 1, 60, @Config.OptionalField[Count].iField, Topic + 'Size of input field'); - Form.AddByte ('5', 'Max' , 68, 7 + Count, 72, 7 + Count, 3, 2, 1, 60, @Config.OptionalField[Count].iMax, Topic + 'Maximum size of input'); + Form.AddBol ('1', 'Ask' , 8, 7 + Count, 12, 7 + Count, 3, 3, @bbsCfg.OptionalField[Count].Ask, Topic + 'Ask optional field #' + strI2S(Count)); + Form.AddStr ('2', 'Desc', 18, 7 + Count, 23, 7 + Count, 4, 13, 13, @bbsCfg.OptionalField[Count].Desc, Topic + 'Description of field (for user editor)'); + Form.AddTog ('3', 'Type', 41, 7 + Count, 46, 7 + Count, 4, 8, 1, 8, 'Standard Upper Proper Phone Date Password Lower Yes/No', @bbsCfg.OptionalField[Count].iType, Topic + 'Field input type'); + Form.AddByte ('4', 'Field', 57, 7 + Count, 63, 7 + Count, 5, 2, 1, 60, @bbsCfg.OptionalField[Count].iField, Topic + 'Size of input field'); + Form.AddByte ('5', 'Max' , 68, 7 + Count, 72, 7 + Count, 3, 2, 1, 60, @bbsCfg.OptionalField[Count].iMax, Topic + 'Maximum size of input'); End; Box.Open (6, 6, 75, 19); @@ -198,29 +199,29 @@ Begin VerticalLine (26, 7, 19); VerticalLine (58, 7, 15); - Form.AddBol ('L', ' List Compression', 8, 7, 28, 7, 18, 3, @Config.FCompress, Topic + ''); - Form.AddTog ('I', ' List Columns', 12, 8, 28, 8, 14, 1, 1, 2, '1 2', @Config.FColumns, Topic + ''); - Form.AddBol ('B', ' Bases in Groups', 9, 9, 28, 9, 17, 3, @Config.FShowBases, Topic + ''); - Form.AddBol ('R', ' Reshow File Header', 6, 10, 28, 10, 20, 3, @Config.FShowHeader, Topic + ''); - Form.AddTog ('U', ' Upload Dupe Scan', 8, 11, 28, 11, 18, 7, 0, 2, 'None Current All', @Config.FDupeScan, Topic + ''); - Form.AddWord ('P', ' Upload Base', 13, 12, 28, 12, 13, 5, 0, 65535, @Config.UploadBase, Topic + ''); - Form.AddByte ('D', ' Description Lines', 7, 13, 28, 13, 19, 2, 1, 99, @Config.MaxFileDesc, Topic + ''); - Form.AddBol ('I', ' Import FILE_ID.DIZ', 6, 14, 28, 14, 20, 3, @Config.ImportDIZ, Topic + ''); - Form.AddByte ('M', ' Max Comment Lines', 7, 15, 28, 15, 19, 2, 1, 99, @Config.FCommentLines, Topic + ''); - Form.AddByte ('A', ' Max Comment Cols', 8, 16, 28, 16, 18, 2, 1, 79, @Config.FCommentLen, Topic + ''); - Form.AddBol ('T', ' Test Uploads', 12, 17, 28, 17, 14, 3, @Config.TestUploads, Topic + ''); - Form.AddByte ('S', ' Pass Level', 14, 18, 28, 18, 12, 3, 0, 255, @Config.TestPassLevel, Topic + ''); - Form.AddStr ('O', ' Command Line', 12, 19, 28, 19, 14, 45, 80, @Config.TestCmdLine, Topic + ''); + Form.AddBol ('L', ' List Compression', 8, 7, 28, 7, 18, 3, @bbsCfg.FCompress, Topic + ''); + Form.AddTog ('I', ' List Columns', 12, 8, 28, 8, 14, 1, 1, 2, '1 2', @bbsCfg.FColumns, Topic + ''); + Form.AddBol ('B', ' Bases in Groups', 9, 9, 28, 9, 17, 3, @bbsCfg.FShowBases, Topic + ''); + Form.AddBol ('R', ' Reshow File Header', 6, 10, 28, 10, 20, 3, @bbsCfg.FShowHeader, Topic + ''); + Form.AddTog ('U', ' Upload Dupe Scan', 8, 11, 28, 11, 18, 7, 0, 2, 'None Current All', @bbsCfg.FDupeScan, Topic + ''); + Form.AddWord ('P', ' Upload Base', 13, 12, 28, 12, 13, 5, 0, 65535, @bbsCfg.UploadBase, Topic + ''); + Form.AddByte ('D', ' Description Lines', 7, 13, 28, 13, 19, 2, 1, 99, @bbsCfg.MaxFileDesc, Topic + ''); + Form.AddBol ('I', ' Import FILE_ID.DIZ', 6, 14, 28, 14, 20, 3, @bbsCfg.ImportDIZ, Topic + ''); + Form.AddByte ('M', ' Max Comment Lines', 7, 15, 28, 15, 19, 2, 1, 99, @bbsCfg.FCommentLines, Topic + ''); + Form.AddByte ('A', ' Max Comment Cols', 8, 16, 28, 16, 18, 2, 1, 79, @bbsCfg.FCommentLen, Topic + ''); + Form.AddBol ('T', ' Test Uploads', 12, 17, 28, 17, 14, 3, @bbsCfg.TestUploads, Topic + ''); + Form.AddByte ('S', ' Pass Level', 14, 18, 28, 18, 12, 3, 0, 255, @bbsCfg.TestPassLevel, Topic + ''); + Form.AddStr ('O', ' Command Line', 12, 19, 28, 19, 14, 45, 80, @bbsCfg.TestCmdLine, Topic + ''); - Form.AddStr ('U', ' Auto Validate', 43, 7, 60, 7, 15, 15, mysMaxAcsSize, @Config.AcsValidate, Topic + 'ACS to auto-validate uploads'); - Form.AddStr ('E', ' See Unvalidated', 41, 8, 60, 8, 17, 15, mysMaxAcsSize, @Config.AcsSeeUnvalid, Topic + 'ACS to see unvalidated files'); - Form.AddStr ('N', ' DL Unvalidated', 42, 9, 60, 9, 16, 15, mysMaxAcsSize, @Config.AcsDLUnvalid, Topic + 'ACS to download unvalidated files'); - Form.AddStr ('F', ' See Failed', 46, 10, 60, 10, 12, 15, mysMaxAcsSize, @Config.AcsSeeFailed, Topic + 'ACS to see failed files'); - Form.AddStr (#0, ' DL Failed', 47, 11, 60, 11, 11, 15, mysMaxAcsSize, @Config.AcsDLFailed, Topic + 'ACS to download failed files'); - Form.AddStr (#0, ' See Offline', 45, 12, 60, 12, 13, 15, mysMaxAcsSize, @Config.AcsSeeOffline, Topic + 'ACS to see offline files'); - Form.AddLong ('C', ' Min Upload Space', 40, 13, 60, 13, 18, 9, 0, 999999999, @Config.FreeUL, Topic + 'Min space to allow uploads (kb)'); - Form.AddLong ('-', ' Min CD-ROM Space', 40, 14, 60, 14, 18, 9, 0, 999999999, @Config.FreeCDROM, Topic + 'Min space for CD-ROM copy (kb)'); - Form.AddChar (#0, ' Default Protocol', 40, 15, 60, 15, 18, 32, 96, @Config.FProtocol, Topic + 'Default Protocol hotkey'); + Form.AddStr ('U', ' Auto Validate', 43, 7, 60, 7, 15, 15, mysMaxAcsSize, @bbsCfg.AcsValidate, Topic + 'ACS to auto-validate uploads'); + Form.AddStr ('E', ' See Unvalidated', 41, 8, 60, 8, 17, 15, mysMaxAcsSize, @bbsCfg.AcsSeeUnvalid, Topic + 'ACS to see unvalidated files'); + Form.AddStr ('N', ' DL Unvalidated', 42, 9, 60, 9, 16, 15, mysMaxAcsSize, @bbsCfg.AcsDLUnvalid, Topic + 'ACS to download unvalidated files'); + Form.AddStr ('F', ' See Failed', 46, 10, 60, 10, 12, 15, mysMaxAcsSize, @bbsCfg.AcsSeeFailed, Topic + 'ACS to see failed files'); + Form.AddStr (#0, ' DL Failed', 47, 11, 60, 11, 11, 15, mysMaxAcsSize, @bbsCfg.AcsDLFailed, Topic + 'ACS to download failed files'); + Form.AddStr (#0, ' See Offline', 45, 12, 60, 12, 13, 15, mysMaxAcsSize, @bbsCfg.AcsSeeOffline, Topic + 'ACS to see offline files'); + Form.AddLong ('C', ' Min Upload Space', 40, 13, 60, 13, 18, 9, 0, 999999999, @bbsCfg.FreeUL, Topic + 'Min space to allow uploads (kb)'); + Form.AddLong ('-', ' Min CD-ROM Space', 40, 14, 60, 14, 18, 9, 0, 999999999, @bbsCfg.FreeCDROM, Topic + 'Min space for CD-ROM copy (kb)'); + Form.AddChar (#0, ' Default Protocol', 40, 15, 60, 15, 18, 32, 96, @bbsCfg.FProtocol, Topic + 'Default Protocol hotkey'); Form.Execute; @@ -247,14 +248,14 @@ Begin VerticalLine (31, 9, 16); - Form.AddPath ('L', ' Local QWK Path', 15, 9, 33, 9, 16, 40, mysMaxPathSize, @Config.QWKPath, Topic + 'Directory for local QWK packets'); - Form.AddStr ('I', ' QWK Packet ID', 16, 10, 33, 10, 15, 8, 8, @Config.QwkBBSID, Topic + 'QWK packet filename'); - Form.AddStr ('A', ' QWK Archive', 18, 11, 33, 11, 13, 4, 4, @Config.QwkArchive, Topic + 'QWK Archive'); - Form.AddWord ('P', ' Max Messages/Packet', 10, 12, 33, 12, 21, 5, 0, 65535, @Config.QwkMaxPacket, Topic + 'Max messages per packet (0/Unlimited)'); - Form.AddWord ('B', ' Max Messages/Base', 12, 13, 33, 13, 19, 5, 0, 65535, @Config.QwkMaxBase, Topic + 'Max message per base (0/Unlimited)'); - Form.AddStr ('W', ' Welcome File', 17, 14, 33, 14, 14, 40, mysMaxPathSize, @Config.QWKWelcome, Topic + 'Welcome filename'); - Form.AddStr ('N', ' News File', 20, 15, 33, 15, 11, 40, mysMaxPathSize, @Config.QWKNews, Topic + 'New filename'); - Form.AddStr ('G', ' Goodbye File', 17, 16, 33, 16, 14, 40, mysMaxPathSize, @Config.QWKGoodbye, Topic + 'Goodbye filename'); + Form.AddPath ('L', ' Local QWK Path', 15, 9, 33, 9, 16, 40, mysMaxPathSize, @bbsCfg.QWKPath, Topic + 'Directory for local QWK packets'); + Form.AddStr ('I', ' QWK Packet ID', 16, 10, 33, 10, 15, 8, 8, @bbsCfg.QwkBBSID, Topic + 'QWK packet filename'); + Form.AddStr ('A', ' QWK Archive', 18, 11, 33, 11, 13, 4, 4, @bbsCfg.QwkArchive, Topic + 'QWK Archive'); + Form.AddWord ('P', ' Max Messages/Packet', 10, 12, 33, 12, 21, 5, 0, 65535, @bbsCfg.QwkMaxPacket, Topic + 'Max messages per packet (0/Unlimited)'); + Form.AddWord ('B', ' Max Messages/Base', 12, 13, 33, 13, 19, 5, 0, 65535, @bbsCfg.QwkMaxBase, Topic + 'Max message per base (0/Unlimited)'); + Form.AddStr ('W', ' Welcome File', 17, 14, 33, 14, 14, 40, mysMaxPathSize, @bbsCfg.QWKWelcome, Topic + 'Welcome filename'); + Form.AddStr ('N', ' News File', 20, 15, 33, 15, 11, 40, mysMaxPathSize, @bbsCfg.QWKNews, Topic + 'New filename'); + Form.AddStr ('G', ' Goodbye File', 17, 16, 33, 16, 14, 40, mysMaxPathSize, @bbsCfg.QWKGoodbye, Topic + 'Goodbye filename'); Form.Execute; @@ -281,10 +282,10 @@ Begin VerticalLine (31, 11, 14); - Form.AddStr ('D', ' Domain', 23, 11, 33, 11, 8, 25, 25, @Config.inetDomain, Topic + 'Internet domain name'); - Form.AddStr ('I', ' Interface', 20, 12, 33, 12, 11, 23, 23, @Config.inetInterface, Topic + 'Network interface IP address'); - Form.AddBol ('B', ' IP Blocking', 18, 13, 33, 13, 13, 3, @Config.inetIPBlocking, Topic + 'Enable IP blocking'); - Form.AddBol ('L', ' IP Logging', 19, 14, 33, 14, 12, 3, @Config.inetIPLogging, Topic + 'Enable IP logging'); + Form.AddStr ('D', ' Domain', 23, 11, 33, 11, 8, 25, 25, @bbsCfg.inetDomain, Topic + 'Internet domain name'); + Form.AddStr ('I', ' Interface', 20, 12, 33, 12, 11, 23, 23, @bbsCfg.inetInterface, Topic + 'Network interface IP address'); + Form.AddBol ('B', ' IP Blocking', 18, 13, 33, 13, 13, 3, @bbsCfg.inetIPBlocking, Topic + 'Enable IP blocking'); + Form.AddBol ('L', ' IP Logging', 19, 14, 33, 14, 12, 3, @bbsCfg.inetIPLogging, Topic + 'Enable IP logging'); Form.Execute; @@ -311,14 +312,14 @@ Begin VerticalLine (47, 9, 16); - Form.AddBol ('U', ' Use FTP Server', 31, 9, 49, 9, 16, 3, @Config.inetFTPUse, Topic + 'Enable FTP server'); - Form.AddWord ('P', ' Server Port', 34, 10, 49, 10, 13, 5, 0, 65535, @Config.inetFTPPort, Topic + 'FTP Server port'); - Form.AddWord ('M', ' Max Connections', 30, 11, 49, 11, 17, 5, 0, 65535, @Config.inetFTPMax, Topic + 'Max concurrent connections'); - Form.AddWord ('C', ' Connection Timeout', 27, 12, 49, 12, 20, 5, 0, 65535, @Config.inetFTPTimeout, Topic + 'Connection timeout (seconds)'); - Form.AddByte ('D', ' Dupe IP Limit', 32, 13, 49, 13, 15, 3, 2, 255, @Config.inetFTPDupes, Topic + 'Max connections with same IP'); - Form.AddWord ('I', ' Data Port Min', 32, 14, 49, 14, 15, 5, 0, 65535, @Config.inetFTPPortMin, Topic + 'Passive port range (minimum)'); - Form.AddWord ('A', ' Data Port Max', 32, 15, 49, 15, 15, 5, 0, 65535, @Config.inetFTPPortMax, Topic + 'Passive port range (maximum)'); - Form.AddBol ('Y', ' Allow Passive', 32, 16, 49, 16, 15, 3, @Config.inetFTPPassive, Topic + 'Allow passive data transfers'); + Form.AddBol ('U', ' Use FTP Server', 31, 9, 49, 9, 16, 3, @bbsCfg.inetFTPUse, Topic + 'Enable FTP server'); + Form.AddWord ('P', ' Server Port', 34, 10, 49, 10, 13, 5, 0, 65535, @bbsCfg.inetFTPPort, Topic + 'FTP Server port'); + Form.AddWord ('M', ' Max Connections', 30, 11, 49, 11, 17, 5, 0, 65535, @bbsCfg.inetFTPMax, Topic + 'Max concurrent connections'); + Form.AddWord ('C', ' Connection Timeout', 27, 12, 49, 12, 20, 5, 0, 65535, @bbsCfg.inetFTPTimeout, Topic + 'Connection timeout (seconds)'); + Form.AddByte ('D', ' Dupe IP Limit', 32, 13, 49, 13, 15, 3, 2, 255, @bbsCfg.inetFTPDupes, Topic + 'Max connections with same IP'); + Form.AddWord ('I', ' Data Port Min', 32, 14, 49, 14, 15, 5, 0, 65535, @bbsCfg.inetFTPPortMin, Topic + 'Passive port range (minimum)'); + Form.AddWord ('A', ' Data Port Max', 32, 15, 49, 15, 15, 5, 0, 65535, @bbsCfg.inetFTPPortMax, Topic + 'Passive port range (maximum)'); + Form.AddBol ('Y', ' Allow Passive', 32, 16, 49, 16, 15, 3, @bbsCfg.inetFTPPassive, Topic + 'Allow passive data transfers'); Form.Execute; Form.Free; @@ -344,11 +345,11 @@ Begin VerticalLine (46, 11, 15); - Form.AddBol ('U', ' Use Telnet Server', 27, 11, 48, 11, 19, 3, @Config.inetTNUse, Topic + 'Enable Telnet server'); - Form.AddByte ('N', ' Telnet Nodes', 32, 12, 48, 12, 14, 3, 1, 255, @Config.inetTNNodes, Topic + 'Max telnet nodes to allow'); - Form.AddWord ('P', ' Server Port', 33, 13, 48, 13, 13, 5, 0, 65535, @Config.inetTNPort, Topic + 'Telnet Server port'); - Form.AddByte ('D', ' Dupe IP Limit', 31, 14, 48, 14, 15, 3, 1, 255, @Config.inetTNDupes, Topic + 'Max connections with same IP'); - Form.AddBol ('S', ' Start Hidden', 32, 15, 48, 15, 14, 3, @Config.inetTNHidden, Topic + 'Hide node windows (Windows)'); + Form.AddBol ('U', ' Use Telnet Server', 27, 11, 48, 11, 19, 3, @bbsCfg.inetTNUse, Topic + 'Enable Telnet server'); + Form.AddByte ('N', ' Telnet Nodes', 32, 12, 48, 12, 14, 3, 1, 255, @bbsCfg.inetTNNodes, Topic + 'Max telnet nodes to allow'); + Form.AddWord ('P', ' Server Port', 33, 13, 48, 13, 13, 5, 0, 65535, @bbsCfg.inetTNPort, Topic + 'Telnet Server port'); + Form.AddByte ('D', ' Dupe IP Limit', 31, 14, 48, 14, 15, 3, 1, 255, @bbsCfg.inetTNDupes, Topic + 'Max connections with same IP'); + Form.AddBol ('S', ' Start Hidden', 32, 15, 48, 15, 14, 3, @bbsCfg.inetTNHidden, Topic + 'Hide node windows (Windows)'); Form.Execute; Form.Free; @@ -374,12 +375,12 @@ Begin VerticalLine (45, 10, 15); - Form.AddBol ('U', ' Use Server', 33, 10, 47, 10, 12, 3, @Config.inetPOP3Use, Topic + 'Enable POP3 server'); - Form.AddWord ('P', ' Server Port', 32, 11, 47, 11, 13, 5, 0, 65535, @Config.inetPOP3Port, Topic + 'POP3 Server port'); - Form.AddByte ('N', ' Max Connections', 28, 12, 47, 12, 17, 3, 1, 255, @Config.inetPOP3Max, Topic + 'Max Connections'); - Form.AddByte ('I', ' Dupe IP Limit', 30, 13, 47, 13, 15, 3, 1, 255, @Config.inetPOP3Dupes, Topic + 'Max connections with same IP'); - Form.AddWord ('T', ' Timeout', 36, 14, 47, 14, 9, 5, 0, 65535, @Config.inetPOP3Timeout, Topic + 'Connection timeout (seconds)'); - Form.AddBol ('D', ' Delete', 37, 15, 47, 15, 8, 3, @Config.inetPOP3Delete, Topic + 'Delete email on retreive'); + Form.AddBol ('U', ' Use Server', 33, 10, 47, 10, 12, 3, @bbsCfg.inetPOP3Use, Topic + 'Enable POP3 server'); + Form.AddWord ('P', ' Server Port', 32, 11, 47, 11, 13, 5, 0, 65535, @bbsCfg.inetPOP3Port, Topic + 'POP3 Server port'); + Form.AddByte ('N', ' Max Connections', 28, 12, 47, 12, 17, 3, 1, 255, @bbsCfg.inetPOP3Max, Topic + 'Max Connections'); + Form.AddByte ('I', ' Dupe IP Limit', 30, 13, 47, 13, 15, 3, 1, 255, @bbsCfg.inetPOP3Dupes, Topic + 'Max connections with same IP'); + Form.AddWord ('T', ' Timeout', 36, 14, 47, 14, 9, 5, 0, 65535, @bbsCfg.inetPOP3Timeout, Topic + 'Connection timeout (seconds)'); + Form.AddBol ('D', ' Delete', 37, 15, 47, 15, 8, 3, @bbsCfg.inetPOP3Delete, Topic + 'Delete email on retreive'); Form.Execute; Form.Free; @@ -405,12 +406,12 @@ Begin VerticalLine (45, 10, 15); - Form.AddBol ('U', ' Use Server', 33, 10, 47, 10, 12, 3, @Config.inetBINKPUse, Topic + 'Enable BINKP server'); - Form.AddWord ('P', ' Server Port', 32, 11, 47, 11, 13, 5, 0, 65535, @Config.inetBINKPPort, Topic + 'BINKP Server port'); - Form.AddByte ('N', ' Max Connections', 28, 12, 47, 12, 17, 3, 1, 255, @Config.inetBINKPMax, Topic + 'Max Connections'); - Form.AddByte ('I', ' Dupe IP Limit', 30, 13, 47, 13, 15, 3, 1, 255, @Config.inetBINKPDupes, Topic + 'Max connections with same IP'); - Form.AddWord ('T', ' Timeout', 36, 14, 47, 14, 9, 5, 0, 65535, @Config.inetBINKPTimeout, Topic + 'Connection timeout (seconds)'); - Form.AddBol ('F', ' Force CRAM-MD5', 29, 15, 47, 15, 16, 3, @Config.inetBINKPCram5, Topic + 'Force CRAM-MD5 auth'); + Form.AddBol ('U', ' Use Server', 33, 10, 47, 10, 12, 3, @bbsCfg.inetBINKPUse, Topic + 'Enable BINKP server'); + Form.AddWord ('P', ' Server Port', 32, 11, 47, 11, 13, 5, 0, 65535, @bbsCfg.inetBINKPPort, Topic + 'BINKP Server port'); + Form.AddByte ('N', ' Max Connections', 28, 12, 47, 12, 17, 3, 1, 255, @bbsCfg.inetBINKPMax, Topic + 'Max Connections'); + Form.AddByte ('I', ' Dupe IP Limit', 30, 13, 47, 13, 15, 3, 1, 255, @bbsCfg.inetBINKPDupes, Topic + 'Max connections with same IP'); + Form.AddWord ('T', ' Timeout', 36, 14, 47, 14, 9, 5, 0, 65535, @bbsCfg.inetBINKPTimeout, Topic + 'Connection timeout (seconds)'); + Form.AddBol ('F', ' Force CRAM-MD5', 29, 15, 47, 15, 16, 3, @bbsCfg.inetBINKPCram5, Topic + 'Force CRAM-MD5 auth'); Form.Execute; Form.Free; @@ -436,11 +437,11 @@ Begin VerticalLine (45, 10, 14); - Form.AddBol ('U', ' Use Server', 33, 10, 47, 10, 12, 3, @Config.inetSMTPUse, Topic + 'Enable SMTP server'); - Form.AddWord ('P', ' Server Port', 32, 11, 47, 11, 13, 5, 0, 65535, @Config.inetSMTPPort, Topic + 'Server port'); - Form.AddByte ('N', ' Max Connections', 28, 12, 47, 12, 17, 3, 1, 255, @Config.inetSMTPMax, Topic + 'Max Connections'); - Form.AddByte ('I', ' Dupe IP Limit', 30, 13, 47, 13, 15, 3, 1, 255, @Config.inetSMTPDupes, Topic + 'Max connections with same IP'); - Form.AddWord ('T', ' Timeout', 36, 14, 47, 14, 9, 5, 0, 65535, @Config.inetSMTPTimeout, Topic + 'Connection timeout (seconds)'); + Form.AddBol ('U', ' Use Server', 33, 10, 47, 10, 12, 3, @bbsCfg.inetSMTPUse, Topic + 'Enable SMTP server'); + Form.AddWord ('P', ' Server Port', 32, 11, 47, 11, 13, 5, 0, 65535, @bbsCfg.inetSMTPPort, Topic + 'Server port'); + Form.AddByte ('N', ' Max Connections', 28, 12, 47, 12, 17, 3, 1, 255, @bbsCfg.inetSMTPMax, Topic + 'Max Connections'); + Form.AddByte ('I', ' Dupe IP Limit', 30, 13, 47, 13, 15, 3, 1, 255, @bbsCfg.inetSMTPDupes, Topic + 'Max connections with same IP'); + Form.AddWord ('T', ' Timeout', 36, 14, 47, 14, 9, 5, 0, 65535, @bbsCfg.inetSMTPTimeout, Topic + 'Connection timeout (seconds)'); Form.Execute; Form.Free; @@ -466,11 +467,11 @@ Begin VerticalLine (45, 10, 14); - Form.AddBol ('U', ' Use Server', 33, 10, 47, 10, 12, 3, @Config.inetNNTPUse, Topic + 'Enable NNTP server'); - Form.AddWord ('P', ' Server Port', 32, 11, 47, 11, 13, 5, 0, 65535, @Config.inetNNTPPort, Topic + 'Server port'); - Form.AddByte ('N', ' Max Connections', 28, 12, 47, 12, 17, 3, 1, 255, @Config.inetNNTPMax, Topic + 'Max Connections'); - Form.AddByte ('I', ' Dupe IP Limit', 30, 13, 47, 13, 15, 3, 1, 255, @Config.inetNNTPDupes, Topic + 'Max connections with same IP'); - Form.AddWord ('T', ' Timeout', 36, 14, 47, 14, 9, 5, 0, 65535, @Config.inetNNTPTimeout, Topic + 'Connection timeout (seconds)'); + Form.AddBol ('U', ' Use Server', 33, 10, 47, 10, 12, 3, @bbsCfg.inetNNTPUse, Topic + 'Enable NNTP server'); + Form.AddWord ('P', ' Server Port', 32, 11, 47, 11, 13, 5, 0, 65535, @bbsCfg.inetNNTPPort, Topic + 'Server port'); + Form.AddByte ('N', ' Max Connections', 28, 12, 47, 12, 17, 3, 1, 255, @bbsCfg.inetNNTPMax, Topic + 'Max Connections'); + Form.AddByte ('I', ' Dupe IP Limit', 30, 13, 47, 13, 15, 3, 1, 255, @bbsCfg.inetNNTPDupes, Topic + 'Max connections with same IP'); + Form.AddWord ('T', ' Timeout', 36, 14, 47, 14, 9, 5, 0, 65535, @bbsCfg.inetNNTPTimeout, Topic + 'Connection timeout (seconds)'); Form.Execute; Form.Free; @@ -497,27 +498,27 @@ Begin VerticalLine (27, 7, 17); VerticalLine (65, 7, 14); - Form.AddBol ('C', ' List Compression', 9, 7, 29, 7, 18, 3, @Config.MCompress, Topic + 'Compress numbers in area list?'); - Form.AddByte ('I', ' List Columns', 13, 8, 29, 8, 14, 3, 1, 2, @Config.MColumns, Topic + 'Columns in area list'); - Form.AddBol ('S', ' Show Message Header', 6, 9, 29, 9, 21, 3, @Config.MShowHeader, Topic + 'Redisplay header after each page'); - Form.AddBol ('B', ' Bases in Group List', 6, 10, 29, 10, 21, 3, @Config.MShowBases, Topic + 'Calculate bases in group list?'); - Form.AddByte ('X', ' Max AutoSig Lines', 8, 11, 29, 11, 19, 3, 1, 99, @Config.MaxAutoSig, Topic + 'Max autosig lines'); - Form.AddBol ('S', ' Force NL Match', 11, 12, 29, 12, 16, 3, @Config.ForceNodeList, Topic + 'Force nodelist lookup match when sending netmail?'); - Form.AddStr ('R', ' Ext Reply ACS', 12, 13, 29, 13, 15, 20, 30, @Config.AcsExtReply, Topic + 'ACS: Allow users to select reply base'); - Form.AddStr ('A', ' Attachment ACS', 11, 14, 29, 14, 16, 20, 30, @Config.AcsFileAttach, Topic + 'ACS: Allow file attachments'); - Form.AddBol ('T', ' External FSE', 13, 15, 29, 15, 14, 3, @Config.FSEditor, Topic + 'Use external editor'); - Form.AddStr ('F', ' FSE Command Line', 9, 16, 29, 16, 18, 40, 60, @Config.FSCommand, Topic + 'FSE command line'); - Form.AddStr ('D', ' Default Origin', 11, 17, 29, 17, 16, 40, 50, @Config.Origin, Topic + 'Origin line for new bases'); -// Form.AddStr ('2', ' Default Domain', 11, 18, 29, 18, 16, 8, 8, @Config.DefDomain, Topic + 'Default echomail domain'); + Form.AddBol ('C', ' List Compression', 9, 7, 29, 7, 18, 3, @bbsCfg.MCompress, Topic + 'Compress numbers in area list?'); + Form.AddByte ('I', ' List Columns', 13, 8, 29, 8, 14, 3, 1, 2, @bbsCfg.MColumns, Topic + 'Columns in area list'); + Form.AddBol ('S', ' Show Message Header', 6, 9, 29, 9, 21, 3, @bbsCfg.MShowHeader, Topic + 'Redisplay header after each page'); + Form.AddBol ('B', ' Bases in Group List', 6, 10, 29, 10, 21, 3, @bbsCfg.MShowBases, Topic + 'Calculate bases in group list?'); + Form.AddByte ('X', ' Max AutoSig Lines', 8, 11, 29, 11, 19, 3, 1, 99, @bbsCfg.MaxAutoSig, Topic + 'Max autosig lines'); + Form.AddBol ('S', ' Force NL Match', 11, 12, 29, 12, 16, 3, @bbsCfg.ForceNodeList, Topic + 'Force nodelist lookup match when sending netmail?'); + Form.AddStr ('R', ' Ext Reply ACS', 12, 13, 29, 13, 15, 20, 30, @bbsCfg.AcsExtReply, Topic + 'ACS: Allow users to select reply base'); + Form.AddStr ('A', ' Attachment ACS', 11, 14, 29, 14, 16, 20, 30, @bbsCfg.AcsFileAttach, Topic + 'ACS: Allow file attachments'); + Form.AddBol ('T', ' External FSE', 13, 15, 29, 15, 14, 3, @bbsCfg.FSEditor, Topic + 'Use external editor'); + Form.AddStr ('F', ' FSE Command Line', 9, 16, 29, 16, 18, 40, 60, @bbsCfg.FSCommand, Topic + 'FSE command line'); + Form.AddStr ('D', ' Default Origin', 11, 17, 29, 17, 16, 40, 50, @bbsCfg.Origin, Topic + 'Origin line for new bases'); +// Form.AddStr ('2', ' Default Domain', 11, 18, 29, 18, 16, 8, 8, @bbsCfg.DefDomain, Topic + 'Default echomail domain'); - Form.AddAttr ('Q', ' Quote Color', 52, 7, 67, 7, 13, @Config.ColorQuote, Topic + 'Color for quoted text'); - Form.AddAttr ('E', ' Text Color' , 53, 8, 67, 8, 12, @Config.ColorText, Topic + 'Color for message text'); - Form.AddAttr ('O', ' Tear Color' , 53, 9, 67, 9, 12, @Config.ColorTear, Topic + 'Color for tear line'); - Form.AddAttr ('L', ' Origin Color', 51, 10, 67, 10, 14, @Config.ColorOrigin, Topic + 'Color for origin line'); - Form.AddAttr ('K', ' Kludge Color', 51, 11, 67, 11, 14, @Config.ColorKludge, Topic + 'Color for kludge line'); - Form.AddBol ('N', ' Netmail Crash', 50, 12, 67, 12, 15, 3, @Config.NetCrash, Topic + 'Use netmail crash flag'); - Form.AddBol ('M', ' Netmail Hold', 51, 13, 67, 13, 14, 3, @Config.NetHold, Topic + 'Use netmail hold flag'); - Form.AddBol ('1', ' Netmail Killsent', 47, 14, 67, 14, 18, 3, @Config.NetKillsent, Topic + 'Use netmail killsent flag'); + Form.AddAttr ('Q', ' Quote Color', 52, 7, 67, 7, 13, @bbsCfg.ColorQuote, Topic + 'Color for quoted text'); + Form.AddAttr ('E', ' Text Color' , 53, 8, 67, 8, 12, @bbsCfg.ColorText, Topic + 'Color for message text'); + Form.AddAttr ('O', ' Tear Color' , 53, 9, 67, 9, 12, @bbsCfg.ColorTear, Topic + 'Color for tear line'); + Form.AddAttr ('L', ' Origin Color', 51, 10, 67, 10, 14, @bbsCfg.ColorOrigin, Topic + 'Color for origin line'); + Form.AddAttr ('K', ' Kludge Color', 51, 11, 67, 11, 14, @bbsCfg.ColorKludge, Topic + 'Color for kludge line'); + Form.AddBol ('N', ' Netmail Crash', 50, 12, 67, 12, 15, 3, @bbsCfg.NetCrash, Topic + 'Use netmail crash flag'); + Form.AddBol ('M', ' Netmail Hold', 51, 13, 67, 13, 14, 3, @bbsCfg.NetHold, Topic + 'Use netmail hold flag'); + Form.AddBol ('1', ' Netmail Killsent', 47, 14, 67, 14, 18, 3, @bbsCfg.NetKillsent, Topic + 'Use netmail killsent flag'); Form.Execute; Form.Free; @@ -543,14 +544,14 @@ Begin VerticalLine (39, 7, 14); - Form.AddBol ('A', ' Allow New Users', 22, 7, 41, 7, 17, 3, @Config.AllowNewUsers, Topic); - Form.AddByte ('S', ' Security', 29, 8, 41, 8, 10, 3, 1, 255, @Config.NewUserSec, Topic); - Form.AddPass ('P', ' Password', 29, 9, 41, 9, 10, 15, 15, @Config.NewUserPW, Topic); - Form.AddBol ('N', ' New User Feedback', 20, 10, 41, 10, 19, 3, @Config.NewUserEmail, Topic); - Form.AddBol ('U', ' Use USA Phone', 24, 11, 41, 11, 15, 3, @Config.UseUSAPhone, Topic); - Form.AddTog ('E', ' User Name Format', 21, 12, 41, 12, 18, 8, 0, 3, 'As_Typed Upper Lower Proper', @Config.UserNameFormat, Topic); - Form.AddWord ('T', ' Start Msg Group', 22, 13, 41, 13, 17, 5, 0, 65535, @Config.StartMGroup, Topic); - Form.AddWord ('R', ' Start File Group', 21, 14, 41, 14, 18, 5, 0, 65535, @Config.StartFGroup, Topic); + Form.AddBol ('A', ' Allow New Users', 22, 7, 41, 7, 17, 3, @bbsCfg.AllowNewUsers, Topic); + Form.AddByte ('S', ' Security', 29, 8, 41, 8, 10, 3, 1, 255, @bbsCfg.NewUserSec, Topic); + Form.AddPass ('P', ' Password', 29, 9, 41, 9, 10, 15, 15, @bbsCfg.NewUserPW, Topic); + Form.AddBol ('N', ' New User Feedback', 20, 10, 41, 10, 19, 3, @bbsCfg.NewUserEmail, Topic); + Form.AddBol ('U', ' Use USA Phone', 24, 11, 41, 11, 15, 3, @bbsCfg.UseUSAPhone, Topic); + Form.AddTog ('E', ' User Name Format', 21, 12, 41, 12, 18, 8, 0, 3, 'As_Typed Upper Lower Proper', @bbsCfg.UserNameFormat, Topic); + Form.AddWord ('T', ' Start Msg Group', 22, 13, 41, 13, 17, 5, 0, 65535, @bbsCfg.StartMGroup, Topic); + Form.AddWord ('R', ' Start File Group', 21, 14, 41, 14, 18, 5, 0, 65535, @bbsCfg.StartFGroup, Topic); Form.Execute; Form.Free; @@ -577,30 +578,30 @@ Begin VerticalLine (25, 7, 19); VerticalLine (58, 7, 16); - Form.AddBol ('A', ' Ask Theme', 14, 7, 27, 7, 11, 3, @Config.AskTheme, Topic); - Form.AddBol ('S', ' Ask Real Name', 10, 8, 27, 8, 15, 3, @Config.AskRealName, Topic); - Form.AddBol ('K', ' Ask Alias', 14, 9, 27, 9, 11, 3, @Config.AskAlias, Topic); - Form.AddBol ('T', ' Ask Street', 13, 10, 27, 10, 12, 3, @Config.AskStreet, Topic); - Form.AddBol ('C', ' Ask City/State', 9, 11, 27, 11, 16, 3, @Config.AskCityState, Topic); - Form.AddBol ('Z', ' Ask ZipCode', 12, 12, 27, 12, 13, 3, @Config.AskZipCode, Topic); - Form.AddBol ('H', ' Ask Home Phone', 9, 13, 27, 13, 16, 3, @Config.AskHomePhone, Topic); - Form.AddBol ('E', ' Ask Cell Phone', 9, 14, 27, 14, 16, 3, @Config.AskDataPhone, Topic); - Form.AddBol ('I', ' Ask Birthdate', 10, 15, 27, 15, 15, 3, @Config.AskBirthdate, Topic); - Form.AddBol ('G', ' Ask Gender', 13, 16, 27, 16, 12, 3, @Config.AskGender, Topic); - Form.AddBol ('M', ' Ask Email', 14, 17, 27, 17, 11, 3, @Config.AskEmail, Topic); - Form.AddBol ('L', ' Ask UserNote', 11, 18, 27, 18, 14, 3, @Config.AskUserNote, Topic); - Form.AddBol ('R', ' Ask Screensize', 9, 19, 27, 19, 16, 3, @Config.AskScreenSize, Topic); + Form.AddBol ('A', ' Ask Theme', 14, 7, 27, 7, 11, 3, @bbsCfg.AskTheme, Topic); + Form.AddBol ('S', ' Ask Real Name', 10, 8, 27, 8, 15, 3, @bbsCfg.AskRealName, Topic); + Form.AddBol ('K', ' Ask Alias', 14, 9, 27, 9, 11, 3, @bbsCfg.AskAlias, Topic); + Form.AddBol ('T', ' Ask Street', 13, 10, 27, 10, 12, 3, @bbsCfg.AskStreet, Topic); + Form.AddBol ('C', ' Ask City/State', 9, 11, 27, 11, 16, 3, @bbsCfg.AskCityState, Topic); + Form.AddBol ('Z', ' Ask ZipCode', 12, 12, 27, 12, 13, 3, @bbsCfg.AskZipCode, Topic); + Form.AddBol ('H', ' Ask Home Phone', 9, 13, 27, 13, 16, 3, @bbsCfg.AskHomePhone, Topic); + Form.AddBol ('E', ' Ask Cell Phone', 9, 14, 27, 14, 16, 3, @bbsCfg.AskDataPhone, Topic); + Form.AddBol ('I', ' Ask Birthdate', 10, 15, 27, 15, 15, 3, @bbsCfg.AskBirthdate, Topic); + Form.AddBol ('G', ' Ask Gender', 13, 16, 27, 16, 12, 3, @bbsCfg.AskGender, Topic); + Form.AddBol ('M', ' Ask Email', 14, 17, 27, 17, 11, 3, @bbsCfg.AskEmail, Topic); + Form.AddBol ('L', ' Ask UserNote', 11, 18, 27, 18, 14, 3, @bbsCfg.AskUserNote, Topic); + Form.AddBol ('R', ' Ask Screensize', 9, 19, 27, 19, 16, 3, @bbsCfg.AskScreenSize, Topic); - Form.AddTog ('D', ' Date Type', 47, 7, 60, 7, 11, 8, 1, 4, 'MM/DD/YY DD/MM/YY YY/DD/MM Ask', @Config.UserDateType, Topic); - Form.AddTog ('O', ' Hot Keys', 48, 8, 60, 8, 10, 3, 0, 2, 'No Yes Ask', @Config.UserHotKeys, Topic); - Form.AddTog ('P', ' Protocol', 48, 9, 60, 9, 10, 3, 0, 2, 'No Yes Ask', @Config.UserProtocol, Topic); - Form.AddTog ('N', ' Node Chat', 47, 10, 60, 10, 11, 6, 0, 2, 'Normal ANSI Ask', @Config.UserFullChat, Topic); - Form.AddTog ('F', ' File List', 47, 11, 60, 11, 11, 6, 0, 2, 'Normal ANSI Ask', @Config.UserFileList, Topic); - Form.AddTog ('1', ' Message Reader', 42, 12, 60, 12, 16, 6, 0, 2, 'Normal ANSI Ask', @Config.UserReadType, Topic); - Form.AddTog ('2', ' Read at Index', 43, 13, 60, 13, 15, 3, 0, 2, 'No Yes Ask', @Config.UserReadIndex, Topic); - Form.AddTog ('3', ' Email at Index', 42, 14, 60, 14, 16, 3, 0, 2, 'No Yes Ask', @Config.UserMailIndex, Topic); - Form.AddTog ('4', ' Message Editor', 42, 15, 60, 15, 16, 4, 0, 2, 'Line Full Ask', @Config.UserEditorType, Topic); - Form.AddTog ('5', ' Quote Mode', 46, 16, 60, 16, 12, 6, 0, 2, 'Line Window Ask', @Config.UserQuoteWin, Topic); + Form.AddTog ('D', ' Date Type', 47, 7, 60, 7, 11, 8, 1, 4, 'MM/DD/YY DD/MM/YY YY/DD/MM Ask', @bbsCfg.UserDateType, Topic); + Form.AddTog ('O', ' Hot Keys', 48, 8, 60, 8, 10, 3, 0, 2, 'No Yes Ask', @bbsCfg.UserHotKeys, Topic); + Form.AddTog ('P', ' Protocol', 48, 9, 60, 9, 10, 3, 0, 2, 'No Yes Ask', @bbsCfg.UserProtocol, Topic); + Form.AddTog ('N', ' Node Chat', 47, 10, 60, 10, 11, 6, 0, 2, 'Normal ANSI Ask', @bbsCfg.UserFullChat, Topic); + Form.AddTog ('F', ' File List', 47, 11, 60, 11, 11, 6, 0, 2, 'Normal ANSI Ask', @bbsCfg.UserFileList, Topic); + Form.AddTog ('1', ' Message Reader', 42, 12, 60, 12, 16, 6, 0, 2, 'Normal ANSI Ask', @bbsCfg.UserReadType, Topic); + Form.AddTog ('2', ' Read at Index', 43, 13, 60, 13, 15, 3, 0, 2, 'No Yes Ask', @bbsCfg.UserReadIndex, Topic); + Form.AddTog ('3', ' Email at Index', 42, 14, 60, 14, 16, 3, 0, 2, 'No Yes Ask', @bbsCfg.UserMailIndex, Topic); + Form.AddTog ('4', ' Message Editor', 42, 15, 60, 15, 16, 4, 0, 2, 'Line Full Ask', @bbsCfg.UserEditorType, Topic); + Form.AddTog ('5', ' Quote Mode', 46, 16, 60, 16, 12, 6, 0, 2, 'Line Window Ask', @bbsCfg.UserQuoteWin, Topic); Form.Execute; Form.Free; @@ -629,12 +630,12 @@ Begin VerticalLine (64, 7, 10); For Count := 1 to 8 Do - Form.AddStr (strI2S(Count)[1], ' F' + strI2S(Count) + ' Macro', 7, 6 + Count, 19, 6 + Count, 10, 30, 60, @Config.SysopMacro[Count], Topic); + Form.AddStr (strI2S(Count)[1], ' F' + strI2S(Count) + ' Macro', 7, 6 + Count, 19, 6 + Count, 10, 30, 60, @bbsCfg.SysopMacro[Count], Topic); - Form.AddBol ('S', ' Status Bar', 52, 7, 66, 7, 12, 3, @Config.UseStatusBar, Topic); - Form.AddAttr ('1', ' Color 1', 55, 8, 66, 8, 9, @Config.StatusColor1, Topic); - Form.AddAttr ('2', ' Color 2', 55, 9, 66, 9, 9, @Config.StatusColor2, Topic); - Form.AddAttr ('3', ' Color 3', 55, 10, 66, 10, 9, @Config.StatusColor3, Topic); + Form.AddBol ('S', ' Status Bar', 52, 7, 66, 7, 12, 3, @bbsCfg.UseStatusBar, Topic); + Form.AddAttr ('1', ' Color 1', 55, 8, 66, 8, 9, @bbsCfg.StatusColor1, Topic); + Form.AddAttr ('2', ' Color 2', 55, 9, 66, 9, 9, @bbsCfg.StatusColor2, Topic); + Form.AddAttr ('3', ' Color 3', 55, 10, 66, 10, 9, @bbsCfg.StatusColor3, Topic); Form.Execute; Form.Free; diff --git a/mystic/bbs_cfg_theme.pas b/mystic/bbs_cfg_theme.pas index f5795e6..53345e2 100644 --- a/mystic/bbs_cfg_theme.pas +++ b/mystic/bbs_cfg_theme.pas @@ -17,6 +17,7 @@ Uses bbs_Ansi_MenuInput, bbs_Core, bbs_Common, + bbs_dataBase, bbs_Cfg_Common; (* @@ -45,7 +46,7 @@ Var Temp : String; DoneNum : Integer; Begin - Assign (PromptFile, Config.DataPath + Theme.FileName + '.thm'); + Assign (PromptFile, bbsCfg.DataPath + Theme.FileName + '.thm'); {$I-} ReWrite (PromptFile); {$I+} @@ -54,7 +55,7 @@ Begin Exit; End; - Assign (InFile, Config.SystemPath + Theme.FileName + '.txt'); + Assign (InFile, bbsCfg.SystemPath + Theme.FileName + '.txt'); Reset (InFile); ShowMsgBox (3, 'Compiling: '); @@ -151,13 +152,13 @@ Var Begin Result := False; - Assign (InFile, Config.DataPath + Theme.FileName + '.txt'); + Assign (InFile, bbsCfg.DataPath + Theme.FileName + '.txt'); SetTextBuf (InFile, Buffer, SizeOf(Buffer)); {$I-} Reset (InFile); {$I+} If IoResult <> 0 Then Begin - ShowMsgBox (0, 'Unable to open ' + Config.DataPath + Theme.FileName + '.txt'); + ShowMsgBox (0, 'Unable to open ' + bbsCfg.DataPath + Theme.FileName + '.txt'); Exit; End; @@ -571,7 +572,7 @@ Begin If ShowMsgBox(1, 'Save changes?') Then Begin // Saved := True; - Assign (InFile, Config.DataPath + Theme.FileName + '.txt'); + Assign (InFile, bbsCfg.DataPath + Theme.FileName + '.txt'); ReWrite (InFile); For Count := 1 to TotalText Do Begin @@ -741,7 +742,7 @@ Var Copied : RecTheme; HasCopy : Boolean = False; Begin - Assign (ThemeFile, Config.DataPath + 'theme.dat'); + Assign (ThemeFile, bbsCfg.DataPath + 'theme.dat'); If Not ioReset(ThemeFile, Sizeof(RecTheme), fmRWDN) Then If Not ioReWrite(ThemeFile, SizeOf(RecTheme), fmRWDN) Then @@ -789,10 +790,10 @@ Begin Flags := ThmAllowANSI OR ThmAllowASCII OR ThmFallback OR ThmLightbarYN; FileName := 'new'; Desc := FileName; - TextPath := Config.TextPath; - MenuPath := Config.MenuPath; - ScriptPath := Config.ScriptPath; - TemplatePath := Config.TextPath; + TextPath := bbsCfg.TextPath; + MenuPath := bbsCfg.MenuPath; + ScriptPath := bbsCfg.ScriptPath; + TemplatePath := bbsCfg.TextPath; Colors[0] := 1; Colors[1] := 9; Colors[2] := 11; diff --git a/mystic/bbs_cfg_useredit.pas b/mystic/bbs_cfg_useredit.pas index ff9dae1..e714de8 100644 --- a/mystic/bbs_cfg_useredit.pas +++ b/mystic/bbs_cfg_useredit.pas @@ -3,7 +3,8 @@ Unit bbs_Cfg_UserEdit; Interface Uses - bbs_Common; + bbs_Common, + bbs_dataBase; Procedure Configuration_EditUser (Var U: RecUser); Procedure Configuration_UserEditor; @@ -175,9 +176,9 @@ Begin Form.Clear; For Temp := 1 to 9 Do - Form.AddStr (strI2S(Temp)[1], ' ' + Config.OptionalField[Temp].Desc, 7, 5 + Temp, 23, 5 + Temp, 14, 33, 60, @U.OptionData[Temp], Topic + 'User optional field #' + strI2S(Temp)); + Form.AddStr (strI2S(Temp)[1], ' ' + bbsCfg.OptionalField[Temp].Desc, 7, 5 + Temp, 23, 5 + Temp, 14, 33, 60, @U.OptionData[Temp], Topic + 'User optional field #' + strI2S(Temp)); - Form.AddStr ('0', ' ' + Config.OptionalField[10].Desc, 7, 15, 23, 15, 14, 33, 60, @U.OptionData[10], Topic + 'User optional field #10'); + Form.AddStr ('0', ' ' + bbsCfg.OptionalField[10].Desc, 7, 15, 23, 15, 14, 33, 60, @U.OptionData[10], Topic + 'User optional field #10'); End; 6 : Begin Form.Clear; @@ -275,10 +276,10 @@ Var End; Begin - Assign (UserFile, Config.DataPath + 'users.dat'); + Assign (UserFile, bbsCfg.DataPath + 'users.dat'); If Not ioReset(UserFile, SizeOf(RecUser), fmRWDN) Then - If (FileExist(Config.DataPath + 'users.dat')) OR NOT + If (FileExist(bbsCfg.DataPath + 'users.dat')) OR NOT (ioReWrite(UserFile, SizeOf(RecUser), fmRWDN)) Then Exit; diff --git a/mystic/bbs_common.pas b/mystic/bbs_common.pas index 18258c2..9c35e60 100644 --- a/mystic/bbs_common.pas +++ b/mystic/bbs_common.pas @@ -17,9 +17,8 @@ Uses m_Output, m_Input, m_DateTime, - m_FileIO; - -{$I RECORDS.PAS} + m_FileIO, + bbs_dataBase; // This unit is very old (like 1994) and its functions need to be phased out // This is the stuff that hasn't been worked into a class somewhere or @@ -41,7 +40,6 @@ Var Room : RoomRec; LastOnFile : File of RecLastOn; LastOn : RecLastOn; - Config : RecConfig; StatusPtr : Byte = 1; Function DrawAccessFlags (Var Flags: AccessFlagType) : String; @@ -241,7 +239,7 @@ Begin Screen.SetWindowTitle (WinConsoleTitle + strI2S(Session.NodeNum)); {$ENDIF} - DirChange(Config.SystemPath); + DirChange(bbsCfg.SystemPath); If Session.User.UserNum <> -1 Then Begin Reset (Session.User.UserFile); @@ -265,35 +263,35 @@ End; {$IFNDEF UNIX} Procedure UpdateStatusLine (Mode: Byte; Str: String); Begin - If Not Config.UseStatusBar Then Exit; + If Not bbsCfg.UseStatusBar Then Exit; Screen.SetWindow (1, 1, 80, 25, False); Case Mode of - 0 : Screen.WriteXY (1, 25, Config.StatusColor3, strPadC(Str, 80, ' ')); + 0 : Screen.WriteXY (1, 25, bbsCfg.StatusColor3, strPadC(Str, 80, ' ')); 1 : Begin - Screen.WriteXY ( 1, 25, Config.StatusColor1, ' Alias ' + strRep(' ', 35) + 'Age SecLevel TimeLeft '); - Screen.WriteXY ( 8, 25, Config.StatusColor2, Session.User.ThisUser.Handle + ' #' + strI2S(Session.User.ThisUser.PermIdx)); - Screen.WriteXY (47, 25, Config.StatusColor2, Session.User.ThisUser.Gender + '/' + strI2S(DaysAgo(Session.User.ThisUser.Birthday, 1) DIV 365)); - Screen.WriteXY (62, 25, Config.StatusColor2, strI2S(Session.User.ThisUser.Security)); - Screen.WriteXY (76, 25, Config.StatusColor2, strI2S(Session.TimeLeft)); + Screen.WriteXY ( 1, 25, bbsCfg.StatusColor1, ' Alias ' + strRep(' ', 35) + 'Age SecLevel TimeLeft '); + Screen.WriteXY ( 8, 25, bbsCfg.StatusColor2, Session.User.ThisUser.Handle + ' #' + strI2S(Session.User.ThisUser.PermIdx)); + Screen.WriteXY (47, 25, bbsCfg.StatusColor2, Session.User.ThisUser.Gender + '/' + strI2S(DaysAgo(Session.User.ThisUser.Birthday, 1) DIV 365)); + Screen.WriteXY (62, 25, bbsCfg.StatusColor2, strI2S(Session.User.ThisUser.Security)); + Screen.WriteXY (76, 25, bbsCfg.StatusColor2, strI2S(Session.TimeLeft)); End; 2 : Begin - Screen.WriteXY ( 1, 25, Config.StatusColor1, ' Email ' + strRep(' ', 35) + ' Location ' + strRep(' ', 27) + ' '); - Screen.WriteXY ( 8, 25, Config.StatusColor2, strPadR(Session.User.ThisUser.Email, 36, ' ')); - Screen.WriteXY (53, 25, Config.StatusColor2, strPadR(Session.User.ThisUser.City, 27, ' ')); + Screen.WriteXY ( 1, 25, bbsCfg.StatusColor1, ' Email ' + strRep(' ', 35) + ' Location ' + strRep(' ', 27) + ' '); + Screen.WriteXY ( 8, 25, bbsCfg.StatusColor2, strPadR(Session.User.ThisUser.Email, 36, ' ')); + Screen.WriteXY (53, 25, bbsCfg.StatusColor2, strPadR(Session.User.ThisUser.City, 27, ' ')); End; 3 : Begin - Screen.WriteXY ( 1, 25, Config.StatusColor1, ' IP ' + strRep(' ', 19) + ' Host ' + strRep(' ', 49) + ' '); - Screen.WriteXY ( 5, 25, Config.StatusColor2, Session.UserIPInfo); - Screen.WriteXY (31, 25, Config.StatusColor2, strPadR(Session.UserHostInfo, 49, ' ')); + Screen.WriteXY ( 1, 25, bbsCfg.StatusColor1, ' IP ' + strRep(' ', 19) + ' Host ' + strRep(' ', 49) + ' '); + Screen.WriteXY ( 5, 25, bbsCfg.StatusColor2, Session.UserIPInfo); + Screen.WriteXY (31, 25, bbsCfg.StatusColor2, strPadR(Session.UserHostInfo, 49, ' ')); End; 4 : Begin - Screen.WriteXY ( 1, 25, Config.StatusColor1, ' Flags 1 ' + strRep(' ', 35) + ' Flags 2 '); - Screen.WriteXY (10, 25, Config.StatusColor2, DrawAccessFlags(Session.User.ThisUser.AF1)); - Screen.WriteXY (54, 25, Config.StatusColor2, DrawAccessFlags(Session.User.ThisUser.AF2)); + Screen.WriteXY ( 1, 25, bbsCfg.StatusColor1, ' Flags 1 ' + strRep(' ', 35) + ' Flags 2 '); + Screen.WriteXY (10, 25, bbsCfg.StatusColor2, DrawAccessFlags(Session.User.ThisUser.AF1)); + Screen.WriteXY (54, 25, bbsCfg.StatusColor2, DrawAccessFlags(Session.User.ThisUser.AF2)); End; - 5 : Screen.WriteXY (1, 25, Config.StatusColor3, ' ALTS/C Chat ALTE Edit ALTH Hangup ALT+/- Time ALTB Info ALTT Bar ALTV Screen '); + 5 : Screen.WriteXY (1, 25, bbsCfg.StatusColor3, ' ALTS/C Chat ALTE Edit ALTH Hangup ALT+/- Time ALTB Info ALTT Bar ALTV Screen '); End; Screen.SetWindow (1, 1, 80, 24, False); @@ -307,9 +305,9 @@ Begin {E} #18 : If (Not Session.InUserEdit) and (Session.User.UserNum <> -1) Then Configuration_LocalUserEdit; {T} #20 : Begin - Config.UseStatusBar := Not Config.UseStatusBar; + bbsCfg.UseStatusBar := Not bbsCfg.UseStatusBar; - If Not Config.UseStatusBar Then Begin + If Not bbsCfg.UseStatusBar Then Begin Screen.WriteXY (1, 25, 0, strRep(' ', 80)); Screen.SetWindow (1, 1, 80, 25, False); End Else @@ -335,7 +333,7 @@ Begin End; #59.. #62 : Begin - Session.io.InMacroStr := Config.SysopMacro[Ord(Cmd) - 58]; + Session.io.InMacroStr := bbsCfg.SysopMacro[Ord(Cmd) - 58]; If Session.io.InMacroStr[1] = '!' Then ExecuteMPL (NIL, Copy(Session.io.InMacroStr, 2, 255)) diff --git a/mystic/bbs_core.pas b/mystic/bbs_core.pas index accb22d..f47c23e 100644 --- a/mystic/bbs_core.pas +++ b/mystic/bbs_core.pas @@ -13,7 +13,8 @@ Uses m_Strings, m_Pipe, m_DateTime, - BBS_Common, + bbs_dataBase, +// BBS_Common, BBS_IO, BBS_MsgBase, BBS_User, @@ -174,7 +175,7 @@ Var Begin If User.ThisUser.Flags AND UserNoHistory <> 0 Then Exit; - Assign (HistoryFile, Config.DataPath + 'history.dat'); + Assign (HistoryFile, bbsCfg.DataPath + 'history.dat'); If Not ioReset (HistoryFile, SizeOf(RecHistory), fmRWDN) Then ioReWrite(HistoryFile, SizeOf(RecHistory), fmRWDW); @@ -222,7 +223,7 @@ Begin MinCheck := -1; - Assign (EventFile, Config.DataPath + 'event.dat'); + Assign (EventFile, bbsCfg.DataPath + 'event.dat'); If Not ioReset (EventFile, SizeOf(RecEvent), fmRWDN) Then ioReWrite (EventFile, SizeOf(RecEvent), fmRWDN); @@ -245,7 +246,7 @@ Procedure TBBSCore.SystemLog (Str: String); Var tLOG : Text; Begin - Assign (tLOG, Config.LogsPath + 'sysop.' + strI2S(NodeNum)); + Assign (tLOG, bbsCfg.LogsPath + 'sysop.' + strI2S(NodeNum)); {$I-} Append(tLOG); {$I+} If IoResult <> 0 Then ReWrite (tLOG); @@ -380,7 +381,7 @@ Begin Result := False; FileMode := 66; - Assign (PromptFile, Config.DataPath + Theme.FileName + '.txt'); + Assign (PromptFile, bbsCfg.DataPath + Theme.FileName + '.txt'); SetTextBuf (PromptFile, Buffer); {$I-} Reset (PromptFile); {$I+} diff --git a/mystic/bbs_doors.pas b/mystic/bbs_doors.pas index 0c76679..68c6b10 100644 --- a/mystic/bbs_doors.pas +++ b/mystic/bbs_doors.pas @@ -19,6 +19,7 @@ Uses m_DateTime, m_FileIO, bbs_Common, + bbs_dataBase, bbs_Core, bbs_User; @@ -63,16 +64,16 @@ Begin Assign (tFile, Session.TempPath + 'DORINFO1.DEF'); Rewrite (tFile); - Write (tFile, Config.BBSName + Ending); + Write (tFile, bbsCfg.BBSName + Ending); - A := Pos(' ', Config.SysopName); + A := Pos(' ', bbsCfg.SysopName); If A > 0 Then - Write (tFile, Copy(Config.SysopName, 1, A-1) + Ending) + Write (tFile, Copy(bbsCfg.SysopName, 1, A-1) + Ending) Else - Write (tFile, Config.SysopName + Ending); + Write (tFile, bbsCfg.SysopName + Ending); If A > 0 Then - Write (tFile, Copy(Config.SysopName, A+1, 255) + Ending) + Write (tFile, Copy(bbsCfg.SysopName, A+1, 255) + Ending) Else Write (tFile, '' + Ending); @@ -124,15 +125,15 @@ Begin Write (tFile, Ord(Not Session.LocalMode), Ending); Write (tFile, (Session.TimeLeft * 60), Ending); Write (tFile, Session.Theme.TextPath + Ending); - Write (tFile, Config.DataPath + Ending); + Write (tFile, bbsCfg.DataPath + Ending); Write (tFile, 'SYSOP.', Session.NodeNum, Ending); If Session.LocalMode Then Write (tFile, 'KB' + Ending) Else Write (tFile, Session.Baud, Ending); Write (tFile, '1', Ending); - Write (tFile, Config.BBSName + Ending); - Write (tFile, Config.SysopName + Ending); + Write (tFile, bbsCfg.BBSName + Ending); + Write (tFile, bbsCfg.SysopName + Ending); Write (tFile, TimerSeconds, Ending); Write (tFile, '0' + Ending); {seconds online} Write (tFile, Session.User.ThisUser.ULk, Ending); @@ -186,9 +187,9 @@ Begin Write (tFile, Session.User.ThisUser.DLk, Ending); Write (tFile, Session.User.Security.MaxDLk, Ending); Write (tFile, Session.User.ThisUser.Birthday, Ending); - Write (tFile, Config.DataPath + Ending); - Write (tFile, Config.MsgsPath + Ending); - Write (tFile, Config.SysopName + Ending); + Write (tFile, bbsCfg.DataPath + Ending); + Write (tFile, bbsCfg.MsgsPath + Ending); + Write (tFile, bbsCfg.SysopName + Ending); Write (tFile, Session.User.ThisUser.Handle + Ending); Write (tFile, TimeDos2Str(Session.NextEvent.ExecTime, 0) + Ending); {next event start time hh:mm} Write (tFile, 'Y' + Ending); {error-free connection} @@ -253,7 +254,7 @@ Begin PI) Then WaitForSingleObject (PI.hProcess, INFINITE); - DirChange(Config.SystemPath); + DirChange(bbsCfg.SystemPath); If Session.User.UserNum <> -1 Then Begin Reset (Session.User.UserFile); diff --git a/mystic/bbs_edit_ansi.pas b/mystic/bbs_edit_ansi.pas index b1fd78f..3ebc967 100644 --- a/mystic/bbs_edit_ansi.pas +++ b/mystic/bbs_edit_ansi.pas @@ -90,6 +90,7 @@ Implementation Uses m_Strings, bbs_Core, + bbs_DataBase, bbs_Common, bbs_Ansi_MenuBox; diff --git a/mystic/bbs_edit_line.pas b/mystic/bbs_edit_line.pas index 8c691de..43cfa1c 100644 --- a/mystic/bbs_edit_line.pas +++ b/mystic/bbs_edit_line.pas @@ -13,6 +13,7 @@ Uses m_Strings, m_FileIO, bbs_Common, + bbs_DataBase, bbs_Core, bbs_FileBase, bbs_User; diff --git a/mystic/bbs_filebase.pas b/mystic/bbs_filebase.pas index 1637bac..0b84da6 100644 --- a/mystic/bbs_filebase.pas +++ b/mystic/bbs_filebase.pas @@ -20,6 +20,7 @@ Uses m_FileIO, m_DateTime, bbs_Common, + bbs_dataBase, bbs_General, bbs_NodeInfo, bbs_Ansi_MenuBox, @@ -566,7 +567,7 @@ Var ShellDOS (Path, Session.TempPath + 'xfer.bat'); {$ENDIF} - DirChange (Config.SystemPath); + DirChange (bbsCfg.SystemPath); End; Begin @@ -664,7 +665,7 @@ Begin If Length(Session.Msgs.MsgText[FDir.DescLines]) > mysMaxFileDescLen Then Session.Msgs.MsgText[FDir.DescLines][0] := Chr(mysMaxFileDescLen); - If FDir.DescLines = Config.MaxFileDesc Then Break; + If FDir.DescLines = bbsCfg.MaxFileDesc Then Break; End; Close (DizFile); @@ -689,7 +690,7 @@ Begin If Temp.NewScan = 2 Then Dec (Temp.NewScan); - Assign (FScanFile, Config.DataPath + FBase.FileName + '.scn'); + Assign (FScanFile, bbsCfg.DataPath + FBase.FileName + '.scn'); {$I-} Reset (FScanFile); {$I+} If IoResult <> 0 Then ReWrite (FScanFile); @@ -713,7 +714,7 @@ Begin If FScan.NewScan = 2 Then Dec(FScan.NewScan); - Assign (FScanFile, Config.DataPath + FBase.FileName + '.scn'); + Assign (FScanFile, bbsCfg.DataPath + FBase.FileName + '.scn'); {$I-} Reset (FScanFile); {$I+} If IoResult <> 0 Then Exit; @@ -877,10 +878,10 @@ Begin AreaFiles := 0; AreaSize := 0; - Assign (FDirFile, Config.DataPath + FBase.FileName + '.dir'); + Assign (FDirFile, bbsCfg.DataPath + FBase.FileName + '.dir'); {$I-} Reset (FDirFile); {$I+} If IoResult = 0 Then Begin - Assign (DF, Config.DataPath + FBase.FileName + '.des'); + Assign (DF, bbsCfg.DataPath + FBase.FileName + '.des'); {$I-} Reset (DF, 1); {$I+} If IoResult <> 0 Then ReWrite (DF, 1); @@ -1027,8 +1028,8 @@ Begin If FDir.Flags And FDirOffline <> 0 Then Exit; - If (FDir.Flags And FDirInvalid <> 0) And Not Session.User.Access(Config.AcsDLUnvalid) Then Exit; - If (FDir.Flags And FDirFailed <> 0) And Not Session.User.Access(Config.AcsDLFailed) Then Exit; + If (FDir.Flags And FDirInvalid <> 0) And Not Session.User.Access(bbsCfg.AcsDLUnvalid) Then Exit; + If (FDir.Flags And FDirFailed <> 0) And Not Session.User.Access(bbsCfg.AcsDLFailed) Then Exit; If (FDir.Flags And FDirFree <> 0) or (Session.User.ThisUser.Flags and UserNoRatio <> 0) or (FBase.Flags and FBFreeFiles <> 0) Then Begin Result := 0; @@ -1168,10 +1169,10 @@ Var Session.io.OutFull (Session.GetPrompt(201)); - If (Total MOD Config.FColumns = 0) And (Total > 0) Then Session.io.OutRawLn(''); + If (Total MOD bbsCfg.FColumns = 0) And (Total > 0) Then Session.io.OutRawLn(''); End; - If EOF(FBaseFile) and (Total MOD Config.FColumns <> 0) Then Session.io.OutRawLn(''); + If EOF(FBaseFile) and (Total MOD bbsCfg.FColumns <> 0) Then Session.io.OutRawLn(''); If (Session.io.PausePtr = Session.User.ThisUser.ScreenSize) and (Session.io.AllowPause) Then Case Session.io.MorePrompt of @@ -1539,7 +1540,7 @@ Begin If Session.User.Access(FBase.ListACS) Then Begin - Assign (FDirFile, Config.DataPath + FBase.FileName + '.dir'); + Assign (FDirFile, bbsCfg.DataPath + FBase.FileName + '.dir'); {$I-} Reset (FDirFile); {$I+} If IoResult <> 0 Then ReWrite (FDirFile); @@ -1624,7 +1625,7 @@ Begin If Session.User.Access(FBase.ListACS) and Session.User.Access(FBase.DLACS) Then Begin - Assign (FDirFile, Config.DataPath + FBase.FileName + '.dir'); + Assign (FDirFile, bbsCfg.DataPath + FBase.FileName + '.dir'); {$I-} Reset (FDirFile); {$I+} If IoResult <> 0 Then ReWrite (FDirFile); @@ -1883,7 +1884,7 @@ Begin Session.io.PromptInfo[2] := FBase.Name; Session.io.PromptInfo[3] := '0'; - Assign (TDirFile, Config.DataPath + FBase.FileName + '.dir'); + Assign (TDirFile, bbsCfg.DataPath + FBase.FileName + '.dir'); {$I-} Reset (TDirFile); {$I+} If IoResult = 0 Then Begin @@ -1893,10 +1894,10 @@ Begin Session.io.OutFull (Session.GetPrompt(34)); - If (Listed MOD Config.FColumns = 0) and (Listed > 0) Then Session.io.OutRawLn(''); + If (Listed MOD bbsCfg.FColumns = 0) and (Listed > 0) Then Session.io.OutRawLn(''); End; - If EOF(FBaseFile) and (Listed MOD Config.FColumns <> 0) Then Session.io.OutRawLn(''); + If EOF(FBaseFile) and (Listed MOD bbsCfg.FColumns <> 0) Then Session.io.OutRawLn(''); If (Session.io.PausePtr = Session.User.ThisUser.ScreenSize) and (Session.io.AllowPause) Then Case Session.io.MorePrompt of @@ -1921,7 +1922,7 @@ Var Compress : Boolean; Begin Old := FBase; - Compress := Config.FCompress; + Compress := bbsCfg.FCompress; If (Data = '+') or (Data = '-') Then Begin Reset (FBaseFile); @@ -1992,7 +1993,7 @@ Begin Case Session.io.OneKeyRange(#13 + '?Q', 1, Total) of '?': Begin - Compress := Config.FCompress; + Compress := bbsCfg.FCompress; Total := ListFileAreas(Compress); End; Else @@ -2074,9 +2075,9 @@ Var OkFile := False; If (FDir.Flags And FDirDeleted <> 0) Then Exit; - If (FDir.Flags AND FDirOffline <> 0) And (Not Session.User.Access(Config.AcsSeeOffline)) Then Exit; - If (FDir.Flags And FDirInvalid <> 0) And (Not Session.User.Access(Config.AcsSeeUnvalid)) Then Exit; - If (FDir.Flags And FDirFailed <> 0) And (Not Session.User.Access(Config.AcsSeeFailed)) Then Exit; + If (FDir.Flags AND FDirOffline <> 0) And (Not Session.User.Access(bbsCfg.AcsSeeOffline)) Then Exit; + If (FDir.Flags And FDirInvalid <> 0) And (Not Session.User.Access(bbsCfg.AcsSeeUnvalid)) Then Exit; + If (FDir.Flags And FDirFailed <> 0) And (Not Session.User.Access(bbsCfg.AcsSeeFailed)) Then Exit; Case Mode of 1 : If Data <> '' Then @@ -2291,7 +2292,7 @@ Var Case ListType of 0 : If First Then Begin First := False; - If Config.FShowHeader or (CurPage = 1) Then Begin + If bbsCfg.FShowHeader or (CurPage = 1) Then Begin Session.io.PausePtr := 1; Session.io.OutFullLn(Session.GetPrompt(41)) End Else Begin @@ -2850,7 +2851,7 @@ Begin Set_Node_Action (Session.GetPrompt(350)); - Assign (FDirFile, Config.DataPath + FBase.FileName + '.dir'); + Assign (FDirFile, bbsCfg.DataPath + FBase.FileName + '.dir'); {$I-} Reset (FDirFile); {$I+} If IoResult <> 0 Then Begin @@ -2864,7 +2865,7 @@ Begin Exit; End; - Assign (DataFile, Config.DataPath + FBase.FileName + '.des'); + Assign (DataFile, bbsCfg.DataPath + FBase.FileName + '.des'); {$I-} Reset (DataFile, 1); {$I+} If IoResult <> 0 Then ReWrite (DataFile, 1); @@ -2926,7 +2927,7 @@ Var TempFile : File of RecFileList; Temp : RecFileList; Begin - Assign (TempFile, Config.DataPath + FBase.FileName + '.dir'); + Assign (TempFile, bbsCfg.DataPath + FBase.FileName + '.dir'); {$I-} Reset (TempFile); {$I+} If IoResult <> 0 Then ReWrite (TempFile); @@ -2968,14 +2969,14 @@ Procedure TFileBase.GetFileDescription (FN : String); Var A : Byte; Begin - Session.io.PromptInfo[1] := strI2S(Config.MaxFileDesc); + Session.io.PromptInfo[1] := strI2S(bbsCfg.MaxFileDesc); Session.io.PromptInfo[2] := FN; Session.io.OutFullLn (Session.GetPrompt(72)); - FDir.DescLines := Config.MaxFileDesc; + FDir.DescLines := bbsCfg.MaxFileDesc; - For A := 1 to Config.MaxFileDesc Do Begin + For A := 1 to bbsCfg.MaxFileDesc Do Begin Session.io.PromptInfo[1] := strZero(A); Session.io.OutFull (Session.GetPrompt(207)); Session.Msgs.MsgText[A] := Session.io.GetInput(mysMaxFileDescLen, mysMaxFileDescLen, 11, ''); @@ -3017,11 +3018,11 @@ Begin Found := False; SavedIgnore := Session.User.IgnoreGroup; - If Config.UploadBase > 0 Then Begin + If bbsCfg.UploadBase > 0 Then Begin Session.User.IgnoreGroup := True; { just in case ul area is in another group } Reset (FBaseFile); - {$I-} Seek (FBaseFile, Config.UploadBase - 1); {$I+} + {$I-} Seek (FBaseFile, bbsCfg.UploadBase - 1); {$I+} If IoResult = 0 Then Read (FBaseFile, FBase); @@ -3050,9 +3051,9 @@ Begin Exit; End; - If Config.FreeUL > 0 Then Begin + If bbsCfg.FreeUL > 0 Then Begin {$IFDEF UNIX} - If DiskFree(0) DIV 1024 < Config.FreeUL Then Begin + If DiskFree(0) DIV 1024 < bbsCfg.FreeUL Then Begin Session.io.OutFullLn (Session.GetPrompt(81)); FBase := OLD; Exit; @@ -3060,7 +3061,7 @@ Begin {$ELSE} FSplit (FBase.Path, D, N, E); - If DiskFree(Ord(UpCase(D[1])) - 64) DIV 1024 < Config.FreeUL Then Begin + If DiskFree(Ord(UpCase(D[1])) - 64) DIV 1024 < bbsCfg.FreeUL Then Begin Session.io.OutFullLn (Session.GetPrompt(81)); FBase := OLD; Exit; @@ -3085,10 +3086,10 @@ Begin Exit; End; - If Config.FDupeScan > 0 Then Begin + If bbsCfg.FDupeScan > 0 Then Begin Session.io.OutFull (Session.GetPrompt(70)); - If IsDupeFile(FileName, Config.FDupeScan = 2) Then Begin + If IsDupeFile(FileName, bbsCfg.FDupeScan = 2) Then Begin Session.io.OutFullLn (Session.GetPrompt(205)); FBase := OLD; Exit; @@ -3112,7 +3113,7 @@ Begin Session.io.OutFull (Session.GetPrompt(376)); - Assign (DataFile, Config.DataPath + FBase.FileName + '.des'); + Assign (DataFile, bbsCfg.DataPath + FBase.FileName + '.des'); {$I-} Reset (DataFile, 1); {$I+} If IoResult <> 0 Then ReWrite(DataFile, 1); @@ -3154,10 +3155,10 @@ Begin FDir.Downloads := 0; FDir.Rating := 0; - If Config.FDupeScan > 0 Then Begin + If bbsCfg.FDupeScan > 0 Then Begin Session.io.OutFull (Session.GetPrompt(377)); - If IsDupeFile(FileName, Config.FDupeScan = 2) Then Begin + If IsDupeFile(FileName, bbsCfg.FDupeScan = 2) Then Begin Session.io.OutFullLn (Session.GetPrompt(378)); Continue; @@ -3165,30 +3166,30 @@ Begin Session.io.OutFullLn (Session.GetPrompt(379)); End; - If Config.TestUploads and (Config.TestCmdLine <> '') Then Begin + If bbsCfg.TestUploads and (bbsCfg.TestCmdLine <> '') Then Begin Session.io.OutFull (Session.GetPrompt(206)); Temp := ''; A := 1; - While A <= Length(Config.TestCmdLine) Do Begin - If Config.TestCmdLine[A] = '%' Then Begin + While A <= Length(bbsCfg.TestCmdLine) Do Begin + If bbsCfg.TestCmdLine[A] = '%' Then Begin Inc(A); {$IFDEF UNIX} - If Config.TestCmdLine[A] = '0' Then Temp := Temp + '1' Else + If bbsCfg.TestCmdLine[A] = '0' Then Temp := Temp + '1' Else {$ELSE} - If Config.TestCmdLine[A] = '0' Then Temp := Temp + strI2S(TIOSocket(Session.Client).FSocketHandle) Else + If bbsCfg.TestCmdLine[A] = '0' Then Temp := Temp + strI2S(TIOSocket(Session.Client).FSocketHandle) Else {$ENDIF} - If Config.TestCmdLine[A] = '1' Then Temp := Temp + '1' Else - If Config.TestCmdLine[A] = '2' Then Temp := Temp + '38400' Else - If Config.TestCmdLine[A] = '3' Then Temp := Temp + FullName {FBase.Path + FileName}; + If bbsCfg.TestCmdLine[A] = '1' Then Temp := Temp + '1' Else + If bbsCfg.TestCmdLine[A] = '2' Then Temp := Temp + '38400' Else + If bbsCfg.TestCmdLine[A] = '3' Then Temp := Temp + FullName {FBase.Path + FileName}; End Else - Temp := Temp + Config.TestCmdLine[A]; + Temp := Temp + bbsCfg.TestCmdLine[A]; Inc(A); End; - If ShellDOS('', Temp) <> Config.TestPassLevel Then Begin + If ShellDOS('', Temp) <> bbsCfg.TestPassLevel Then Begin Session.io.OutFullLn (Session.GetPrompt(35)); Session.SystemLog (FileName + ' has failed upload test'); @@ -3198,7 +3199,7 @@ Begin Session.io.OutFullLn (Session.GetPrompt(55)); End; - If Config.ImportDIZ Then Begin + If bbsCfg.ImportDIZ Then Begin Session.io.OutFull (Session.GetPrompt(380)); If ImportDIZ(FileName) Then @@ -3223,9 +3224,9 @@ Begin FDir.Size := 0; End; - If Not Session.User.Access(Config.AcsValidate) Then FDir.Flags := FDir.Flags Or FDirInvalid; + If Not Session.User.Access(bbsCfg.AcsValidate) Then FDir.Flags := FDir.Flags Or FDirInvalid; - Assign (FDirFile, Config.DataPath + FBase.FileName + '.dir'); + Assign (FDirFile, bbsCfg.DataPath + FBase.FileName + '.dir'); {$I-} Reset (FDirFile); {$I+} If IoResult <> 0 Then ReWrite (FDirFile); @@ -3266,8 +3267,8 @@ Begin Copied := True; - If Config.FreeCDROM > 0 Then - Copied := DiskFree(0) DIV 1024 >= Config.FreeCDROM; + If bbsCfg.FreeCDROM > 0 Then + Copied := DiskFree(0) DIV 1024 >= bbsCfg.FreeCDROM; If Copied Then Copied := DiskFree(0) >= FDir.Size; @@ -3308,7 +3309,7 @@ Begin Session.io.OutFullLn (Session.GetPrompt(77)); - Assign (FDirFile, Config.DataPath + FBase.FileName + '.dir'); + Assign (FDirFile, bbsCfg.DataPath + FBase.FileName + '.dir'); {$I-} Reset (FDirFile); {$I+} If IoResult <> 0 Then ReWrite (FDirFile); @@ -3468,7 +3469,7 @@ Begin Seek (FBaseFile, Batch[A].Area - 1); Read (FBaseFile, Old); - Assign (FDirFile, Config.DataPath + Old.FileName + '.dir'); + Assign (FDirFile, bbsCfg.DataPath + Old.FileName + '.dir'); Reset (FDirFile); While Not Eof(FDirFile) Do Begin @@ -3734,7 +3735,7 @@ Begin Session.SystemLog ('File DIR editor'); - Assign (FDirFile, Config.DataPath + FBase.FileName + '.dir'); + Assign (FDirFile, bbsCfg.DataPath + FBase.FileName + '.dir'); {$I-} Reset (FDirFile); {$I+} If IoResult <> 0 Then Begin Session.io.OutFullLn (Session.GetPrompt(40)); @@ -3747,7 +3748,7 @@ Begin Exit; End; - Assign (DataFile, Config.DataPath + FBase.FileName + '.des'); + Assign (DataFile, bbsCfg.DataPath + FBase.FileName + '.des'); {$I-} Reset (DataFile, 1); {$I+} If IoResult <> 0 Then ReWrite (DataFile, 1); @@ -3873,11 +3874,11 @@ Begin A := FilePos(FDirFile); Close (FDirFile); - Assign (FDirFile, Config.DataPath + FBase.FileName + '.dir'); + Assign (FDirFile, bbsCfg.DataPath + FBase.FileName + '.dir'); {$I-} Reset (FDirFile); {$I+} If IoResult <> 0 Then ReWrite(FDirFile); - Assign (DataFile2, Config.DataPath + FBase.FileName + '.des'); + Assign (DataFile2, bbsCfg.DataPath + FBase.FileName + '.des'); {$I-} Reset (DataFile2, 1); {$I+} If IoResult <> 0 Then ReWrite (DataFile2, 1); @@ -3898,7 +3899,7 @@ Begin FBase := Old; - Assign (FDirFile, Config.DataPath + FBase.FileName + '.dir'); + Assign (FDirFile, bbsCfg.DataPath + FBase.FileName + '.dir'); Reset (FDirFile); Seek (FDirFile, A - 1); Read (FDirFile, FDir); @@ -3952,7 +3953,7 @@ Begin End; '!' : Begin Seek (DataFile, FDir.DescPtr); - If FDir.DescLines > Config.MaxFileDesc Then FDir.DescLines := Config.MaxFileDesc; + If FDir.DescLines > bbsCfg.MaxFileDesc Then FDir.DescLines := bbsCfg.MaxFileDesc; For A := 1 to FDir.DescLines Do Begin BlockRead (DataFile, Session.Msgs.MsgText[A][0], 1); @@ -3962,7 +3963,7 @@ Begin Temp := 'Description Editor'; B := FDir.DescLines; - If Editor(B, mysMaxFileDescLen, Config.MaxFileDesc, False, fn_tplTextEdit, Temp) Then Begin + If Editor(B, mysMaxFileDescLen, bbsCfg.MaxFileDesc, False, fn_tplTextEdit, Temp) Then Begin FDir.DescLines := B; FDir.DescPtr := FileSize(DataFile); @@ -4017,7 +4018,7 @@ Var Session.io.OutFullLn ('|CR|03Processing |14|FB|03...'); - Assign (DataFile, Config.DataPath + FBase.FileName + '.des'); + Assign (DataFile, bbsCfg.DataPath + FBase.FileName + '.des'); {$I-} Reset (DataFile, 1); {$I+} If IoResult = 0 Then @@ -4025,7 +4026,7 @@ Var Else ReWrite (DataFile, 1); - Assign (FDirFile, Config.DataPath + FBase.FileName + '.dir'); + Assign (FDirFile, bbsCfg.DataPath + FBase.FileName + '.dir'); FindFirst(FBase.Path + '*', Archive, DirInfo); @@ -4070,7 +4071,7 @@ Var FDir.DescLines := 0; FDir.Rating := 0; - If Config.ImportDIZ Then + If bbsCfg.ImportDIZ Then If Not ImportDIZ(DirInfo.Name) Then If Not AutoArea Then GetFileDescription(DirInfo.Name); @@ -4085,23 +4086,23 @@ Var For A := 1 to FDir.DescLines Do BlockWrite (DataFile, Session.Msgs.MsgText[A][0], Length(Session.Msgs.MsgText[A]) + 1); - If Config.TestUploads and (Config.TestCmdLine <> '') Then Begin + If bbsCfg.TestUploads and (bbsCfg.TestCmdLine <> '') Then Begin Temp := ''; A := 1; - While A <= Length(Config.TestCmdLine) Do Begin - If Config.TestCmdLine[A] = '%' Then Begin + While A <= Length(bbsCfg.TestCmdLine) Do Begin + If bbsCfg.TestCmdLine[A] = '%' Then Begin Inc(A); - If Config.TestCmdLine[A] = '1' Then Temp := Temp + '1' Else - If Config.TestCmdLine[A] = '2' Then Temp := Temp + '38400' Else - If Config.TestCmdLine[A] = '3' Then Temp := Temp + FBase.Path + FDir.FileName; + If bbsCfg.TestCmdLine[A] = '1' Then Temp := Temp + '1' Else + If bbsCfg.TestCmdLine[A] = '2' Then Temp := Temp + '38400' Else + If bbsCfg.TestCmdLine[A] = '3' Then Temp := Temp + FBase.Path + FDir.FileName; End Else - Temp := Temp + Config.TestCmdLine[A]; + Temp := Temp + bbsCfg.TestCmdLine[A]; Inc (A); End; - If ShellDOS('', Temp) <> Config.TestPassLevel Then + If ShellDOS('', Temp) <> bbsCfg.TestPassLevel Then FDir.Flags := FDir.Flags OR FDirFailed; End; diff --git a/mystic/bbs_general.pas b/mystic/bbs_general.pas index 6b2ac7c..c6c9c9f 100644 --- a/mystic/bbs_general.pas +++ b/mystic/bbs_general.pas @@ -12,6 +12,7 @@ Uses bbs_SysopChat, {$ENDIF} bbs_Common, + bbs_database, bbs_Edit_ANSI, bbs_Edit_Line; @@ -94,7 +95,7 @@ Var Flags : Char; TempSec : RecSecurity; Begin - Assign (Session.User.SecurityFile, Config.DataPath + 'security.dat'); + Assign (Session.User.SecurityFile, bbsCfg.DataPath + 'security.dat'); Reset (Session.User.SecurityFile); Seek (Session.User.SecurityFile, Sec - 1); Read (Session.User.SecurityFile, TempSec); @@ -132,9 +133,9 @@ Var Lines : Integer; Str : String; Begin - If Config.MaxAutoSig = 0 Then Exit; + If bbsCfg.MaxAutoSig = 0 Then Exit; - Assign (DF, Config.DataPath + 'autosig.dat'); + Assign (DF, bbsCfg.DataPath + 'autosig.dat'); If Session.User.ThisUser.SigLength > 0 Then Begin Reset (DF, 1); @@ -151,7 +152,7 @@ Begin Str := 'Signature Editor'; {++lang} - If Editor (Lines, 78, Config.MaxAutoSig, False, fn_tplMsgEdit, Str) Then Begin + If Editor (Lines, 78, bbsCfg.MaxAutoSig, False, fn_tplMsgEdit, Str) Then Begin {$I-} Reset (DF, 1); {$I+} If IoResult <> 0 Then ReWrite (DF, 1); @@ -175,7 +176,7 @@ Var S : String[79]; Begin If Session.User.ThisUser.SigLength > 0 Then Begin - Assign (DF, Config.DataPath + 'autosig.dat'); + Assign (DF, bbsCfg.DataPath + 'autosig.dat'); Reset (DF, 1); Seek (DF, Session.User.ThisUser.SigOffset); @@ -199,7 +200,7 @@ Var Count : Integer; Str : String; Begin - Assign (TF, Config.DataPath + 'quotes.dat'); + Assign (TF, bbsCfg.DataPath + 'quotes.dat'); SetTextBuf (TF, TxtBuf); {$I-} Reset (TF); {$I+} @@ -281,7 +282,7 @@ Begin End Else BBSList.Telnet := 'None'; //++lang - Assign (BBSFile, Config.DataPath + Name + '.bbi'); + Assign (BBSFile, bbsCfg.DataPath + Name + '.bbi'); {$I-} Reset(BBSFile); {$I+} If IoResult <> 0 Then ReWrite(BBSFile); @@ -344,7 +345,7 @@ Begin FileMode := 66; - Assign (BBSFile, Config.DataPath + Name + '.bbi'); + Assign (BBSFile, bbsCfg.DataPath + Name + '.bbi'); {$I-} Reset(BBSFile); {$I+} If IoResult <> 0 Then Begin Session.io.OutFullLn (Session.GetPrompt(291)); @@ -401,7 +402,7 @@ Begin Session.io.OutFullLn (Session.GetPrompt(265)); Session.io.OutFull (Session.GetPrompt(267)); Case Session.io.OneKey('DQV'#13, True) of - 'D' : If Session.User.Access(Config.AcsSysop) or (strUpper(BBSList.AddedBy) = strUpper(Session.User.ThisUser.Handle)) Then Begin + 'D' : If Session.User.Access(bbsCfg.AcsSysop) or (strUpper(BBSList.AddedBy) = strUpper(Session.User.ThisUser.Handle)) Then Begin If Session.io.GetYN(Session.GetPrompt(294), False) Then Begin BBSList.Deleted := True; Seek (BBSFile, FilePos(BBSFile) - 1); @@ -583,7 +584,7 @@ Begin FileMode := 66; - Assign (OneLineFile, Config.DataPath + 'oneliner.dat'); + Assign (OneLineFile, bbsCfg.DataPath + 'oneliner.dat'); {$I-} Reset (OneLineFile); {$I+} If IoResult <> 0 Then ReWrite (OneLineFile); @@ -950,7 +951,7 @@ Var Temp : RecHistory; Days : Word; Begin - Assign (Session.HistoryFile, Config.DataPath + 'history.dat'); + Assign (Session.HistoryFile, bbsCfg.DataPath + 'history.dat'); {$I-} Reset(Session.HistoryFile); {$I+} If IoResult <> 0 Then @@ -1502,7 +1503,7 @@ Var Temp : String; Count : Integer; Begin - If Forced or ((TimerMinutes DIV 60 >= Config.ChatStart) and (TimerMinutes DIV 60 <= Config.ChatEnd)) Then Begin + If Forced or ((TimerMinutes DIV 60 >= bbsCfg.ChatStart) and (TimerMinutes DIV 60 <= bbsCfg.ChatEnd)) Then Begin Session.io.OutFull (Session.GetPrompt(23)); Temp := Session.io.GetInput(50, 50, 11, ''); @@ -1539,9 +1540,9 @@ Begin Session.io.OutFull (Session.GetPrompt(28)); - If Config.ChatFeedback Then + If bbsCfg.ChatFeedback Then If Session.io.GetYN(Session.GetPrompt(178), False) Then - Session.Msgs.PostMessage (True, '/TO:' + strReplace(Config.SysopName, ' ', '_') + ' /SUBJ:Chat_Feedback'); + Session.Msgs.PostMessage (True, '/TO:' + strReplace(bbsCfg.SysopName, ' ', '_') + ' /SUBJ:Chat_Feedback'); End; {$ENDIF} diff --git a/mystic/bbs_io.pas b/mystic/bbs_io.pas index 627cea4..fcfdfcc 100644 --- a/mystic/bbs_io.pas +++ b/mystic/bbs_io.pas @@ -18,7 +18,8 @@ Uses m_FileIO, m_Strings, m_Term_Ansi, - bbs_Common; + bbs_Common, + bbs_dataBase; Const TBBSIOBufferSize = 4 * 1024 - 1; @@ -610,7 +611,7 @@ Begin LastMCIValue := 'TELNET'; {++lang } 'E' : LastMCIValue := ^G; 'I' : LastMCIValue := DateJulian2Str(TBBSCore(Core).User.ThisUser.Birthday, TBBSCore(Core).User.ThisUser.DateType); - 'N' : LastMCIValue := Config.BBSName; + 'N' : LastMCIValue := bbsCfg.BBSName; 'S' : OutBS(1, True); End; 'C' : Case Code[2] of @@ -643,6 +644,7 @@ Begin 'G' : LastMCIValue := TBBSCore(Core).FileBase.FGroup.Name; 'K' : LastMCIValue := strI2S(TBBSCore(Core).User.ThisUser.ULk); 'O' : LastMCIValue := DateDos2Str(TBBSCore(Core).User.ThisUser.FirstOn, TBBSCore(Core).User.ThisUser.DateType); + 'T' : LastMCIValue := strI2S(GetTotalFiles(TBBSCore(Core).FileBase.FBase)); 'U' : LastMCIValue := strI2S(TBBSCore(Core).User.ThisUser.ULs); End; 'H' : Case Code[2] of @@ -675,7 +677,7 @@ Begin 'E' : LastMCIValue := strI2S(TBBSCore(Core).User.ThisUser.Emails); 'G' : LastMCIValue := TBBSCore(Core).Msgs.Group.Name; 'L' : LastMCIValue := OutON(TBBSCore(Core).User.ThisUser.UseLBIndex); - 'N' : LastMCIValue := Config.NetDesc[TBBSCore(Core).Msgs.MBase.NetAddr]; + 'N' : LastMCIValue := bbsCfg.NetDesc[TBBSCore(Core).Msgs.MBase.NetAddr]; 'P' : LastMCIValue := strI2S(TBBSCore(Core).User.ThisUser.Posts); 'T' : LastMCIValue := strI2S(TBBSCore(Core).Msgs.GetTotalMessages(TBBSCore(Core).Msgs.MBase)); End; @@ -698,7 +700,7 @@ Begin 'I' : BufAddChar('|'); 'N' : Repeat Until GetKey <> ''; 'O' : AllowPause := False; - 'W' : LastMCIValue := strI2S(Config.PWChange); + 'W' : LastMCIValue := strI2S(bbsCfg.PWChange); End; 'Q' : Case Code[2] of 'A' : LastMCIValue := TBBSCore(Core).User.ThisUser.Archive; @@ -719,7 +721,7 @@ Begin 'D' : LastMCIValue := TBBSCore(Core).User.Security.Desc; 'K' : LastMCIValue := strI2S(TBBSCore(Core).User.Security.MaxDLK); 'L' : LastMCIValue := strI2S(TBBSCore(Core).User.ThisUser.Security); - 'N' : LastMCIValue := Config.SysopName; + 'N' : LastMCIValue := bbsCfg.SysopName; 'P' : Begin A := Round(TBBSCore(Core).User.Security.PCRatio / 100 * 100); LastMCIValue := strI2S(A); @@ -731,7 +733,7 @@ Begin '0'.. '9' : LastMCIValue := Attr2Ansi(Session.Theme.Colors[strS2I(Code[2])]); 'B' : LastMCIValue := strI2S(TBBSCore(Core).User.ThisUser.TimeBank); - 'C' : LastMCIValue := strI2S(Config.SystemCalls); + 'C' : LastMCIValue := strI2S(bbsCfg.SystemCalls); 'E' : If Graphics = 1 Then LastMCIValue := 'Ansi' Else LastMCIValue := 'Ascii'; //++lang 'I' : LastMCIValue := TimeDos2Str(CurDateDos, 1); 'L' : LastMCIValue := strI2S(TBBSCore(Core).TimeLeft); @@ -1228,7 +1230,7 @@ Begin End Else Begin If Not CheckFileInPath(Session.Theme.TextPath) Then If Session.Theme.Flags AND thmFallBack <> 0 Then Begin - If Not CheckFileInPath(Config.TextPath) Then Exit; + If Not CheckFileInPath(bbsCfg.TextPath) Then Exit; End Else Exit; End; @@ -1548,7 +1550,7 @@ Begin InMacro := False; If TBBSCore(Core).CheckTimeOut Then - If (Config.Inactivity > 0) and (Session.User.ThisUser.Flags And UserNoTimeOut = 0) and (TimerSeconds - TBBSCore(Core).TimeOut >= Config.Inactivity) Then Begin + If (bbsCfg.Inactivity > 0) and (Session.User.ThisUser.Flags And UserNoTimeOut = 0) and (TimerSeconds - TBBSCore(Core).TimeOut >= bbsCfg.Inactivity) Then Begin TBBSCore(Core).SystemLog('Inactivity timeout'); OutFullLn (TBBSCore(Core).GetPrompt(136)); Halt(0); @@ -1728,7 +1730,7 @@ Begin TBBSCore(Core).SystemLog ('Bad PW: ' + Temp); End; - Until Loop = Config.PWAttempts; + Until Loop = bbsCfg.PWAttempts; Result := False; End; @@ -1953,7 +1955,7 @@ Begin UseInField := False; If Mode = 8 Then - Case Config.UserNameFormat of + Case bbsCfg.UserNameFormat of 0 : Mode := 1; 1 : Mode := 2; 2 : Mode := 7; diff --git a/mystic/bbs_menudata.pas b/mystic/bbs_menudata.pas index 5792d5a..b69c2ac 100644 --- a/mystic/bbs_menudata.pas +++ b/mystic/bbs_menudata.pas @@ -6,7 +6,7 @@ Interface Uses m_Strings, - BBS_Common; + bbs_dataBase; Type TMenuData = Class diff --git a/mystic/bbs_menus.pas b/mystic/bbs_menus.pas index a44857e..ddf4f47 100644 --- a/mystic/bbs_menus.pas +++ b/mystic/bbs_menus.pas @@ -6,6 +6,7 @@ Interface Uses BBS_Common, + bbs_dataBase, BBS_MenuData, MPL_Execute; @@ -312,18 +313,18 @@ Begin Session.User.CreateNewUser(''); Session.User.UserLogon2; - MenuName := Config.MatrixMenu; + MenuName := bbsCfg.MatrixMenu; Result := True; End; End; 'C' : If Session.User.GetMatrixUser Then Begin - If Session.User.Access(Config.MatrixAcs) Then Begin - Session.io.PromptInfo[1] := Config.MatrixPW; + If Session.User.Access(bbsCfg.MatrixAcs) Then Begin + Session.io.PromptInfo[1] := bbsCfg.MatrixPW; Session.io.OutFull (Session.GetPrompt(270)); End Else Session.io.OutFull (Session.GetPrompt(271)); End; - 'L' : If Session.io.GetPW (Session.GetPrompt(272), Session.GetPrompt(423), Config.MatrixPW) Then Begin + 'L' : If Session.io.GetPW (Session.GetPrompt(272), Session.GetPrompt(423), bbsCfg.MatrixPW) Then Begin If Session.User.GetMatrixUser Then Begin Session.User.MatrixOK := True; Result := True; @@ -335,7 +336,7 @@ Begin PageForSysopChat (Pos('/F', strUpper(CmdData)) > 0) {$ENDIF}; End; '*' : Begin - If Not Session.io.GetPW (Session.GetPrompt(493), Session.GetPrompt(417), Config.SysopPW) Then Exit; + If Not Session.io.GetPW (Session.GetPrompt(493), Session.GetPrompt(417), bbsCfg.SysopPW) Then Exit; Case Cmd[2] of '#' : Begin @@ -1242,7 +1243,7 @@ Begin Result := False; If TBBSCore(Owner).Theme.Flags AND thmFallback <> 0 Then - Result := Data.Load (False, Config.MenuPath + MenuName + '.mnu'); + Result := Data.Load (False, bbsCfg.MenuPath + MenuName + '.mnu'); If Not Result Then Begin If Forced Then Begin @@ -1302,7 +1303,7 @@ Begin If Data.Info.Global Then If Not Data.Load (True, TBBSCore(Owner).Theme.MenuPath + 'global.mnu') Then If TBBSCore(Owner).Theme.Flags AND thmFallback <> 0 Then - Data.Load (True, Config.MenuPath + 'global.mnu'); + Data.Load (True, bbsCfg.MenuPath + 'global.mnu'); If Data.Info.InputType = 0 Then UseHotKeys := TBBSCore(Owner).User.ThisUser.HotKeys diff --git a/mystic/bbs_msgbase.pas b/mystic/bbs_msgbase.pas index 0534979..973c55c 100644 --- a/mystic/bbs_msgbase.pas +++ b/mystic/bbs_msgbase.pas @@ -8,6 +8,7 @@ Uses m_FileIO, m_DateTime, bbs_Common, + bbs_dataBase, bbs_General, bbs_MsgBase_ABS, bbs_MsgBase_JAM, @@ -138,8 +139,8 @@ Begin If Orig.Zone = Dest.Zone Then Exit; For Count := 1 to 30 Do - If Config.NetAddress[Count].Zone = Dest.Zone Then Begin - Result := Config.NetAddress[Count]; + If bbsCfg.NetAddress[Count].Zone = Dest.Zone Then Begin + Result := bbsCfg.NetAddress[Count]; Exit; End; @@ -186,7 +187,7 @@ Var HasList : Boolean; Addr : RecEchoMailAddr; Begin - HasList := FileExist(Config.DataPath + 'nodelist.txt'); + HasList := FileExist(bbsCfg.DataPath + 'nodelist.txt'); NodeList := TNodeListSearch.Create; If HasList Then @@ -230,7 +231,7 @@ Begin Session.io.PausePtr := 1; Session.io.AllowPause := True; - NodeList.ResetSearch (Config.DataPath + 'nodelist.txt', Result); + NodeList.ResetSearch (bbsCfg.DataPath + 'nodelist.txt', Result); While NodeList.FindNext(NodeData) Do Begin Case ListType of @@ -272,7 +273,7 @@ Begin Break; End; End Else - If (Listed = 0) And Not FromMenu And Not Config.ForceNodelist Then Begin + If (Listed = 0) And Not FromMenu And Not bbsCfg.ForceNodelist Then Begin If strStr2Addr(Result, Addr) Then Begin Session.io.PromptInfo[1] := strAddr2Str(Addr); Session.io.PromptInfo[7] := MsgTo; @@ -333,7 +334,7 @@ Var Begin Result := False; - Assign (F, Config.DataPath + 'mbases.dat'); + Assign (F, bbsCfg.DataPath + 'mbases.dat'); If Not ioReset(F, SizeOf(RecMessageBase), fmRWDN) Then Exit; @@ -348,7 +349,7 @@ Var F : File; Count : LongInt; Begin - If Not Config.MCompress Then Begin + If Not bbsCfg.MCompress Then Begin Result := GetBaseByNum(Num, TempBase); Exit; @@ -356,7 +357,7 @@ Begin Result := False; - Assign (F, Config.DataPath + 'mbases.dat'); + Assign (F, bbsCfg.DataPath + 'mbases.dat'); If Not ioReset(F, SizeOf(RecMessageBase), fmRWDN) Then Exit; @@ -379,7 +380,7 @@ Var Begin Result := False; - Assign (F, Config.DataPath + 'mbases.dat'); + Assign (F, bbsCfg.DataPath + 'mbases.dat'); If Not ioReset(F, SizeOf(RecMessageBase), fmRWDN) Then Exit; @@ -402,7 +403,7 @@ Var Begin Result := 0; - Assign (F, Config.DataPath + 'mbases.dat'); + Assign (F, bbsCfg.DataPath + 'mbases.dat'); If Not ioReset(F, SizeOf(RecMessageBase), fmRWDN) Then Exit; @@ -627,7 +628,7 @@ Var A : SmallInt; Begin If (MBase.NetType > 0) and (MBase.NetType <> 3) Then Begin - Msg^.DoStringLn (#1 + 'MSGID: ' + strAddr2Str(Config.NetAddress[MBase.NetAddr]) + ' ' + strI2H(CurDateDos, 8)); + Msg^.DoStringLn (#1 + 'MSGID: ' + strAddr2Str(bbsCfg.NetAddress[MBase.NetAddr]) + ' ' + strI2H(CurDateDos, 8)); If ReplyID <> '' Then Msg^.DoStringLn (#1 + 'REPLY: ' + ReplyID); @@ -638,7 +639,7 @@ Begin If (MBase.Flags AND MBAutoSigs <> 0) and Session.User.ThisUser.SigUse and (Session.User.ThisUser.SigLength > 0) Then Begin - Assign (DF, Config.DataPath + 'autosig.dat'); + Assign (DF, bbsCfg.DataPath + 'autosig.dat'); Reset (DF, 1); Seek (DF, Session.User.ThisUser.SigOffset); @@ -678,19 +679,19 @@ Begin Else Msg^.SetMailType(mmtEchoMail); - Msg^.SetOrig(Config.NetAddress[TempBase.NetAddr]); + Msg^.SetOrig(bbsCfg.NetAddress[TempBase.NetAddr]); Case TempBase.NetType of 1 : Begin - Assign (SemFile, Config.SemaPath + fn_SemFileEcho); + Assign (SemFile, bbsCfg.SemaPath + fn_SemFileEcho); If Session.ExitLevel > 5 Then Session.ExitLevel := 7 Else Session.ExitLevel := 5; End; 2 : Begin - Assign (SemFile, Config.SemaPath + fn_SemFileNews); + Assign (SemFile, bbsCfg.SemaPath + fn_SemFileNews); If Session.ExitLevel > 5 Then Session.ExitLevel := 7 Else Session.ExitLevel := 5; End; 3 : Begin - Assign (SemFile, Config.SemaPath + fn_SemFileNet); + Assign (SemFile, bbsCfg.SemaPath + fn_SemFileNet); If Session.ExitLevel = 5 Then Session.ExitLevel := 7 Else Session.ExitLevel := 6; End; End; @@ -745,9 +746,9 @@ Begin End; If Pos('NOLIST', strUpper(Data)) > 0 Then - Total := GetTotalBases(Config.MCompress) + Total := GetTotalBases(bbsCfg.MCompress) Else - Total := ListAreas(Config.MCompress); + Total := ListAreas(bbsCfg.MCompress); If Total = 0 Then Begin Session.io.OutFullLn (Session.GetPrompt(94)); @@ -761,7 +762,7 @@ Begin Case Session.io.OneKeyRange(#13 + '?Q', 1, Total) of #13, 'Q': Exit; - '?': Total := ListAreas(Config.MCompress); + '?': Total := ListAreas(bbsCfg.MCompress); Else Break; End; @@ -815,10 +816,10 @@ Var Session.io.OutFull (Session.GetPrompt(93)); - If (Total MOD Config.MColumns = 0) And (Total > 0) Then Session.io.OutRawLn(''); + If (Total MOD bbsCfg.MColumns = 0) And (Total > 0) Then Session.io.OutRawLn(''); End; - If EOF(MBaseFile) and (Total MOD Config.MColumns <> 0) Then Session.io.OutRawLn(''); + If EOF(MBaseFile) and (Total MOD bbsCfg.MColumns <> 0) Then Session.io.OutRawLn(''); If (Session.io.PausePtr = Session.User.ThisUser.ScreenSize) and (Session.io.AllowPause) Then Case Session.io.MorePrompt of @@ -1090,7 +1091,7 @@ Begin Areas := 0; Session.User.ThisUser.LastMGroup := FilePos(GroupFile); - If Config.MShowBases Then Begin + If bbsCfg.MShowBases Then Begin Reset (MBaseFile); Read (MBaseFile, tMBase); { Skip EMAIL base } @@ -1166,7 +1167,7 @@ Var Begin Result := 1; - Assign (TempFile, Config.DataPath + 'mbases.dat'); + Assign (TempFile, bbsCfg.DataPath + 'mbases.dat'); If Not ioReset(TempFile, SizeOf(RecMessageBase), fmRWDN) Then Exit; @@ -1193,10 +1194,10 @@ Begin Session.io.OutFull (Session.GetPrompt(101)); - If (Listed MOD Config.MColumns = 0) and (Listed > 0) Then Session.io.OutRawLn(''); + If (Listed MOD bbsCfg.MColumns = 0) and (Listed > 0) Then Session.io.OutRawLn(''); End; - If Eof(TempFile) and (Listed MOD Config.MColumns <> 0) Then Session.io.OutRawLn(''); + If Eof(TempFile) and (Listed MOD bbsCfg.MColumns <> 0) Then Session.io.OutRawLn(''); If (Session.io.PausePtr = Session.User.ThisUser.ScreenSize) and (Session.io.AllowPause) Then Case Session.io.MorePrompt of @@ -1232,7 +1233,7 @@ Var Begin ReplyBase := MBase; - If Not Email And Session.User.Access(Config.AcsExtReply) Then Begin + If Not Email And Session.User.Access(bbsCfg.AcsExtReply) Then Begin Session.io.PromptInfo[1] := MBase.Name; Session.io.PromptInfo[2] := MsgBase^.GetFrom; Session.io.PromptInfo[3] := MsgBase^.GetSubj; @@ -1250,7 +1251,7 @@ Begin Session.User.IgnoreGroup := True; - Total := ListAreas(Config.MCompress); + Total := ListAreas(bbsCfg.MCompress); Repeat Session.io.OutFull(Session.GetPrompt(511)); @@ -1262,7 +1263,7 @@ Begin Exit; End; - '?': Total := ListAreas(Config.MCompress); + '?': Total := ListAreas(bbsCfg.MCompress); Else Break; End; @@ -1406,10 +1407,10 @@ Begin 2 : MsgNew^.SetTo('All'); //Lang++ 3 : Begin MsgNew^.SetDest (Addr); - MsgNew^.SetOrig (GetMatchedAddress(Config.NetAddress[ReplyBase.NetAddr], Addr)); - MsgNew^.SetCrash (Config.netCrash); - MsgNew^.SetHold (Config.netHold); - MsgNew^.SetKillSent (Config.netKillSent); + MsgNew^.SetOrig (GetMatchedAddress(bbsCfg.NetAddress[ReplyBase.NetAddr], Addr)); + MsgNew^.SetCrash (bbsCfg.netCrash); + MsgNew^.SetHold (bbsCfg.netHold); + MsgNew^.SetKillSent (bbsCfg.netKillSent); MsgNew^.SetTo (ToWho); End; Else @@ -1642,7 +1643,7 @@ Var Session.User.IgnoreGroup := True; Repeat - Total := ListAreas(Config.MCompress); + Total := ListAreas(bbsCfg.MCompress); If IsCopy Then Session.io.OutFull (Session.GetPrompt(492)) @@ -2654,7 +2655,7 @@ Var 'C' : Session.io.AllowPause := False; End; - If Config.MShowHeader Then Display_Header; + If bbsCfg.MShowHeader Then Display_Header; End; End; @@ -3093,7 +3094,7 @@ Begin If Not Session.User.SearchUser(MsgTo, MBase.Flags and MBRealNames <> 0) Then MsgTo := ''; End Else - If strUpper(MsgTo) = 'SYSOP' Then MsgTo := Config.SysopName; + If strUpper(MsgTo) = 'SYSOP' Then MsgTo := bbsCfg.SysopName; If Session.User.FindUser(MsgTo, False) Then Begin Session.io.PromptInfo[1] := MsgTo; @@ -3160,10 +3161,10 @@ Begin If MBase.NetType = 3 Then Begin MsgBase^.SetDest (DestAddr); - MsgBase^.SetCrash (Config.netCrash); - MsgBase^.SetHold (Config.netHold); - MsgBase^.SetKillSent (Config.netKillSent); - MsgBase^.SetOrig (GetMatchedAddress(Config.NetAddress[MBase.NetAddr], DestAddr)); + MsgBase^.SetCrash (bbsCfg.netCrash); + MsgBase^.SetHold (bbsCfg.netHold); + MsgBase^.SetKillSent (bbsCfg.netKillSent); + MsgBase^.SetOrig (GetMatchedAddress(bbsCfg.NetAddress[MBase.NetAddr], DestAddr)); End; AppendMessageText (MsgBase, Lines, ''); @@ -3842,19 +3843,19 @@ Begin If mArea.NetType > 0 Then Begin If mArea.NetType = 3 Then Begin Msg^.SetMailType (mmtNetMail); - Msg^.SetCrash (Config.netCrash); - Msg^.SetHold (Config.netHold); - Msg^.SetKillSent (Config.netKillSent); + Msg^.SetCrash (bbsCfg.netCrash); + Msg^.SetHold (bbsCfg.netHold); + Msg^.SetKillSent (bbsCfg.netKillSent); Msg^.SetDest (mAddr); End Else Msg^.SetMailType (mmtEchoMail); - Msg^.SetOrig(Config.NetAddress[mArea.NetAddr]); + Msg^.SetOrig(bbsCfg.NetAddress[mArea.NetAddr]); Case mArea.NetType of - 1 : Assign (SemFile, Config.SemaPath + fn_SemFileEcho); - 2 : Assign (SemFile, Config.SemaPath + fn_SemFileNews); - 3 : Assign (SemFile, Config.SemaPath + fn_SemFileNet); + 1 : Assign (SemFile, bbsCfg.SemaPath + fn_SemFileEcho); + 2 : Assign (SemFile, bbsCfg.SemaPath + fn_SemFileNews); + 3 : Assign (SemFile, bbsCfg.SemaPath + fn_SemFileNet); End; ReWrite (SemFile); @@ -3917,15 +3918,15 @@ Begin If (Str = '') Then Str := '0:0/0'; strStr2Addr (Str, mAddr); - If FileExist(Config.DataPath + mName) Then - mName := Config.DataPath + mName + If FileExist(bbsCfg.DataPath + mName) Then + mName := bbsCfg.DataPath + mName Else If Not FileExist(mName) Then Begin Session.SystemLog('AutoPost: ' + mName + ' not found'); Exit; End; - Assign (MBaseFile, Config.DataPath + 'mbases.dat'); + Assign (MBaseFile, bbsCfg.DataPath + 'mbases.dat'); ioReset (MBaseFile, SizeOf(RecMessageBase), fmReadWrite + fmDenyNone); If Not ioSeek (MBaseFile, mArea) Then Begin @@ -4004,7 +4005,7 @@ Begin If Loc > 0 Then Begin FN := strStripB(Copy(mArea.Origin, Loc + 8, 255), ' '); - If Pos(PathChar, FN) = 0 Then FN := Config.DataPath + FN; + If Pos(PathChar, FN) = 0 Then FN := bbsCfg.DataPath + FN; FileMode := 66; @@ -4121,6 +4122,7 @@ Begin End; End; + Close (MBaseFile); Close (tFile); End; @@ -4133,11 +4135,11 @@ Begin Assign (tFile, Session.TempPath + 'control.dat'); ReWrite (tFile); - Write (tFile, Config.BBSName + CRLF); + Write (tFile, bbsCfg.BBSName + CRLF); Write (tFile, CRLF); Write (tFile, CRLF); - Write (tFile, Config.SysopName + CRLF); - Write (tFile, '0,' + Config.qwkBBSID + CRLF); + Write (tFile, bbsCfg.SysopName + CRLF); + Write (tFile, '0,' + bbsCfg.qwkBBSID + CRLF); Write (tFile, DateDos2Str(CurDateDos, 1), ',', TimeDos2Str(CurDateDos, 0) + CRLF); Write (tFile, strUpper(Session.User.ThisUser.Handle) + CRLF); Write (tFile, CRLF); @@ -4160,9 +4162,11 @@ Begin End; End; - Write (tFile, JustFile(Config.qwkWelcome) + CRLF); - Write (tFile, JustFile(Config.qwkNews) + CRLF); - Write (tFile, JustFile(Config.qwkGoodbye) + CRLF); + Close (MBaseFile); + + Write (tFile, JustFile(bbsCfg.qwkWelcome) + CRLF); + Write (tFile, JustFile(bbsCfg.qwkNews) + CRLF); + Write (tFile, JustFile(bbsCfg.qwkGoodbye) + CRLF); Close (tFile); End; @@ -4238,8 +4242,8 @@ Begin MsgBase^.SeekFirst (LastRead); While MsgBase^.SeekFound Do Begin - If ((Config.QwkMaxBase > 0) and (MsgAdded = Config.QwkMaxBase)) or - ((Config.QwkMaxPacket > 0) and (TotalMsgs = Config.QwkMaxPacket)) Then Break; + If ((bbsCfg.QwkMaxBase > 0) and (MsgAdded = bbsCfg.QwkMaxBase)) or + ((bbsCfg.QwkMaxPacket > 0) and (TotalMsgs = bbsCfg.QwkMaxPacket)) Then Break; MsgBase^.MsgStartUp; @@ -4424,22 +4428,22 @@ Begin Session.io.OutFullLn (Session.GetPrompt(233)); - Temp := Config.qwkBBSID + '.qwk'; + Temp := bbsCfg.qwkBBSID + '.qwk'; Session.io.OutFullLn (Session.GetPrompt(234)); Session.io.PromptInfo[1] := Temp; - If FileExist(Config.QwkWelcome) Then FileCopy(Config.qwkWelcome, Session.TempPath + JustFile(Config.qwkWelcome)); - If FileExist(Config.QwkNews) Then FileCopy(Config.qwkNews, Session.TempPath + JustFile(Config.qwkNews)); - If FileExist(Config.QwkGoodbye) Then FileCopy(Config.qwkGoodbye, Session.TempPath + JustFile(Config.qwkGoodbye)); + If FileExist(bbsCfg.QwkWelcome) Then FileCopy(bbsCfg.qwkWelcome, Session.TempPath + JustFile(bbsCfg.qwkWelcome)); + If FileExist(bbsCfg.QwkNews) Then FileCopy(bbsCfg.qwkNews, Session.TempPath + JustFile(bbsCfg.qwkNews)); + If FileExist(bbsCfg.QwkGoodbye) Then FileCopy(bbsCfg.qwkGoodbye, Session.TempPath + JustFile(bbsCfg.qwkGoodbye)); // Session.SystemLog('DEBUG: Archiving QWK packet'); If Session.LocalMode Then Begin - FileErase (Config.QWKPath + Temp); + FileErase (bbsCfg.QWKPath + Temp); - Session.FileBase.ExecuteArchive (Config.QWKPath + Temp, Session.User.ThisUser.Archive, Session.TempPath + '*', 1); + Session.FileBase.ExecuteArchive (bbsCfg.QWKPath + Temp, Session.User.ThisUser.Archive, Session.TempPath + '*', 1); Session.io.OutFullLn (Session.GetPrompt(235)); End Else Begin @@ -4524,24 +4528,24 @@ Var Begin If Session.LocalMode Then - Session.FileBase.ExecuteArchive (Config.QWKPath + Config.qwkBBSID + '.rep', Session.User.ThisUser.Archive, '*', 2) + Session.FileBase.ExecuteArchive (bbsCfg.QWKPath + bbsCfg.qwkBBSID + '.rep', Session.User.ThisUser.Archive, '*', 2) Else Begin If Session.FileBase.SelectProtocol(True, False) = 'Q' Then Exit; - Session.FileBase.ExecuteProtocol(1, Session.TempPath + Config.qwkBBSID + '.rep'); + Session.FileBase.ExecuteProtocol(1, Session.TempPath + bbsCfg.qwkBBSID + '.rep'); - If Not Session.FileBase.DszSearch(Config.qwkBBSID + '.rep') Then Begin - Session.io.PromptInfo[1] := Config.qwkBBSID + '.rep'; + If Not Session.FileBase.DszSearch(bbsCfg.qwkBBSID + '.rep') Then Begin + Session.io.PromptInfo[1] := bbsCfg.qwkBBSID + '.rep'; Session.io.OutFullLn (Session.GetPrompt(84)); Exit; End; - Session.FileBase.ExecuteArchive (Session.TempPath + Config.qwkBBSID + '.rep', Session.User.ThisUser.Archive, '*', 2) + Session.FileBase.ExecuteArchive (Session.TempPath + bbsCfg.qwkBBSID + '.rep', Session.User.ThisUser.Archive, '*', 2) End; - Assign (DataFile, FileFind(Session.TempPath + Config.qwkBBSID + '.msg')); + Assign (DataFile, FileFind(Session.TempPath + bbsCfg.qwkBBSID + '.msg')); If Not ioReset(DataFile, 1, fmRWDN) Then Begin Session.io.OutFull (Session.GetPrompt(238)); @@ -4552,7 +4556,7 @@ Begin BlockRead (DataFile, QwkBlock[1], 128); QwkBlock[0] := #128; - If Pos(strUpper(Config.qwkBBSID), strUpper(QwkBlock)) = 0 Then Begin + If Pos(strUpper(bbsCfg.qwkBBSID), strUpper(QwkBlock)) = 0 Then Begin Session.io.OutFullLn (Session.GetPrompt(239)); Close (DataFile); DirClean(Session.TempPath, ''); @@ -4611,6 +4615,7 @@ Begin // reply package, based on the alias/realname setting of the // base itself. This prevents people from spoofing "From" // fields. + // If QWK networking will need to allow this of course Else If (LineCount < 4) and (Copy(Line, 1, 3) = 'To:') Then Begin MsgBase^.SetTo(strStripB(Copy(Line, 4, Length(Line)), ' ')); @@ -4698,6 +4703,6 @@ Type Constructor Create (UD: RecUser; Ext: Boolean); Function CreatePacket : Boolean; - Function ProcessReplies : Boolean; + Function ProcessReply (bbsid, temppath, usernum, var user, forcefrom ): Boolean; Destructor Destroy; Override; End; diff --git a/mystic/bbs_msgbase_abs.pas b/mystic/bbs_msgbase_abs.pas index 6c410ea..712a89e 100644 --- a/mystic/bbs_msgbase_abs.pas +++ b/mystic/bbs_msgbase_abs.pas @@ -7,7 +7,7 @@ Unit BBS_MsgBase_ABS; Interface Uses - BBS_Common; + bbs_dataBase; Type MsgMailType = (mmtNormal, mmtEchoMail, mmtNetMail); diff --git a/mystic/bbs_msgbase_ansi.pas b/mystic/bbs_msgbase_ansi.pas index 7233028..d68ec72 100644 --- a/mystic/bbs_msgbase_ansi.pas +++ b/mystic/bbs_msgbase_ansi.pas @@ -6,7 +6,8 @@ Interface Uses m_Strings, - BBS_Common; + BBS_Common, + bbs_dataBase; Type RecAnsiBufferChar = Record diff --git a/mystic/bbs_msgbase_jam.pas b/mystic/bbs_msgbase_jam.pas index 0ba24f2..b60a044 100644 --- a/mystic/bbs_msgbase_jam.pas +++ b/mystic/bbs_msgbase_jam.pas @@ -12,6 +12,7 @@ Interface Uses m_Strings, bbs_Common, + bbs_dataBase, bbs_MsgBase_ABS; Const diff --git a/mystic/bbs_msgbase_squish.pas b/mystic/bbs_msgbase_squish.pas index 44115b5..3e76955 100644 --- a/mystic/bbs_msgbase_squish.pas +++ b/mystic/bbs_msgbase_squish.pas @@ -7,6 +7,7 @@ Interface Uses BBS_MsgBase_Abs, BBS_Common, + bbs_dataBase, DOS; Const diff --git a/mystic/bbs_nodechat.pas b/mystic/bbs_nodechat.pas index d7f65ce..513574d 100644 --- a/mystic/bbs_nodechat.pas +++ b/mystic/bbs_nodechat.pas @@ -14,6 +14,7 @@ Uses m_FileIO, bbs_NodeInfo, bbs_Common, + bbs_dataBase, bbs_User, bbs_Core; @@ -61,7 +62,7 @@ Begin Chat.Room := R; CurRoom := R; - Assign (CF, Config.DataPath + 'chat' + strI2S(Session.NodeNum) + '.dat'); + Assign (CF, bbsCfg.DataPath + 'chat' + strI2S(Session.NodeNum) + '.dat'); Reset (CF); Write (CF, Chat); Close (CF); @@ -253,7 +254,7 @@ Procedure Node_Chat; Begin Session.io.OutFullLn (Session.GetPrompt(332)); - For A := 1 to Config.INetTNNodes Do + For A := 1 to bbsCfg.INetTNNodes Do If GetChatRecord(A, Temp) Then If Temp.InChat Then Begin Reset (RoomFile); @@ -287,7 +288,7 @@ Procedure Node_Chat; If Text = '' Then Exit; - For Count := 1 to Config.INetTNNodes Do + For Count := 1 to bbsCfg.INetTNNodes Do If GetChatRecord(Count, Temp) Then If strUpper(Temp.Name) = UserName Then Begin Send_Node_Message (4, strI2S(Count) + ';' + Text, 0); @@ -370,7 +371,7 @@ Begin Chat.InChat := True; Chat.Available := False; - Assign (ChatFile, Config.DataPath + 'chat' + strI2S(Session.NodeNum) + '.dat'); + Assign (ChatFile, bbsCfg.DataPath + 'chat' + strI2S(Session.NodeNum) + '.dat'); Reset (ChatFile); Write (ChatFile, Chat); Close (ChatFile); @@ -482,7 +483,7 @@ Begin Session.AllowMessages := True; - Assign (ChatFile, Config.DataPath + 'chat' + strI2S(Session.NodeNum) + '.dat'); + Assign (ChatFile, bbsCfg.DataPath + 'chat' + strI2S(Session.NodeNum) + '.dat'); Reset (ChatFile); Write (ChatFile, Chat); Close (ChatFile); diff --git a/mystic/bbs_nodeinfo.pas b/mystic/bbs_nodeinfo.pas index ce5d126..dad2006 100644 --- a/mystic/bbs_nodeinfo.pas +++ b/mystic/bbs_nodeinfo.pas @@ -5,7 +5,8 @@ Unit bbs_NodeInfo; Interface Uses - bbs_Common; + bbs_Common, + bbs_dataBase; Function GetChatRecord (Node: Byte; Var Chat: ChatRec) : Boolean; Function IsUserOnline (UserName: String) : Word; @@ -29,7 +30,7 @@ Function GetChatRecord (Node: Byte; Var Chat: ChatRec) : Boolean; Begin Result := False; - Assign (ChatFile, Config.DataPath + 'chat' + strI2S(Node) + '.dat'); + Assign (ChatFile, bbsCfg.DataPath + 'chat' + strI2S(Node) + '.dat'); If Not ioReset(ChatFile, SizeOf(ChatFile), fmRWDN) Then Exit; @@ -46,7 +47,7 @@ Var Begin Result := 0; - For Count := 1 to Config.INetTNNodes Do Begin + For Count := 1 to bbsCfg.INetTNNodes Do Begin If GetChatRecord(Count, TempChat) Then If (Count <> Session.NodeNum) and (TempChat.Active) and (TempChat.Name = UserName) Then Begin Result := Count; @@ -57,7 +58,7 @@ End; Procedure Set_Node_Action (Action: String); Begin - Assign (ChatFile, Config.DataPath + 'chat' + strI2S(Session.NodeNum) + '.dat'); + Assign (ChatFile, bbsCfg.DataPath + 'chat' + strI2S(Session.NodeNum) + '.dat'); ReWrite (ChatFile); If Action <> '' Then Begin @@ -83,7 +84,7 @@ Begin Close (ChatFile); {$IFDEF WINDOWS} - Screen.SetWindowTitle (Config.BBSName + ' Node ' + strI2S(Session.NodeNum) + ' : ' + Session.User.ThisUser.Handle + ' : ' + strStripPipe(Action)); + Screen.SetWindowTitle (bbsCfg.BBSName + ' Node ' + strI2S(Session.NodeNum) + ' : ' + Session.User.ThisUser.Handle + ' : ' + strStripPipe(Action)); // Screen.SetWindowTitle (WinConsoleTitle + strI2S(Session.NodeNum) + ' - ' + Session.User.ThisUser.Handle + ' - ' + strStripPipe(Action)); {$ENDIF} End; @@ -95,7 +96,7 @@ Var Begin Session.io.OutFullLn (Session.GetPrompt(138)); - For Count := 1 to Config.INetTNNodes Do Begin + For Count := 1 to bbsCfg.INetTNNodes Do Begin Session.io.PromptInfo[1] := strI2S(Count); If Not GetChatRecord (Count, TChat) Then Begin @@ -104,7 +105,7 @@ Begin Continue; End; - If TChat.Active and ((Not TChat.Invisible) or (TChat.Invisible and Session.User.Access(Config.AcsSeeInvis))) Then Begin + If TChat.Active and ((Not TChat.Invisible) or (TChat.Invisible and Session.User.Access(bbsCfg.AcsSeeInvis))) Then Begin Session.io.PromptInfo[2] := TChat.Name; Session.io.PromptInfo[3] := TChat.Action; Session.io.PromptInfo[4] := TChat.Location; @@ -134,7 +135,7 @@ Begin Repeat Session.io.OutFull (Session.GetPrompt(146)); - Case Session.io.OneKeyRange('?Q', 1, Config.INetTNNodes) of + Case Session.io.OneKeyRange('?Q', 1, bbsCfg.INetTNNodes) of #00 : Break; '?' : WhosOnline; 'Q' : Break; @@ -143,7 +144,7 @@ Begin ToNode := Session.io.RangeValue; - If (ToNode < 0) or (ToNode > Config.INetTNNodes) Then Begin + If (ToNode < 0) or (ToNode > bbsCfg.INetTNNodes) Then Begin Session.io.OutFullLn (Session.GetPrompt(147)); Exit; End; @@ -159,7 +160,7 @@ Begin If ToNode = 0 Then Begin B := 1; - C := Config.INetTNNodes; + C := bbsCfg.INetTNNodes; If MsgType = 3 Then Begin MsgType := 2; @@ -206,7 +207,7 @@ Begin FileMode := 66; - Assign (NodeMsgFile, Config.SystemPath + 'temp' + strI2S(A) + PathChar + 'chat.tmp'); + Assign (NodeMsgFile, bbsCfg.SystemPath + 'temp' + strI2S(A) + PathChar + 'chat.tmp'); If Not ioReset (NodeMsgFile, SizeOf(NodeMsg), fmReadWrite + fmDenyAll) Then ioReWrite(NodeMsgFile, SizeOf(NodeMsg), fmReadWrite + fmDenyAll); diff --git a/mystic/bbs_nodelist.pas b/mystic/bbs_nodelist.pas index 1dab87a..3f37a16 100644 --- a/mystic/bbs_nodelist.pas +++ b/mystic/bbs_nodelist.pas @@ -5,7 +5,8 @@ Unit BBS_NodeList; Interface Uses - BBS_Common; + BBS_Common, + bbs_DataBase; Type RecNodeSearch = Record diff --git a/mystic/bbs_sysopchat.pas b/mystic/bbs_sysopchat.pas index 1e98eef..a116793 100644 --- a/mystic/bbs_sysopchat.pas +++ b/mystic/bbs_sysopchat.pas @@ -13,6 +13,7 @@ Uses m_Strings, m_DateTime, bbs_Common, + bbs_DataBase, bbs_Core, bbs_User; @@ -37,7 +38,7 @@ Var Procedure Total_ReDraw; Begin Session.io.PromptInfo[1] := Session.User.ThisUser.Handle; - Session.io.PromptInfo[2] := Config.SysopName; + Session.io.PromptInfo[2] := bbsCfg.SysopName; Session.io.ScreenInfo[9].X := 0; Session.io.ScreenInfo[0].X := 0; @@ -130,7 +131,7 @@ Begin end; Session.io.OutRaw(sysopstr); end; - If Config.ChatLogging Then WriteLn (tFile, 'S> ' + SysopSTR); + If bbsCfg.ChatLogging Then WriteLn (tFile, 'S> ' + SysopSTR); inc (sysopy); sysopstr := ''; Session.io.AnsiGotoXY (sysopx, sysopy); @@ -145,7 +146,7 @@ Begin Session.io.OutRaw(userstr); end; inc (usery); - If Config.ChatLogging Then WriteLn (tFile, 'U> ' + UserSTR); + If bbsCfg.ChatLogging Then WriteLn (tFile, 'U> ' + UserSTR); userstr := ''; Session.io.AnsiGotoXY (userx, usery); End; @@ -158,7 +159,7 @@ Begin if sysopx > Session.io.ScreenInfo[8].x then begin strwrap (sysopstr, temp2, Session.io.ScreenInfo[8].x - session.io.screeninfo[7].x + 1); temp1 := sysopstr; - If Config.ChatLogging Then WriteLn (tFile, 'S> ' + SysopSTR); + If bbsCfg.ChatLogging Then WriteLn (tFile, 'S> ' + SysopSTR); sysopstr := temp2; Session.io.OutBS (length(temp2), True); if sysopy=Session.io.ScreenInfo[6].y then begin @@ -181,7 +182,7 @@ Begin if userx > Session.io.ScreenInfo[4].x then begin strwrap (userstr, temp2, Session.io.ScreenInfo[4].x - session.io.screeninfo[3].x + 1); temp1 := userstr; - If Config.ChatLogging Then WriteLn (tFile, 'U> ' + UserSTR); + If bbsCfg.ChatLogging Then WriteLn (tFile, 'U> ' + UserSTR); userstr := temp2; Session.io.OutBS (length(temp2), True); if usery=Session.io.ScreenInfo[2].y then begin @@ -223,7 +224,7 @@ Begin Case Ch of #27 : If Session.io.LocalInput Then Break; #13 : Begin - If Config.ChatLogging Then WriteLn (tFile, Str1); + If bbsCfg.ChatLogging Then WriteLn (tFile, Str1); Session.io.OutRawLn(''); Str1 := ''; End; @@ -242,7 +243,7 @@ Begin Session.io.OutRawLn (''); Session.io.OutRaw (Str2); - If Config.ChatLogging Then WriteLn (tFile, Str1); + If bbsCfg.ChatLogging Then WriteLn (tFile, Str1); Str1 := Str2; End; @@ -262,8 +263,8 @@ Begin UpdateStatusLine (0, '(ESC) to Quit, (Ctrl-R) to Redraw'); - If Config.ChatLogging Then Begin - Assign (tFile, Config.LogsPath + 'chat.log'); + If bbsCfg.ChatLogging Then Begin + Assign (tFile, bbsCfg.LogsPath + 'chat.log'); {$I-} Append (tFile); {$I+} If IoResult <> 0 Then ReWrite (tFile); @@ -276,7 +277,7 @@ Begin If ((Split) And (Session.io.Graphics > 0)) Then Split_Chat Else Line_Chat; - If Config.ChatLogging Then Begin + If bbsCfg.ChatLogging Then Begin WriteLn (tFile, strRep('-', 70)); Close (tFile); End; diff --git a/mystic/bbs_user.pas b/mystic/bbs_user.pas index 8852663..aa59551 100644 --- a/mystic/bbs_user.pas +++ b/mystic/bbs_user.pas @@ -9,6 +9,7 @@ Uses m_Strings, m_DateTime, bbs_Common, + bbs_dataBase, bbs_General, bbs_MsgBase, bbs_FileBase, @@ -91,9 +92,9 @@ Begin FillChar (Security, SizeOf(Security), #0); UserNum := -1; - ThisUser.ScreenSize := Config.DefScreenSize; - ThisUser.Theme := Config.DefThemeFile; - ThisUser.StartMenu := Config.DefStartMenu; + ThisUser.ScreenSize := bbsCfg.DefScreenSize; + ThisUser.Theme := bbsCfg.DefThemeFile; + ThisUser.StartMenu := bbsCfg.DefStartMenu; ThisUser.DateType := 1; ThisUser.HotKeys := True; ThisUser.RealName := 'Unknown'; @@ -102,13 +103,13 @@ Begin ThisUser.Birthday := CurDateJulian; ThisUser.Gender := 'U'; ThisUser.FirstOn := CurDateDos; - ThisUser.TimeLeft := Config.LoginTime; - ThisUser.Archive := Config.qwkArchive; - ThisUser.LastFGroup := Config.StartFGroup; - ThisUser.LastMGroup := Config.StartMGroup; + ThisUser.TimeLeft := bbsCfg.LoginTime; + ThisUser.Archive := bbsCfg.qwkArchive; + ThisUser.LastFGroup := bbsCfg.StartFGroup; + ThisUser.LastMGroup := bbsCfg.StartMGroup; ThisUser.UseLBQuote := True; ThisUser.UseFullChat := True; - ThisUser.CodePage := Config.StartCodePage; + ThisUser.CodePage := bbsCfg.StartCodePage; IgnoreGroup := False; InChat := False; @@ -120,7 +121,7 @@ Function TBBSUser.IsThisUser (Str: String) : Boolean; Begin Str := strUpper(Str); - //If Str = 'SYSOP' Then Str := Config.SysopName; + //If Str = 'SYSOP' Then Str := bbsCfg.SysopName; Result := (strUpper(ThisUser.RealName) = Str) or (strUpper(ThisUser.Handle) = Str); End; @@ -299,7 +300,7 @@ Begin Str := strUpper(Str); If Str = 'SYSOP' Then - Str := strUpper(Config.SysopName); + Str := strUpper(bbsCfg.SysopName); Found := False; First := True; @@ -389,11 +390,11 @@ Begin UserNum := -1; If Not Session.io.GetPW(Session.GetPrompt(274), Session.GetPrompt(293), TempUser.Password) Then Begin - If Config.PWInquiry Then + If bbsCfg.PWInquiry Then If Session.io.GetYN(Session.GetPrompt(475), False) Then - Session.Msgs.PostMessage(True, '/TO:' + strReplace(Config.FeedbackTo, ' ', '_') + ' /SUBJ:Password_Inquiry'); + Session.Msgs.PostMessage(True, '/TO:' + strReplace(bbsCfg.FeedbackTo, ' ', '_') + ' /SUBJ:Password_Inquiry'); - Session.Msgs.PostTextFile('hackwarn.txt;0;' + Config.SysopName + ';' + TempUser.Handle + ';Possible hack attempt', True); + Session.Msgs.PostTextFile('hackwarn.txt;0;' + bbsCfg.SysopName + ';' + TempUser.Handle + ';Possible hack attempt', True); Exit; End; @@ -548,7 +549,7 @@ Begin Result := False; Name := strUpper(Name); - Assign (tFile, Config.DataPath + 'trashcan.dat'); + Assign (tFile, bbsCfg.DataPath + 'trashcan.dat'); {$I-} Reset (tFile); {$I+} If IoResult <> 0 Then Exit; @@ -678,11 +679,11 @@ Begin Session.io.OutFull (Session.GetPrompt(367)) Else Session.io.OutFull (Session.GetPrompt(13)); - If Config.UseUSAPhone Then + If bbsCfg.UseUSAPhone Then Str := Session.io.GetInput(12, 12, 14, Str) Else Str := Session.io.GetInput(15, 15, 12, Str); - Until (Length(Str) = 12) or (Not Config.UseUSAPhone and (Str <> '')); + Until (Length(Str) = 12) or (Not bbsCfg.UseUSAPhone and (Str <> '')); ThisUser.HomePhone := Str; End; @@ -698,11 +699,11 @@ Begin Session.io.OutFull (Session.GetPrompt(368)) Else Session.io.OutFull (Session.GetPrompt(14)); - If Config.UseUSAPhone Then + If bbsCfg.UseUSAPhone Then Str := Session.io.GetInput(12, 12, 14, Str) Else Str := Session.io.GetInput(15, 15, 12, Str); - Until (Length(Str) = 12) or (Not Config.UseUSAPhone and (Str <> '')); + Until (Length(Str) = 12) or (Not bbsCfg.UseUSAPhone and (Str <> '')); ThisUser.DataPhone := Str; End; @@ -775,16 +776,16 @@ Procedure TBBSUser.GetScreenLength (Edit: Boolean); Var A : Byte; Begin - Session.io.PromptInfo[1] := strI2S(Config.DefScreenSize); + Session.io.PromptInfo[1] := strI2S(bbsCfg.DefScreenSize); If Edit Then Session.io.OutFull (Session.GetPrompt(372)) Else Session.io.OutFull (Session.GetPrompt(153)); - A := strS2I(Session.io.GetInput(2, 2, 12, strI2S(Config.DefScreenSize))); + A := strS2I(Session.io.GetInput(2, 2, 12, strI2S(bbsCfg.DefScreenSize))); - If (A < 1) or (A > 255) Then A := Config.DefScreenSize; + If (A < 1) or (A > 255) Then A := bbsCfg.DefScreenSize; ThisUser.ScreenSize := A; End; @@ -899,14 +900,14 @@ End; Procedure TBBSUser.CreateNewUser (DefName: String); Begin - If Not Config.AllowNewUsers Then Begin + If Not bbsCfg.AllowNewUsers Then Begin Session.io.OutFile ('nonewusr', True, 0); Halt(0); End; - If Config.NewUserPW <> '' Then - If Not Session.io.GetPW(Session.GetPrompt(5), Session.GetPrompt(422), Config.NewUserPW) Then Halt(0); + If bbsCfg.NewUserPW <> '' Then + If Not Session.io.GetPW(Session.GetPrompt(5), Session.GetPrompt(422), bbsCfg.NewUserPW) Then Halt(0); Session.SystemLog ('NEW USER'); @@ -932,7 +933,7 @@ Begin End Else Begin If strUpper(DefName) = 'NEW' Then DefName := ''; - With Config Do Begin + With bbsCfg Do Begin If AskTheme Then GetTheme Else ThisUser.Theme := DefThemeFile; If AskAlias Then GetAlias(False, DefName); If AskRealName Then GetRealName(False); @@ -977,32 +978,32 @@ Begin If UserHotKeys = 2 Then GetHotKeys(False) Else ThisUser.HotKeys := Boolean(UserHotKeys); End; - If Config.AskScreenSize Then + If bbsCfg.AskScreenSize Then GetScreenLength(False) Else - ThisUser.ScreenSize := Config.DefScreenSize; + ThisUser.ScreenSize := bbsCfg.DefScreenSize; - Case Config.UserProtocol of + Case bbsCfg.UserProtocol of 0 : ThisUser.Protocol := #0; - 1 : ThisUser.Protocol := Config.FProtocol; + 1 : ThisUser.Protocol := bbsCfg.FProtocol; 2 : ThisUser.Protocol := Session.FileBase.SelectProtocol(False, True); End; GetPassword(False); End; - Upgrade_User_Level (True, ThisUser, Config.NewUserSec); + Upgrade_User_Level (True, ThisUser, bbsCfg.NewUserSec); // ThisUser.FirstOn := CurDateDos; -// ThisUser.Archive := Config.qwkArchive; +// ThisUser.Archive := bbsCfg.qwkArchive; // ThisUser.LastFBase := 0; -// ThisUser.LastFGroup := Config.StartFGroup; -// ThisUser.LastMGroup := Config.StartMGroup; +// ThisUser.LastFGroup := bbsCfg.StartFGroup; +// ThisUser.LastMGroup := bbsCfg.StartMGroup; // ThisUser.LastMBase := 0; // ThisUser.Flags := 0; - If Not Config.AskRealName Then ThisUser.RealName := ThisUser.Handle; - If Not Config.AskAlias Then ThisUser.Handle := ThisUser.RealName; + If Not bbsCfg.AskRealName Then ThisUser.RealName := ThisUser.Handle; + If Not bbsCfg.AskAlias Then ThisUser.Handle := ThisUser.RealName; {If either handles or realnames are toggled off, fill the gaps} Session.Menu.MenuName := 'newinfo'; @@ -1013,32 +1014,32 @@ Begin Reset (UserFile); UserNum := Succ(FileSize(UserFile)); - Inc (Config.UserIdxPos); - ThisUser.PermIdx := Config.UserIdxPos; + Inc (bbsCfg.UserIdxPos); + ThisUser.PermIdx := bbsCfg.UserIdxPos; Seek (UserFile, UserNum - 1); Write (UserFile, ThisUser); Close (UserFile); Reset (ConfigFile); - Write (ConfigFile, Config); + Write (ConfigFile, bbsCfg); Close (ConfigFile); Session.SystemLog ('Created Account: ' + ThisUser.Handle); - If Config.NewUserEmail Then Begin + If bbsCfg.NewUserEmail Then Begin Session.io.OutFile('feedback', True, 0); - If Session.Menu.ExecuteCommand ('MW', '/TO:' + strReplace(Config.FeedbackTo, ' ', '_') + ' /SUBJ:New_User_Feedback /F') Then; + If Session.Menu.ExecuteCommand ('MW', '/TO:' + strReplace(bbsCfg.FeedbackTo, ' ', '_') + ' /SUBJ:New_User_Feedback /F') Then; End; - If FileExist(Config.ScriptPath + 'newuser.mpx') Then + If FileExist(bbsCfg.ScriptPath + 'newuser.mpx') Then ExecuteMPL(NIL, 'newuser'); - If FileExist(Config.DataPath + 'newletter.txt') Then - Session.Msgs.PostTextFile('newletter.txt;0;' + Config.SysopName + ';' + ThisUser.Handle + ';Welcome', True); + If FileExist(bbsCfg.DataPath + 'newletter.txt') Then + Session.Msgs.PostTextFile('newletter.txt;0;' + bbsCfg.SysopName + ';' + ThisUser.Handle + ';Welcome', True); - If FileExist(Config.DataPath + 'sysletter.txt') Then - Session.Msgs.PostTextFile('sysletter.txt;0;' + Config.SysopName + ';' + Config.SysopName + ';New account created', True); + If FileExist(bbsCfg.DataPath + 'sysletter.txt') Then + Session.Msgs.PostTextFile('sysletter.txt;0;' + bbsCfg.SysopName + ';' + bbsCfg.SysopName + ';New account created', True); End; Procedure TBBSUser.UserLogon3; @@ -1050,7 +1051,7 @@ Begin Chat.Available := True; - If Access(Config.AcsInvisLogin) Then + If Access(bbsCfg.AcsInvisLogin) Then Chat.Invisible := Session.io.GetYN(Session.GetPrompt(308), False); { update last caller information } @@ -1065,7 +1066,7 @@ Begin LastOn.City := ThisUser.City; LastOn.Node := Session.NodeNum; LastOn.DateTime := CurDateDos; - LastOn.CallNum := Config.SystemCalls; + LastOn.CallNum := bbsCfg.SystemCalls; LastOn.Address := ThisUser.Address; LastOn.EmailAddr := ThisUser.Email; LastOn.UserInfo := ThisUser.UserInfo; @@ -1143,18 +1144,18 @@ Begin If Not Session.LocalMode And (ThisUser.Flags AND UserNoLastCall = 0) Then Begin Reset (ConfigFile); - Read (ConfigFile, Config); - Inc (Config.SystemCalls); + Read (ConfigFile, bbsCfg); + Inc (bbsCfg.SystemCalls); Reset (ConfigFile); - Write (ConfigFile, Config); + Write (ConfigFile, bbsCfg); Close (ConfigFile); End; Inc (ThisUser.Calls); Inc (ThisUser.CallsToday); - If (Not Access(Config.AcsMultiLogin)) and (IsUserOnline(ThisUser.Handle) <> 0) Then Begin + If (Not Access(bbsCfg.AcsMultiLogin)) and (IsUserOnline(ThisUser.Handle) <> 0) Then Begin Session.io.OutFullLn(Session.GetPrompt(426)); Halt(0); End; @@ -1211,11 +1212,11 @@ Begin Session.io.OutFullLn(Session.GetPrompt(476)); End; - If (Config.PWChange > 0) and (Session.User.ThisUser.Flags AND UserNoPWChange = 0) Then + If (bbsCfg.PWChange > 0) and (Session.User.ThisUser.Flags AND UserNoPWChange = 0) Then If Not DateValid(Session.User.ThisUser.LastPWChange) Then Session.User.ThisUser.LastPWChange := DateDos2Str(CurDateDos, 1) Else - If CurDateJulian - DateStr2Julian(Session.User.ThisUser.LastPWChange) >= Config.PWChange Then Begin + If CurDateJulian - DateStr2Julian(Session.User.ThisUser.LastPWChange) >= bbsCfg.PWChange Then Begin Session.SystemLog('Required password change'); Session.io.OutFullLn(Session.GetPrompt(478)); Session.User.GetPassword(False); @@ -1243,8 +1244,8 @@ Begin Session.HistoryHour := strS2I(Copy(TimeDos2Str(CurDateDos, 0), 1, 2)); - If Config.SystemPW <> '' Then - If Not Session.io.GetPW(Session.GetPrompt(4), Session.GetPrompt(417), Config.SystemPW) Then Begin + If bbsCfg.SystemPW <> '' Then + If Not Session.io.GetPW(Session.GetPrompt(4), Session.GetPrompt(417), bbsCfg.SystemPW) Then Begin Session.io.OutFile ('closed', True, 0); Session.SystemLog('Failed system password'); @@ -1255,21 +1256,21 @@ Begin Session.io.OutFullLn ('|CL' + mysSoftwareID + ' v' + mysVersion + ' for ' + OSID + ' Node |ND'); Session.io.OutFullLn (CopyID); - If Config.DefTermMode = 0 Then + If bbsCfg.DefTermMode = 0 Then GetGraphics Else - If Config.DefTermMode = 3 Then + If bbsCfg.DefTermMode = 3 Then Session.io.Graphics := 1 Else Begin DetectGraphics; - If (Session.io.Graphics = 0) and (Config.DefTermMode = 2) Then GetGraphics; + If (Session.io.Graphics = 0) and (bbsCfg.DefTermMode = 2) Then GetGraphics; End; - If FileExist(Config.ScriptPath + 'startup.mpx') Then + If FileExist(bbsCfg.ScriptPath + 'startup.mpx') Then ExecuteMPL(NIL, 'startup'); - If Config.ThemeOnStart Then GetTheme; + If bbsCfg.ThemeOnStart Then GetTheme; If (Session.Theme.Flags AND ThmAllowASCII = 0) and (Session.io.Graphics = 0) Then Begin Session.io.OutFullLn (Session.GetPrompt(321)); @@ -1298,9 +1299,9 @@ Begin ThisUser := TempUser; End Else Begin - If Config.UseMatrix Then Begin + If bbsCfg.UseMatrix Then Begin Repeat - Session.Menu.MenuName := Config.MatrixMenu; + Session.Menu.MenuName := bbsCfg.MatrixMenu; Session.Menu.ExecuteMenu (True, True, False, True); Until MatrixOK or Session.ShutDown; @@ -1312,11 +1313,11 @@ Begin Count := 1; Repeat - If Count > Config.LoginAttempts Then Halt; + If Count > bbsCfg.LoginAttempts Then Halt; Session.io.PromptInfo[1] := strI2S(Count); - Session.io.PromptInfo[2] := strI2S(Config.LoginAttempts); - Session.io.PromptInfo[3] := strI2S(Config.LoginAttempts - Count); + Session.io.PromptInfo[2] := strI2S(bbsCfg.LoginAttempts); + Session.io.PromptInfo[3] := strI2S(bbsCfg.LoginAttempts - Count); Session.io.OutFull (Session.GetPrompt(0)); @@ -1342,11 +1343,11 @@ Begin UserNum := -1; {which is only User.ThisUser.realname at this time } If Not Session.io.GetPW(Session.GetPrompt(2), Session.GetPrompt(3), TempUser.Password) Then Begin - If Config.PWInquiry Then + If bbsCfg.PWInquiry Then If Session.io.GetYN(Session.GetPrompt(475), False) Then - Session.Msgs.PostMessage(True, '/TO:' + strReplace(Config.FeedbackTo, ' ', '_') + ' /SUBJ:Password_Inquiry'); + Session.Msgs.PostMessage(True, '/TO:' + strReplace(bbsCfg.FeedbackTo, ' ', '_') + ' /SUBJ:Password_Inquiry'); - Session.Msgs.PostTextFile('hackwarn.txt;0;' + Config.SysopName + ';' + TempUser.Handle + ';Possible hack attempt', True); + Session.Msgs.PostTextFile('hackwarn.txt;0;' + bbsCfg.SysopName + ';' + TempUser.Handle + ';Possible hack attempt', True); Halt(0); End; @@ -1360,14 +1361,14 @@ Begin Session.SystemLog ('User: ' + ThisUser.Handle + ' logged in'); - If Config.ThemeOnStart Then + If bbsCfg.ThemeOnStart Then ThisUser.Theme := Session.Theme.FileName Else If Not Session.LoadThemeData(ThisUser.Theme) Then Begin Session.io.OutFullLn (Session.GetPrompt(186)); - If Session.LoadThemeData(Config.DefThemeFile) Then - ThisUser.Theme := Config.DefThemeFile; + If Session.LoadThemeData(bbsCfg.DefThemeFile) Then + ThisUser.Theme := bbsCfg.DefThemeFile; End; UserLogon2; @@ -1416,7 +1417,7 @@ Begin Else Session.LoadThemeData(Data); 15 : GetEditor(True); - 16 : If Access(Config.AcsInvisLogin) Then Begin + 16 : If Access(bbsCfg.AcsInvisLogin) Then Begin Chat.Invisible := Not Chat.Invisible; Set_Node_Action (Chat.Action); End; diff --git a/mystic/bbs_userchat.pas b/mystic/bbs_userchat.pas index 438f570..6cef276 100644 --- a/mystic/bbs_userchat.pas +++ b/mystic/bbs_userchat.pas @@ -15,6 +15,7 @@ Uses m_DateTime, bbs_Core, bbs_Common, + bbs_dataBase, bbs_NodeInfo; Procedure PageUserForChat; @@ -26,7 +27,7 @@ Begin Repeat Session.io.OutFull (Session.GetPrompt(479)); - Case Session.io.OneKeyRange('Q?', 1, Config.INetTNNodes) of + Case Session.io.OneKeyRange('Q?', 1, bbsCfg.INetTNNodes) of #00 : Break; 'Q' : Exit; '?' : WhosOnline; @@ -41,12 +42,12 @@ Begin Exit; End; - If Session.User.Access(Config.ACSSysop) Then + If Session.User.Access(bbsCfg.ACSSysop) Then If Session.io.GetYN(Session.GetPrompt(481), False) Then ReqType := 9; - FileErase (Config.DataPath + 'userchat.' + strI2S(ToNode)); - FileErase (Config.DataPath + 'userchat.' + strI2S(Session.NodeNum)); + FileErase (bbsCfg.DataPath + 'userchat.' + strI2S(ToNode)); + FileErase (bbsCfg.DataPath + 'userchat.' + strI2S(Session.NodeNum)); Session.io.PromptInfo[1] := TempChat.Name; Session.io.PromptInfo[2] := strI2S(ToNode); @@ -132,8 +133,8 @@ Var Begin Session.io.OutFullLn(Session.GetPrompt(483)); - Assign (fOut, Config.DataPath + 'userchat.' + strI2S(ToNode)); - Assign (fIn, Config.DataPath + 'userchat.' + strI2S(Session.NodeNum)); + Assign (fOut, bbsCfg.DataPath + 'userchat.' + strI2S(ToNode)); + Assign (fIn, bbsCfg.DataPath + 'userchat.' + strI2S(Session.NodeNum)); FileMode := 66; diff --git a/mystic/mis_client_binkp.pas b/mystic/mis_client_binkp.pas index 37eed85..13cb98c 100644 --- a/mystic/mis_client_binkp.pas +++ b/mystic/mis_client_binkp.pas @@ -16,18 +16,6 @@ Uses MIS_NodeData, MIS_Common; -Function CreateBINKP (Owner: TServerManager; Config: RecConfig; ND: TNodeData; CliSock: TIOSocket) : TServerClient; - -Type - TBINKPServer = Class(TServerClient) - Server : TServerManager; - UserName : String[30]; - - Constructor Create (Owner: TServerManager; CliSock: TIOSocket); - Procedure Execute; Override; - Destructor Destroy; Override; - End; - Const M_NUL = 0; M_ADR = 1; @@ -95,7 +83,11 @@ Type Data ); + TBinkPStatusUpdate = Procedure (Owner: Pointer; Str: String); + TBinkP = Class + Owner : Pointer; + StatusUpdate : TBinkPStatusUpdate; SetPassword : String; SetBlockSize : Word; SetOutPath : String; @@ -117,33 +109,53 @@ Type HaveHeader : Boolean; NeedHeader : Boolean; MD5Challenge : String; + AddressList : String; + Password : String; + PasswordMD5 : Boolean; FileList : TProtocolQueue; - Constructor Create (Var C: TIOSocket; Var FL: TProtocolQueue; IsCli: Boolean; TOV: Word); + Constructor Create (O: Pointer; Var C: TIOSocket; Var FL: TProtocolQueue; IsCli: Boolean; TOV: Word); Destructor Destroy; Override; - - // TO BE REWRITTEN/MOVED/REMOVED Procedure RemoveFilesFromFLO (FN: String); - Function FindNodeByAddress (AddrList: String) : Boolean; - + Function AuthenticateNode (AddrList: String) : Boolean; Function GetDataStr : String; - Procedure SendFrame (CmdType: Byte; CmdData: String); + Procedure SendFrame (CmdType: Byte; CmdData: String); Procedure SendDataFrame (Var Buf; BufSize: Word); Procedure DoFrameCheck; Function DoAuthentication : Boolean; Procedure DoTransfers; End; +Function CreateBINKP (Owner: TServerManager; Config: RecConfig; ND: TNodeData; CliSock: TIOSocket) : TServerClient; + +Type + TBINKPServer = Class(TServerClient) + Server : TServerManager; + UserName : String[30]; + + Constructor Create (Owner: TServerManager; CliSock: TIOSocket); + Procedure Execute; Override; +// Procedure Status (Str: String); + Destructor Destroy; Override; + End; + Implementation // PROTOCOL CLASS IMPLEMENTATION -Constructor TBinkP.Create (Var C: TIOSocket; Var FL: TProtocolQueue; IsCli: Boolean; TOV: Word); +Procedure DefaultBinkPStatusProc (Owner: Pointer; Str: String); +Begin +//writeln(str); +End; + +Constructor TBinkP.Create (O: Pointer; Var C: TIOSocket; Var FL: TProtocolQueue; IsCli: Boolean; TOV: Word); Begin Inherited Create; + StatusUpdate := @DefaultBinkPStatusProc; SetTimeOut := TOV; Client := C; + Owner := O; FileList := FL; IsClient := IsCli; UseMD5 := True; @@ -154,7 +166,9 @@ Begin TimeOut := TimerSet(SetTimeOut); NeedHeader := True; HaveHeader := False; + AddressList := ''; MD5Challenge := ''; + Password := ''; HaveNode := False; AuthState := SendWelcome; @@ -167,29 +181,52 @@ Begin Inherited Destroy; End; -Function TBinkP.FindNodeByAddress (AddrList: String) : Boolean; +Function TBinkP.AuthenticateNode (AddrList: String) : Boolean; Var - F : File; + EchoFile : File; + Count : Byte; + Addr1 : String; + Addr2 : String; + UseDomain : Boolean; Begin Result := False; - Assign (F, bbsConfig.DataPath + 'echonode.dat'); + Assign (EchoFile, bbsConfig.DataPath + 'echonode.dat'); - If Not ioReset(F, SizeOf(RecEchoMailNode), fmRWDN) Then Exit; + If Not ioReset(EchoFile, SizeOf(RecEchoMailNode), fmRWDN) Then Exit; - While Not Eof(F) Do Begin - ioRead(F, EchoNode); + While Not Eof(EchoFile) Do Begin + ioRead(EchoFile, EchoNode); - // cycle through addrList and find a match. + For Count := 1 to strWordCount(AddrList, ' ') Do Begin + Addr1 := strWordGet(Count, AddrList, ' '); + Addr2 := strAddr2Str(EchoNode.Address); + UseDomain := Pos('@', Addr1) > 0; -// If EchoNode.Address = InAddress Then Begin -// Result := True; + If UseDomain Then + Addr2 := Addr2 + '@' + EchoNode.Domain; -// Break; -// End; + If strUpper(Addr1) = strUpper(Addr2) Then Begin + If PasswordMD5 Then Begin + If strUpper(Password) = strUpper(Digest2String(HMAC_MD5(String2Digest(MD5Challenge), EchoNode.binkPass))) Then Begin + Result := True; + + Break; + End; + End Else Begin + If Password = EchoNode.binkPass Then Begin + Result := True; + + Break; + End; + End; + End; + End; + + If Result Then Break; End; - Close (F); + Close (EchoFile); End; Procedure TBinkP.RemoveFilesFromFLO (FN: String); @@ -206,7 +243,7 @@ Begin // to revamp this to perform appropriate file locking and waiting. // also should be moved to mis_common since FTN-FTP will also perform // the same procedure. - // could also perform a critical section as a cheesy way to do this. + // could also perform a critical section as a cheesy way to do this? FindFirst (SetOutPath + '*.?lo', AnyFile, DirInfo); @@ -275,7 +312,7 @@ Begin Client.BufWriteStr(Char(Hi(DataSize)) + Char(Lo(DataSize)) + Char(CmdType) + CmdData + #0); Client.BufFlush; - WriteLn (' S ' + BinkCmdStr[CmdType] + ' ' + CmdData); +// WriteLn (' S ' + BinkCmdStr[CmdType] + ' ' + CmdData); // waitms(1000); //WriteLn ('Put Command Frame (', BinkCmdStr[CmdType], ') Data: ', CmdData); End; @@ -332,12 +369,12 @@ Begin HaveHeader := True; End; - Case RxFrameType of +// Case RxFrameType of // Command : If (RxCommand = M_NUL) or (RxCommand = M_ERR) Then // WriteLn (' R ', BinkCmdStr[RxCommand], ' ', GetDataStr); - Command : WriteLn (' R ', BinkCmdStr[RxCommand], ' ', GetDataStr); - Data : WriteLn ('Got Data Frame (Read ', InPos, ' of ', RxBufSize, ')'); - End; +// Command : WriteLn (' R ', BinkCmdStr[RxCommand], ' ', GetDataStr); +// Data : WriteLn ('Got Data Frame (Read ', InPos, ' of ', RxBufSize, ')'); +// End; End; End; @@ -367,6 +404,9 @@ Begin If Count > 0 Then MD5Challenge := Copy(Str, Count + 4, 255); + + If Not IsClient Then + StatusUpdate (Owner, Str); End; // WriteLn ('AuthState: ', GetStateStr(AuthState), ', HasHeader: ', HaveHeader, ' Data: ', GetDataStr); @@ -436,24 +476,26 @@ Begin // Client did not send ADR AuthState := AuthFailed; End Else Begin - HaveNode := FindNodeByAddress(GetDataStr); - AuthState := WaitPassword; - NeedHeader := True; - HaveHeader := False; + AddressList := GetDataStr; + AuthState := WaitPassword; + NeedHeader := True; + HaveHeader := False; + + StatusUpdate (Owner, 'ADR ' + AddressList); End; End; WaitPassword : If HaveHeader Then Begin AuthState := AuthFailed; - If (RxCommand = M_PWD) And HaveNode Then Begin - Str := GetDataStr; + If (RxCommand = M_PWD) Then Begin + Password := GetDataStr; - If Pos('CRAM-MD5-', Str) > 0 Then Begin - Delete(Str, 1, Pos('CRAM-MD5-', Str) + 8); + If Pos('CRAM-MD5-', Password) > 0 Then Begin + Delete(Password, 1, Pos('CRAM-MD5-', Password) + 8); - MD5Challenge := Digest2String(HMAC_MD5(String2Digest(MD5Challenge), EchoNode.binkPass)); + PasswordMD5 := True; - If Str = MD5Challenge Then Begin + If AuthenticateNode(AddressList) Then Begin SendFrame (M_OK, ''); AuthState := AuthOK; @@ -462,7 +504,9 @@ Begin If ForceMD5 Then SendFrame (M_ERR, 'Required CRAM-MD5 authentication') Else Begin - If Str = EchoNode.binkPass Then Begin + PasswordMD5 := False; + + If AuthenticateNode(AddressList) Then Begin SendFrame (M_OK, ''); AuthState := AuthOK; @@ -470,6 +514,9 @@ Begin End; End; End; + + If AuthState <> AuthOK Then + StatusUpdate(Owner, 'Auth failed'); End; WaitPwdOK : If HaveHeader Then Begin If RxCommand <> M_OK Then @@ -546,6 +593,8 @@ Begin End Else Begin SendFrame (M_GET, InFN + ' ' + strI2S(FSize) + ' ' + strI2S(InTime)); + StatusUpdate(Owner, 'Receiving: ' + InFN); + InPos := FSize; End; End; @@ -607,6 +656,8 @@ Begin // need to escape filename here and fix file time SendFrame (M_FILE, FileList.QData[FileList.QPos].FileNew + ' ' + strI2S(FileList.QData[FileList.QPos].FileSize) + ' ' + strI2S(TempFileTime) + ' 0'); + StatusUpdate (Owner, 'Sending ' + FileList.QData[FileList.QPos].FileNew); + TxState := TxSendData; End Else Begin SendFrame (M_EOB, ''); @@ -642,9 +693,126 @@ Begin End; Until ((RxState = RxDone) and (TxState = TxDone)) or (Not Client.Connected) or (TimerUp(TimeOut)); + If Not IsClient Then + StatusUpdate(Owner, 'Session complete'); + If Client.Connected Then Client.BufFlush; End; +// GENERAL FIDO STUFF SHOULD BE RELOCATED SOMEWHERE ELSE? + +Function IsFTNPrimary (EchoNode: RecEchoMailNode) : Boolean; +Var + Count : Byte; +Begin + For Count := 1 to 30 Do + If (strUpper(EchoNode.Domain) = strUpper(bbsConfig.NetDomain[Count])) and + (EchoNode.Address.Zone = bbsConfig.NetAddress[Count].Zone) and + (bbsConfig.NetPrimary[Count]) Then Begin + Result := True; + + Exit; + End; + + Result := False; +End; + +Function GetFTNFlowName (Dest: RecEchoMailAddr) : String; +Begin + If Dest.Point = 0 Then + Result := strI2H((Dest.Net SHL 16) OR Dest.Node, 8) + Else + Result := strI2H(Dest.Point, 8); +End; + +Function GetFTNOutPath (EchoNode: RecEchoMailNode) : String; +Begin; + If IsFTNPrimary(EchoNode) Then + Result := bbsConfig.OutboundPath + Else + Result := DirLast(bbsConfig.OutboundPath) + strLower(EchoNode.Domain + '.' + strPadL(strI2H(EchoNode.Address.Zone, 3), 3, '0')) + PathChar; + + If EchoNode.Address.Point <> 0 Then + Result := Result + strI2H((EchoNode.Address.Net SHL 16) OR EchoNode.Address.Node, 8) + '.pnt' + PathChar; +End; + +Procedure QueueByNode (Var Queue: TProtocolQueue; SkipHold: Boolean; EchoNode: RecEchoMailNode); +Var + DirInfo : SearchRec; + FLOFile : Text; + Str : String; + FN : String; + Path : String; + OutPath : String; +Begin + OutPath := GetFTNOutPath(EchoNode); + + // QUEUE BY FLOW FILES + + FindFirst (OutPath + '*.?lo', AnyFile, DirInfo); + + While DosError = 0 Do Begin + + If SkipHold And (UpCase(JustFileExt(DirInfo.Name)[1]) = 'H') Then Begin + FindNext (DirInfo); + + Continue; + End; + + If Not ((strUpper(JustFileName(DirInfo.Name)) = strUpper(GetFTNFlowName(EchoNode.Address))) and EchoNode.Active and (EchoNode.ProtType = 0)) Then Begin + FindNext (DirInfo); + + Continue; + End; + + Assign (FLOFile, OutPath + DirInfo.Name); + Reset (FLOFile); + + While Not Eof(FLOFile) Do Begin + ReadLn (FLOFile, Str); + + If (Str = '') or (Str[1] = '!') Then Continue; + + Str := strStripB(Copy(Str, 2, 255), ' '); + FN := JustFile(Str); + Path := JustPath(Str); + + Queue.Add (True, Path, FN, ''); + End; + + Close (FLOFile); + + FindNext (DirInfo); + End; + + FindClose (DirInfo); + + // QUEUE BY RAW PACKET + + FindFirst (OutPath + '*.?ut', AnyFile, DirInfo); + + While DosError = 0 Do Begin + + If SkipHold And (UpCase(JustFileExt(DirInfo.Name)[1]) = 'H') Then Begin + FindNext (DirInfo); + + Continue; + End; + + If Not ((strUpper(JustFileName(DirInfo.Name)) = strUpper(GetFTNFlowName(EchoNode.Address))) and EchoNode.Active and (EchoNode.ProtType = 0)) Then Begin + FindNext (DirInfo); + + Continue; + End; + + Queue.Add (True, OutPath, DirInfo.Name, FileNewExt(DirInfo.Name, 'pkt')); + + FindNext (DirInfo); + End; + + FindClose (DirInfo); +End; + // SERVER CLASS IMPLEMENTATION Function CreateBINKP (Owner: TServerManager; Config: RecConfig; ND: TNodeData; CliSock: TIOSocket) : TServerClient; @@ -652,6 +820,11 @@ Begin Result := TBINKPServer.Create(Owner, CliSock); End; +Procedure Status (Owner: Pointer; Str: String); +Begin + TServerManager(Owner).Status(Str); +End; + Constructor TBINKPServer.Create (Owner: TServerManager; CliSock: TIOSocket); Begin Inherited Create(Owner, CliSock); @@ -662,15 +835,26 @@ End; Procedure TBINKPServer.Execute; Var - Queue : TProtocolQueue; - BinkP : TBinkP; + Queue : TProtocolQueue; + BinkP : TBinkP; + Count : Integer; + Address : String; Begin Queue := TProtocolQueue.Create; - BinkP := TBinkP.Create (Client, Queue, False, bbsConfig.inetBINKPTimeOut); + BinkP := TBinkP.Create (Server, Client, Queue, False, bbsConfig.inetBINKPTimeOut); + + BinkP.StatusUpdate := @Status; If BinkP.DoAuthentication Then Begin - // Pull address and build send queue + For Count := 1 to strWordCount(BinkP.AddressList, ' ') Do Begin + Address := strWordGet(Count, BinkP.AddressList, ' '); + + If BinkP.AuthenticateNode(Address) Then + QueueByNode(Queue, False, BinkP.EchoNode); + End; + + BinkP.FileList := Queue; BinkP.DoTransfers; End; diff --git a/mystic/mis_client_ftp.pas b/mystic/mis_client_ftp.pas index 8e0e4ab..778539a 100644 --- a/mystic/mis_client_ftp.pas +++ b/mystic/mis_client_ftp.pas @@ -23,6 +23,7 @@ Uses Function CreateFTP (Owner: TServerManager; Config: RecConfig; ND: TNodeData; CliSock: TIOSocket) : TServerClient; +// user login type: FTPFTN, or regular Type TFTPServer = Class(TServerClient) Server : TServerManager; diff --git a/mystic/mpl_common.pas b/mystic/mpl_common.pas index b4c4e7f..8651b6a 100644 --- a/mystic/mpl_common.pas +++ b/mystic/mpl_common.pas @@ -386,21 +386,21 @@ Begin AddVar ({$IFDEF MPLPARSER} 'userfsreader', {$ENDIF} iBool); End; 2 : Begin - AddPointer ({$IFDEF MPLPARSER} 'cfgsyspath', {$ENDIF} iString, mysMaxPathSize, {$IFNDEF MPLPARSER} @Config.SystemPath {$ELSE} NIL {$ENDIF}); - AddPointer ({$IFDEF MPLPARSER} 'cfgdatapath', {$ENDIF} iString, mysMaxPathSize, {$IFNDEF MPLPARSER} @Config.DataPath {$ELSE} NIL {$ENDIF}); - AddPointer ({$IFDEF MPLPARSER} 'cfglogspath', {$ENDIF} iString, mysMaxPathSize, {$IFNDEF MPLPARSER} @Config.LogsPath {$ELSE} NIL {$ENDIF}); - AddPointer ({$IFDEF MPLPARSER} 'cfgmsgspath', {$ENDIF} iString, mysMaxPathSize, {$IFNDEF MPLPARSER} @Config.MsgsPath {$ELSE} NIL {$ENDIF}); - AddPointer ({$IFDEF MPLPARSER} 'cfgattpath', {$ENDIF} iString, mysMaxPathSize, {$IFNDEF MPLPARSER} @Config.AttachPath {$ELSE} NIL {$ENDIF}); - AddPointer ({$IFDEF MPLPARSER} 'cfgqwkpath', {$ENDIF} iString, mysMaxPathSize, {$IFNDEF MPLPARSER} @Config.QwkPath {$ELSE} NIL {$ENDIF}); + AddPointer ({$IFDEF MPLPARSER} 'cfgsyspath', {$ENDIF} iString, mysMaxPathSize, {$IFNDEF MPLPARSER} @bbsCfg.SystemPath {$ELSE} NIL {$ENDIF}); + AddPointer ({$IFDEF MPLPARSER} 'cfgdatapath', {$ENDIF} iString, mysMaxPathSize, {$IFNDEF MPLPARSER} @bbsCfg.DataPath {$ELSE} NIL {$ENDIF}); + AddPointer ({$IFDEF MPLPARSER} 'cfglogspath', {$ENDIF} iString, mysMaxPathSize, {$IFNDEF MPLPARSER} @bbsCfg.LogsPath {$ELSE} NIL {$ENDIF}); + AddPointer ({$IFDEF MPLPARSER} 'cfgmsgspath', {$ENDIF} iString, mysMaxPathSize, {$IFNDEF MPLPARSER} @bbsCfg.MsgsPath {$ELSE} NIL {$ENDIF}); + AddPointer ({$IFDEF MPLPARSER} 'cfgattpath', {$ENDIF} iString, mysMaxPathSize, {$IFNDEF MPLPARSER} @bbsCfg.AttachPath {$ELSE} NIL {$ENDIF}); + AddPointer ({$IFDEF MPLPARSER} 'cfgqwkpath', {$ENDIF} iString, mysMaxPathSize, {$IFNDEF MPLPARSER} @bbsCfg.QwkPath {$ELSE} NIL {$ENDIF}); AddPointer ({$IFDEF MPLPARSER} 'cfgmenupath', {$ENDIF} iString, mysMaxPathSize, {$IFNDEF MPLPARSER} @Session.Theme.MenuPath {$ELSE} NIL {$ENDIF}); AddPointer ({$IFDEF MPLPARSER} 'cfgtextpath', {$ENDIF} iString, mysMaxPathSize, {$IFNDEF MPLPARSER} @Session.Theme.TextPath {$ELSE} NIL {$ENDIF}); - AddPointer ({$IFDEF MPLPARSER} 'cfgmpepath', {$ENDIF} iString, mysMaxPathSize, {$IFNDEF MPLPARSER} @Config.ScriptPath {$ELSE} NIL {$ENDIF}); + AddPointer ({$IFDEF MPLPARSER} 'cfgmpepath', {$ENDIF} iString, mysMaxPathSize, {$IFNDEF MPLPARSER} @bbsCfg.ScriptPath {$ELSE} NIL {$ENDIF}); AddPointer ({$IFDEF MPLPARSER} 'cfgtemppath', {$ENDIF} iString, mysMaxPathSize, {$IFNDEF MPLPARSER} @Session.TempPath {$ELSE} NIL {$ENDIF}); - AddPointer ({$IFDEF MPLPARSER} 'cfgtimeout', {$ENDIF} iWord, 4, {$IFNDEF MPLPARSER} @Config.Inactivity {$ELSE} NIL {$ENDIF}); - AddPointer ({$IFDEF MPLPARSER} 'cfgseeinvis', {$ENDIF} iString, 20, {$IFNDEF MPLPARSER} @Config.AcsSeeInvis {$ELSE} NIL {$ENDIF}); - AddPointer ({$IFDEF MPLPARSER} 'cfgtnnodes', {$ENDIF} iByte, 1, {$IFNDEF MPLPARSER} @Config.INetTNNodes {$ELSE} NIL {$ENDIF}); + AddPointer ({$IFDEF MPLPARSER} 'cfgtimeout', {$ENDIF} iWord, 4, {$IFNDEF MPLPARSER} @bbsCfg.Inactivity {$ELSE} NIL {$ENDIF}); + AddPointer ({$IFDEF MPLPARSER} 'cfgseeinvis', {$ENDIF} iString, 20, {$IFNDEF MPLPARSER} @bbsCfg.AcsSeeInvis {$ELSE} NIL {$ENDIF}); + AddPointer ({$IFDEF MPLPARSER} 'cfgtnnodes', {$ENDIF} iByte, 1, {$IFNDEF MPLPARSER} @bbsCfg.INetTNNodes {$ELSE} NIL {$ENDIF}); - AddPointer ({$IFDEF MPLPARSER} 'cfgnetdesc', {$ENDIF} iString, 30 * 25 - 1, {$IFNDEF MPLPARSER} @Config.NetDesc {$ELSE} NIL {$ENDIF}); + AddPointer ({$IFDEF MPLPARSER} 'cfgnetdesc', {$ENDIF} iString, 30 * 25 - 1, {$IFNDEF MPLPARSER} @bbsCfg.NetDesc {$ELSE} NIL {$ENDIF}); CV[X]^.ArrPos := 1; {$IFNDEF MPLPARSER} CV[X]^.VarSize := 26; diff --git a/mystic/mpl_execute.pas b/mystic/mpl_execute.pas index 2df1c2c..eaa883f 100644 --- a/mystic/mpl_execute.pas +++ b/mystic/mpl_execute.pas @@ -7,6 +7,7 @@ Interface Uses DOS, m_FileIO, + bbs_dataBase, BBS_Common; {$I MPL_TYPES.PAS} @@ -255,7 +256,7 @@ Var Begin Result := False; - Assign (F, Config.DataPath + 'users.dat'); + Assign (F, bbsCfg.DataPath + 'users.dat'); If Not ioReset(F, SizeOf(RecUser), fmRWDN) Then Exit; If ioSeek(F, Pred(Num)) And (ioRead(F, U)) Then Begin @@ -271,7 +272,7 @@ Var F : File; U : RecUser; Begin - Assign (F, Config.DataPath + 'users.dat'); + Assign (F, bbsCfg.DataPath + 'users.dat'); If Not ioReset(F, SizeOf(RecUser), fmRWDN) Then Exit; @@ -330,7 +331,7 @@ Var Begin Result := False; - Assign (F, Config.DataPath + 'groups_g.dat'); + Assign (F, bbsCfg.DataPath + 'groups_g.dat'); If Not ioReset(F, SizeOf(RecGroup), fmRWDN) Then Exit; If ioSeek(F, Pred(Num)) And (ioRead(F, G)) Then Begin @@ -355,7 +356,7 @@ Var Begin Result := False; - Assign (F, Config.DataPath + 'fbases.dat'); + Assign (F, bbsCfg.DataPath + 'fbases.dat'); If Not ioReset(F, SizeOf(RecFileBase), fmRWDN) Then Exit; If ioSeek(F, Pred(Num)) And (ioRead(F, FB)) Then Begin @@ -380,7 +381,7 @@ Var Begin Result := False; - Assign (F, Config.DataPath + 'groups_f.dat'); + Assign (F, bbsCfg.DataPath + 'groups_f.dat'); If Not ioReset(F, SizeOf(RecGroup), fmRWDN) Then Exit; If ioSeek(F, Pred(Num)) And (ioRead(F, G)) Then Begin @@ -2557,7 +2558,7 @@ Begin FN := Session.Theme.ScriptPath + FN Else If Session.Theme.Flags and thmFallBack <> 0 Then - FN := Config.ScriptPath + FN; + FN := bbsCfg.ScriptPath + FN; MPEName := FN; diff --git a/mystic/mutil.pas b/mystic/mutil.pas index 17221a5..ed3074d 100644 --- a/mystic/mutil.pas +++ b/mystic/mutil.pas @@ -47,7 +47,7 @@ Uses mUtil_MsgPost, mUtil_EchoExport, mUtil_EchoImport, - bbs_Common; + bbs_DataBase; {$I MUTIL_ANSI.PAS} diff --git a/mystic/mutil_allfiles.pas b/mystic/mutil_allfiles.pas index 57017e6..1dccf29 100644 --- a/mystic/mutil_allfiles.pas +++ b/mystic/mutil_allfiles.pas @@ -14,7 +14,7 @@ Uses m_FileIO, mUtil_Common, mUtil_Status, - bbs_Common; + bbs_DataBase; Const TotalFiles : Cardinal = 0; diff --git a/mystic/mutil_common.pas b/mystic/mutil_common.pas index 6fb080b..fd30886 100644 --- a/mystic/mutil_common.pas +++ b/mystic/mutil_common.pas @@ -8,7 +8,7 @@ Uses m_Output, m_IniReader, mutil_Status, - bbs_Common, + bbs_DataBase, bbs_MsgBase_Abs, bbs_MsgBase_Squish, bbs_MsgBase_JAM; diff --git a/mystic/mutil_echocore.pas b/mystic/mutil_echocore.pas index 2c57b3c..97c06f9 100644 --- a/mystic/mutil_echocore.pas +++ b/mystic/mutil_echocore.pas @@ -9,7 +9,7 @@ Uses m_FileIO, m_Strings, m_DateTime, - BBS_Common, + bbs_DataBase, mUtil_Common; Const diff --git a/mystic/mutil_echoexport.pas b/mystic/mutil_echoexport.pas index e9756f9..e3bc0ae 100644 --- a/mystic/mutil_echoexport.pas +++ b/mystic/mutil_echoexport.pas @@ -17,7 +17,7 @@ Uses mUtil_Common, mUtil_Status, mUtil_EchoCore, - bbs_Common, + bbs_DataBase, bbs_MsgBase_ABS, bbs_MsgBase_JAM, bbs_MsgBase_Squish; diff --git a/mystic/mutil_echofix.pas b/mystic/mutil_echofix.pas index 13c88c6..1f66dbd 100644 --- a/mystic/mutil_echofix.pas +++ b/mystic/mutil_echofix.pas @@ -13,7 +13,7 @@ Implementation Uses m_Strings, - bbs_Common; + bbs_DataBase; Function ProcessedByAreaFix (Var PKT: TPKTReader) : Boolean; Var diff --git a/mystic/mutil_echoimport.pas b/mystic/mutil_echoimport.pas index d286892..e6bfaa3 100644 --- a/mystic/mutil_echoimport.pas +++ b/mystic/mutil_echoimport.pas @@ -13,7 +13,7 @@ Uses m_FileIO, m_Strings, AView, - BBS_Common, + bbs_DataBase, BBS_MsgBase_ABS, BBS_MsgBase_JAM, BBS_MsgBase_Squish, diff --git a/mystic/mutil_filebone.pas b/mystic/mutil_filebone.pas index a01f0a7..678a091 100644 --- a/mystic/mutil_filebone.pas +++ b/mystic/mutil_filebone.pas @@ -14,7 +14,7 @@ Uses m_FileIO, mUtil_Common, mUtil_Status, - bbs_Common; + bbs_DataBase; Procedure uImportFileBone; Var diff --git a/mystic/mutil_filesbbs.pas b/mystic/mutil_filesbbs.pas index ed38163..4e5c55b 100644 --- a/mystic/mutil_filesbbs.pas +++ b/mystic/mutil_filesbbs.pas @@ -14,7 +14,7 @@ Uses m_DateTime, mUtil_Common, mUtil_Status, - bbs_Common; + bbs_DataBase; Procedure uImportFilesBBS; Var diff --git a/mystic/mutil_importmsgbase.pas b/mystic/mutil_importmsgbase.pas index 6e77881..4ee7065 100644 --- a/mystic/mutil_importmsgbase.pas +++ b/mystic/mutil_importmsgbase.pas @@ -14,7 +14,7 @@ Uses m_Strings, mUtil_Common, mUtil_Status, - bbs_Common; + bbs_DataBase; Procedure uImportMessageBases; Var diff --git a/mystic/mutil_importna.pas b/mystic/mutil_importna.pas index 249fbd4..44435ac 100644 --- a/mystic/mutil_importna.pas +++ b/mystic/mutil_importna.pas @@ -12,7 +12,7 @@ Uses m_Strings, mUtil_Common, mUtil_Status, - bbs_Common; + bbs_DataBase; Procedure uImportNA; Var diff --git a/mystic/mutil_msgpost.pas b/mystic/mutil_msgpost.pas index da2e0ea..ec4a103 100644 --- a/mystic/mutil_msgpost.pas +++ b/mystic/mutil_msgpost.pas @@ -13,7 +13,8 @@ Uses m_Strings, mUtil_Common, mUtil_Status, - bbs_Common; + bbs_Common, + bbs_DataBase; Procedure uPostMessages; Const diff --git a/mystic/mutil_msgpurge.pas b/mystic/mutil_msgpurge.pas index ae8d11f..a3ee39a 100644 --- a/mystic/mutil_msgpurge.pas +++ b/mystic/mutil_msgpurge.pas @@ -13,7 +13,7 @@ Uses m_DateTime, mUtil_Common, mUtil_Status, - bbs_Common, + bbs_DataBase, bbs_MsgBase_ABS, bbs_MsgBase_JAM, bbs_MsgBase_Squish; @@ -97,4 +97,4 @@ Begin ProcessResult (rDONE, True); End; -End. \ No newline at end of file +End. diff --git a/mystic/mutil_toplists.pas b/mystic/mutil_toplists.pas index 1482d90..9c78c0c 100644 --- a/mystic/mutil_toplists.pas +++ b/mystic/mutil_toplists.pas @@ -14,7 +14,7 @@ Uses m_FileIO, mUtil_Common, mUtil_Status, - bbs_Common; + bbs_DataBase; Type TopListType = (TopCall, TopPost, TopDL, TopUL, TopPCR); diff --git a/mystic/mutil_upload.pas b/mystic/mutil_upload.pas index 4030432..8c1cfed 100644 --- a/mystic/mutil_upload.pas +++ b/mystic/mutil_upload.pas @@ -13,7 +13,7 @@ Uses m_DateTime, mUtil_Common, mUtil_Status, - bbs_Common; + bbs_DataBase; Procedure uMassUpload; Var diff --git a/mystic/mystic.pas b/mystic/mystic.pas index 6eaa0be..578de1b 100644 --- a/mystic/mystic.pas +++ b/mystic/mystic.pas @@ -42,6 +42,7 @@ Uses m_Input, m_Pipe, bbs_Common, + bbs_DataBase, bbs_Core, bbs_NodeInfo, bbs_Cfg_Main; @@ -63,14 +64,14 @@ Begin Assign (ConfigFile, 'mystic.dat'); if ioReset(ConfigFile, SizeOf(RecConfig), fmReadWrite + fmDenyNone) Then Begin - Read (ConfigFile, Config); + Read (ConfigFile, bbsCfg); Close (ConfigFile); End Else Begin WriteLn('ERROR: Unable to read mystic.dat'); Halt(1); End; - If Config.DataChanged <> mysDataChanged Then Begin + If bbsCfg.DataChanged <> mysDataChanged Then Begin WriteLn('ERROR: Data files are not current and must be upgraded'); Halt(1); End; @@ -141,7 +142,7 @@ Begin FileMode := 66; DirClean (Session.TempPath, ''); - FileErase (Config.DataPath + 'chat' + strI2S(Session.NodeNum) + '.dat'); + FileErase (bbsCfg.DataPath + 'chat' + strI2S(Session.NodeNum) + '.dat'); {$IFNDEF LOGGING} {$IFNDEF UNIX} @@ -176,8 +177,8 @@ Var Begin Session.NodeNum := 0; - For Count := 1 to Config.INetTNNodes Do Begin - Assign (ChatFile, Config.DataPath + 'chat' + strI2S(Count) + '.dat'); + For Count := 1 to bbsCfg.INetTNNodes Do Begin + Assign (ChatFile, bbsCfg.DataPath + 'chat' + strI2S(Count) + '.dat'); If Not ioReset (ChatFile, Sizeof(ChatRec), fmRWDN) Then Begin Session.NodeNum := Count; @@ -245,21 +246,21 @@ Begin Randomize; FileMode := 66; - Session.TempPath := Config.SystemPath + 'temp' + strI2S(Session.NodeNum) + PathChar; - Session.Pipe := TPipe.Create(Config.DataPath, False, Session.NodeNum); + Session.TempPath := bbsCfg.SystemPath + 'temp' + strI2S(Session.NodeNum) + PathChar; + Session.Pipe := TPipe.Create(bbsCfg.DataPath, False, Session.NodeNum); {$I-} - MkDir (Config.SystemPath + 'temp' + strI2S(Session.NodeNum)); + MkDir (bbsCfg.SystemPath + 'temp' + strI2S(Session.NodeNum)); {$I+} If IoResult <> 0 Then; DirClean (Session.TempPath, ''); - Assign (Session.User.UserFile, Config.DataPath + 'users.dat'); + Assign (Session.User.UserFile, bbsCfg.DataPath + 'users.dat'); {$I-} Reset (Session.User.UserFile); {$I+} If IoResult <> 0 Then Begin - If FileExist(Config.DataPath + 'users.dat') Then Begin + If FileExist(bbsCfg.DataPath + 'users.dat') Then Begin Screen.WriteLine ('ERROR: Unable to access USERS.DAT'); DisposeClasses; Halt(1); @@ -269,12 +270,12 @@ Begin End; Close (Session.User.UserFile); - Assign (Session.VoteFile, Config.DataPath + 'votes.dat'); + Assign (Session.VoteFile, bbsCfg.DataPath + 'votes.dat'); {$I-} Reset (Session.VoteFile); {$I+} If IoResult <> 0 Then ReWrite (Session.VoteFile); Close (Session.VoteFile); - Assign (Session.ThemeFile, Config.DataPath + 'theme.dat'); + Assign (Session.ThemeFile, bbsCfg.DataPath + 'theme.dat'); {$I-} Reset (Session.ThemeFile); {$I+} If IoResult <> 0 Then Begin Screen.WriteLine ('ERROR: No theme configuration.'); @@ -283,9 +284,9 @@ Begin End; Close (Session.ThemeFile); - If Not Session.LoadThemeData(Config.DefThemeFile) Then Begin + If Not Session.LoadThemeData(bbsCfg.DefThemeFile) Then Begin If Not Session.ConfigMode Then Begin - Screen.WriteLine ('ERROR: Default theme prompts not found: ' + Config.DefThemeFile + '.txt'); + Screen.WriteLine ('ERROR: Default theme prompts not found: ' + bbsCfg.DefThemeFile + '.txt'); DisposeClasses; Halt(1); End; @@ -293,16 +294,16 @@ Begin 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); + CheckDIR (bbsCfg.SystemPath); + CheckDIR (bbsCfg.AttachPath); + CheckDIR (bbsCfg.DataPath); + CheckDIR (bbsCfg.MsgsPath); + CheckDIR (bbsCfg.SemaPath); + CheckDIR (bbsCfg.QwkPath); + CheckDIR (bbsCfg.ScriptPath); + CheckDIR (bbsCfg.LogsPath); - Assign (RoomFile, Config.DataPath + 'chatroom.dat'); + Assign (RoomFile, bbsCfg.DataPath + 'chatroom.dat'); {$I-} Reset (RoomFile); {$I+} If IoResult <> 0 Then Begin ReWrite (RoomFile); @@ -312,12 +313,12 @@ Begin End; Close (RoomFile); - Assign (Session.FileBase.FBaseFile, Config.DataPath + 'fbases.dat'); + Assign (Session.FileBase.FBaseFile, bbsCfg.DataPath + 'fbases.dat'); {$I-} Reset(Session.FileBase.FBaseFile); {$I+} If IoResult <> 0 Then ReWrite(Session.FileBase.FBaseFile); Close (Session.FileBase.FBaseFile); - Assign (Session.Msgs.MBaseFile, Config.DataPath + 'mbases.dat'); + Assign (Session.Msgs.MBaseFile, bbsCfg.DataPath + 'mbases.dat'); {$I-} Reset(Session.Msgs.MBaseFile); {$I+} If IoResult <> 0 Then Begin Screen.WriteLine ('ERROR: No message base configuration. Use MYSTIC -CFG'); @@ -326,17 +327,17 @@ Begin End; Close (Session.Msgs.MBaseFile); - Assign (Session.Msgs.GroupFile, Config.DataPath + 'groups_g.dat'); + Assign (Session.Msgs.GroupFile, bbsCfg.DataPath + 'groups_g.dat'); {$I-} Reset (Session.Msgs.GroupFile); {$I-} If IoResult <> 0 Then ReWrite(Session.Msgs.GroupFile); Close (Session.Msgs.GroupFile); - Assign (Session.FileBase.FGroupFile, Config.DataPath + 'groups_f.dat'); + Assign (Session.FileBase.FGroupFile, bbsCfg.DataPath + 'groups_f.dat'); {$I-} Reset (Session.FileBase.FGroupFile); {$I+} If IoResult <> 0 Then ReWrite (Session.FileBase.FGroupFile); Close (Session.FileBase.FGroupFile); - Assign (Session.User.SecurityFile, Config.DataPath + 'security.dat'); + Assign (Session.User.SecurityFile, bbsCfg.DataPath + 'security.dat'); {$I-} Reset (Session.User.SecurityFile); {$I+} If IoResult <> 0 Then Begin ReWrite(Session.User.SecurityFile); @@ -346,17 +347,17 @@ Begin End; Close (Session.User.SecurityFile); - Assign (LastOnFile, Config.DataPath + 'callers.dat'); + Assign (LastOnFile, bbsCfg.DataPath + 'callers.dat'); {$I-} Reset(LastOnFile); {$I+} If IoResult <> 0 Then ReWrite(LastOnFile); Close (LastOnFile); - Assign (Session.FileBase.ArcFile, Config.DataPath + 'archive.dat'); + Assign (Session.FileBase.ArcFile, bbsCfg.DataPath + 'archive.dat'); {$I-} Reset(Session.FileBase.ArcFile); {$I+} If IoResult <> 0 Then ReWrite(Session.FileBase.ArcFile); Close (Session.FileBase.ArcFile); - Assign (Session.FileBase.ProtocolFile, Config.DataPath + 'protocol.dat'); + Assign (Session.FileBase.ProtocolFile, bbsCfg.DataPath + 'protocol.dat'); {$I-} Reset (Session.FileBase.ProtocolFile); {$I+} If IoResult <> 0 Then ReWrite (Session.FileBase.ProtocolFile); Close (Session.FileBase.ProtocolFile); @@ -470,7 +471,7 @@ Begin If Session.TimeOffset > 0 Then Session.SetTimeLeft(Session.TimeOffset) Else - Session.SetTimeLeft(Config.LoginTime); + Session.SetTimeLeft(bbsCfg.LoginTime); {$IFNDEF UNIX} Screen.TextAttr := 7; @@ -494,7 +495,7 @@ Begin If Session.User.ThisUser.StartMenu <> '' Then Session.Menu.MenuName := Session.User.ThisUser.StartMenu Else - Session.Menu.MenuName := Config.DefStartMenu; + Session.Menu.MenuName := bbsCfg.DefStartMenu; Repeat Session.Menu.ExecuteMenu (True, True, False, True); diff --git a/mystic/whatsnew.txt b/mystic/whatsnew.txt index bac68df..747898c 100644 --- a/mystic/whatsnew.txt +++ b/mystic/whatsnew.txt @@ -3542,4 +3542,9 @@ ! Fixed an issue with useropts variable in MPL which could cause memory corruption. - \ No newline at end of file + ! Fixed two leaked file handles during QWK packet generation. + + + New MCI code: FT returns the total number of files in the current file + area. + +