diff --git a/mystic/HISTORY.txt b/mystic/HISTORY.txt index ab7db38..aa221d3 100644 --- a/mystic/HISTORY.txt +++ b/mystic/HISTORY.txt @@ -1,4 +1,4 @@ -.---------------------------------------------------------------------------. +.--------------------------------------------------------------------------- | Mystic BBS History Documentation Versions 1.05 through 1.10 | `---------------------------------------------------------------------------' diff --git a/mystic/bbs_cfg_main.pas b/mystic/bbs_cfg_main.pas index a9082b0..946bffd 100644 --- a/mystic/bbs_cfg_main.pas +++ b/mystic/bbs_cfg_main.pas @@ -26,11 +26,12 @@ Uses bbs_cfg_SecLevel, bbs_cfg_Theme, bbs_cfg_UserEdit, + bbs_cfg_EchoMail, + bbs_cfg_MenuEdit, // old shit to rewrite bbs_cfg_events, - bbs_cfg_vote, - bbs_cfg_menuedit; + bbs_cfg_vote; Procedure Configuration_ExecuteEditor (Mode: Char); Var @@ -40,7 +41,7 @@ Begin Case Mode of 'A' : Configuration_ArchiveEditor; - 'B' : Configuration_MessageBaseEditor; + 'B' : Configuration_MessageBaseEditor(True); 'F' : Configuration_FileBaseEditor; 'G' : Configuration_GroupEditor(True); 'L' : Configuration_SecurityEditor(True); @@ -177,7 +178,7 @@ Begin End; End; 1 : Begin - BoxOpen (4, 4, 33, 16); + BoxOpen (4, 4, 33, 17); CoolBoxOpen (3, 'Configuration'); Form.AddNone ('S', ' S System Paths', 5, 5, 5, 5, 28, ''); @@ -188,9 +189,10 @@ Begin Form.AddNone ('3', ' 3 New User Optional Fields', 5, 10, 5, 10, 28, ''); Form.AddNone ('F', ' F File Base Settings', 5, 11, 5, 11, 28, ''); Form.AddNone ('M', ' M Message Base Settings', 5, 12, 5, 12, 28, ''); - Form.AddNone ('E', ' E Echomail Networks', 5, 13, 5, 13, 28, ''); - Form.AddNone ('O', ' O Offline Mail Settings', 5, 14, 5, 14, 28, ''); - Form.AddNone ('C', ' C Console Settings', 5, 15, 5, 15, 28, ''); + Form.AddNone ('E', ' E EchoMail Addresses', 5, 13, 5, 13, 28, ''); + Form.AddNone ('N', ' N EchoMail Nodes', 5, 14, 5, 14, 28, ''); + Form.AddNone ('O', ' O Offline Mail Settings', 5, 15, 5, 15, 28, ''); + Form.AddNone ('C', ' C Console Settings', 5, 16, 5, 16, 28, ''); Res := Form.Execute; MenuPos[1] := Form.ItemPos; @@ -208,6 +210,7 @@ Begin 'G' : Configuration_GeneralSettings; 'L' : Configuration_LoginMatrix; 'E' : Configuration_EchoMailAddress(True); + 'N' : Configuration_EchoMailNodes(True); '3' : Configuration_OptionalFields; 'F' : Configuration_FileSettings; 'M' : Configuration_MessageSettings; @@ -285,7 +288,7 @@ Begin End Else Begin Case Res of 'A' : Configuration_ArchiveEditor; - 'B' : Configuration_MessageBaseEditor; + 'B' : Configuration_MessageBaseEditor(True); 'F' : Configuration_FileBaseEditor; 'G' : Configuration_GroupEditor(True); 'M' : Configuration_MenuEditor; diff --git a/mystic/bbs_cfg_msgbase.pas b/mystic/bbs_cfg_msgbase.pas index bfb580d..4b3d471 100644 --- a/mystic/bbs_cfg_msgbase.pas +++ b/mystic/bbs_cfg_msgbase.pas @@ -4,7 +4,7 @@ Unit bbs_cfg_MsgBase; Interface -Procedure Configuration_MessageBaseEditor; +Function Configuration_MessageBaseEditor (Edit: Boolean) : LongInt; Implementation @@ -17,7 +17,7 @@ Uses bbs_Ansi_MenuBox, bbs_Ansi_MenuForm, bbs_Cfg_Common, - bbs_Cfg_SysCfg, + bbs_Cfg_EchoMail, bbs_Common; Type @@ -97,33 +97,36 @@ Var Box : TAnsiMenuBox; Form : TAnsiMenuForm; Topic : String; + Links : LongInt; Begin Topic := '|03(|09Message Base Edit|03) |01-|09> |15'; Box := TAnsiMenuBox.Create; Form := TAnsiMenuForm.Create; + Box.Shadow := False; Box.Header := ' Index ' + strI2S(MBase.Index) + ' '; - Box.Open (3, 5, 77, 21); + Box.Open (3, 5, 77, 22); - VerticalLine (17, 6, 20); - VerticalLine (66, 6, 20); + VerticalLine (17, 6, 21); + VerticalLine (66, 6, 21); Form.AddStr ('N', ' Name' , 11, 6, 19, 6, 6, 30, 40, @MBase.Name, Topic + 'Message base description'); Form.AddStr ('W', ' Newsgroup' , 6, 7, 19, 7, 11, 30, 60, @MBase.NewsName, Topic + 'Newsgroup name'); Form.AddStr ('Q', ' QWK Name' , 7, 8, 19, 8, 10, 13, 13, @MBase.QwkName, Topic + 'Qwk Short name'); - Form.AddStr ('F', ' File Name' , 6, 9, 19, 9, 11, 30, 40, @MBase.FileName, Topic + 'Message base storage file name'); - Form.AddPath ('P', ' Path' , 11, 10, 19, 10, 6, 30, 80, @MBase.Path, Topic + 'Message base storage path'); - Form.AddStr ('L', ' List ACS' , 7, 11, 19, 11, 10, 30, 30, @MBase.ListACS, Topic + 'Access required to see in base list'); - Form.AddStr ('R', ' Read ACS' , 7, 12, 19, 12, 10, 30, 30, @MBase.ReadACS, Topic + 'Access required to read messages'); - Form.AddStr ('C', ' Post ACS' , 7, 13, 19, 13, 10, 30, 30, @MBase.PostACS, Topic + 'Access required to post messages'); - Form.AddStr ('Y', ' Sysop ACS' , 6, 14, 19, 14, 11, 30, 30, @MBase.SysopACS, Topic + 'Access required for Sysop access'); - Form.AddNone ('D', ' Net Address' , 4, 15, 19, 15, 13, Topic + 'NetMail Address'); - Form.AddStr ('I', ' Origin' , 9, 16, 19, 16, 8, 30, 50, @MBase.Origin, Topic + 'Message base origin line'); - Form.AddStr ('S', ' Sponsor' , 8, 17, 19, 17, 9, 30, 30, @MBase.Sponsor, Topic + 'User name of base''s sponser'); - Form.AddStr ('H', ' Header' , 9, 18, 19, 18, 8, 20, 20, @MBase.Header, Topic + 'Display file name of msg header'); - Form.AddStr ('T', ' R Template' , 5, 19, 19, 19, 12, 20, 20, @MBase.RTemplate, Topic + 'Template for full screen reader'); - Form.AddStr ('M', ' L Template' , 5, 20, 19, 20, 12, 20, 20, @MBase.ITemplate, Topic + 'Template for lightbar message list'); + Form.AddStr ('8', ' Echo Tag' , 7, 9, 19, 9, 10, 30, 40, @MBase.EchoTag, Topic + 'FTN EchoTag'); + Form.AddStr ('F', ' File Name' , 6, 10, 19, 10, 11, 30, 40, @MBase.FileName, Topic + 'Message base storage file name'); + Form.AddPath ('P', ' Path' , 11, 11, 19, 11, 6, 30, 80, @MBase.Path, Topic + 'Message base storage path'); + Form.AddStr ('L', ' List ACS' , 7, 12, 19, 12, 10, 30, 30, @MBase.ListACS, Topic + 'Access required to see in base list'); + Form.AddStr ('R', ' Read ACS' , 7, 13, 19, 13, 10, 30, 30, @MBase.ReadACS, Topic + 'Access required to read messages'); + Form.AddStr ('C', ' Post ACS' , 7, 14, 19, 14, 10, 30, 30, @MBase.PostACS, Topic + 'Access required to post messages'); + Form.AddStr ('Y', ' Sysop ACS' , 6, 15, 19, 15, 11, 30, 30, @MBase.SysopACS, Topic + 'Access required for Sysop access'); + Form.AddNone ('D', ' Net Address' , 4, 16, 19, 16, 13, Topic + 'NetMail Address'); + Form.AddNone ('7', ' Export To' , 6, 17, 19, 17, 11, Topic + 'Export messages to these nodes'); + Form.AddStr ('I', ' Origin' , 9, 18, 19, 18, 8, 30, 50, @MBase.Origin, Topic + 'Message base origin line'); + Form.AddStr ('S', ' Sponsor' , 8, 19, 19, 19, 9, 30, 30, @MBase.Sponsor, Topic + 'User name of base''s sponser'); + Form.AddStr ('T', ' R Template' , 5, 20, 19, 20, 12, 20, 20, @MBase.RTemplate, Topic + 'Template for full screen reader'); + Form.AddStr ('M', ' L Template' , 5, 21, 19, 21, 12, 20, 20, @MBase.ITemplate, Topic + 'Template for lightbar message list'); Form.AddAttr ('Q', ' Quote Color' , 53, 6, 68, 6, 13, @MBase.ColQuote, Topic + 'Color for quoted text'); Form.AddAttr ('X', ' Text Color' , 54, 7, 68, 7, 12, @MBase.ColText, Topic + 'Color for message text'); @@ -140,12 +143,24 @@ Begin Form.AddBits ('V', ' Private' , 57, 18, 68, 18, 9, MBPrivate, @MBase.Flags, Topic + 'Is this a private base?'); Form.AddTog ('A', ' Base Type' , 55, 19, 68, 19, 11, 9, 0, 3, 'Local EchoMail Newsgroup Netmail', @MBase.NetType, Topic + 'Message base type'); Form.AddTog ('B', ' Base Format' , 53, 20, 68, 20, 13, 6, 0, 1, 'JAM Squish', @MBase.BaseType, Topic + 'Message base storage format'); + Form.AddStr ('H', ' Header' , 58, 21, 68, 21, 8, 9, 20, @MBase.Header, Topic + 'Display file name of msg header'); + Repeat - WriteXY (19, 15, 113, strPadR(strAddr2Str(Config.NetAddress[MBase.NetAddr]), 19, ' ')); + WriteXY (19, 16, 113, strPadR(strAddr2Str(Config.NetAddress[MBase.NetAddr]), 19, ' ')); + + Links := FileByteSize(MBase.Path + MBase.FileName + '.lnk'); + + If Links <> -1 Then + Links := Links DIV SizeOf(RecEchoMailExport) + Else + Links := 0; + + WriteXY (19, 17, 113, strI2S(Links) + ' node(s)'); Case Form.Execute of 'D' : MBase.NetAddr := Configuration_EchoMailAddress(False); + '7' : Configuration_NodeExport (MBase); #27 : Break; End; Until False; @@ -158,7 +173,7 @@ Begin Box.Free; End; -Procedure Configuration_MessageBaseEditor; +Function Configuration_MessageBaseEditor (Edit: Boolean) : LongInt; Var Box : TAnsiMenuBox; List : TAnsiMenuList; @@ -366,6 +381,8 @@ Var End; Begin + Result := -1; + Assign (MBaseFile, Config.DataPath + 'mbases.dat'); If Not ioReset(MBaseFile, SizeOf(MBase), fmRWDN) Then @@ -395,7 +412,8 @@ Begin List.Close; Case List.ExitCode of - '/' : Case GetCommandOption(8, 'I-Insert|D-Delete|C-Copy|P-Paste|G-Global|S-Sort|') of + '/' : If Edit Then + Case GetCommandOption(8, 'I-Insert|D-Delete|C-Copy|P-Paste|G-Global|S-Sort|') of 'I' : If List.Picked > 1 Then Begin AssignRecord(False); MakeList; @@ -416,6 +434,7 @@ Begin FileErase (MBase.Path + MBase.FileName + '.sqi'); FileErase (MBase.Path + MBase.FileName + '.sql'); FileErase (MBase.Path + MBase.FileName + '.scn'); + FileErase (MBase.Path + MBase.FileName + '.lnk'); End; MakeList; @@ -453,10 +472,16 @@ Begin Seek (MBaseFile, List.Picked - 1); Read (MBaseFile, MBase); - EditMessageBase (MBase); + If Edit Then Begin + EditMessageBase (MBase); - Seek (MBaseFile, List.Picked - 1); - Write (MBaseFile, MBase); + Seek (MBaseFile, List.Picked - 1); + Write (MBaseFile, MBase); + End Else Begin + Result := MBase.Index; + + Break; + End; End; #27 : Break; End; diff --git a/mystic/bbs_cfg_syscfg.pas b/mystic/bbs_cfg_syscfg.pas index 226357b..aeba735 100644 --- a/mystic/bbs_cfg_syscfg.pas +++ b/mystic/bbs_cfg_syscfg.pas @@ -8,7 +8,6 @@ Procedure Configuration_SysPaths; Procedure Configuration_GeneralSettings; Procedure Configuration_LoginMatrix; Procedure Configuration_OptionalFields; -Function Configuration_EchomailAddress (Edit: Boolean) : Byte; Procedure Configuration_FileSettings; Procedure Configuration_QWKSettings; Procedure Configuration_Internet; @@ -43,9 +42,9 @@ Begin Box.Header := ' System Directories '; - Box.Open (5, 6, 75, 18); + Box.Open (5, 6, 75, 20); - VerticalLine (26, 8, 16); + 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'); @@ -55,8 +54,9 @@ Begin 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 ('P', ' Template Path', 11, 16, 29, 16, 15, 45, mysMaxPathSize, @Config.TemplatePath, Topic + 'Default template 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.Execute; @@ -179,98 +179,6 @@ Begin Box.Free; End; -Function Configuration_EchomailAddress (Edit: Boolean) : Byte; - - Procedure EditAddress (Num: Byte); - Var - Box : TAnsiMenuBox; - Form : TAnsiMenuForm; - Topic : String; - Begin - Topic := '|03(|09Echomail Network|03) |01-|09> |15'; - Box := TAnsiMenuBox.Create; - Form := TAnsiMenuForm.Create; - - Box.Open (14, 6, 66, 17); - - VerticalLine (29, 9, 12); - VerticalLine (29, 14, 15); - VerticalLine (54, 9, 12); - - WriteXY (21, 8, 112, 'Address'); - WriteXY (47, 8, 112, 'Uplink'); - - 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.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.AddWord ('Z', ' Zone' , 48, 9, 56, 9, 6, 5, 0, 65535, @Config.NetUplink[Num].Zone, Topic + 'Uplink Zone'); - Form.AddWord ('N', ' Net' , 49, 10, 56, 10, 5, 5, 0, 65535, @Config.NetUplink[Num].Net, Topic + 'Uplink Net'); - Form.AddWord ('O', ' Node' , 48, 11, 56, 11, 6, 5, 0, 65535, @Config.NetUplink[Num].Node, Topic + 'Uplink Node'); - Form.AddWord ('P', ' Point' , 47, 12, 56, 12, 7, 5, 0, 65535, @Config.NetUplink[Num].Point, Topic + 'Uplink Point'); - - Form.Execute; - - Box.Close; - - Form.Free; - Box.Free; - End; - -Var - Box : TAnsiMenuBox; - List : TAnsiMenuList; - - Procedure CreateList; - Var - A : Byte; - Begin - List.Clear; - - For A := 1 to 30 Do - List.Add(strPadL(strAddr2Str(Config.NetAddress[A]), 23, ' ') + ' ' + strPadL(Config.NetDesc[A], 20, ' '), 0); - End; - -Begin - Result := 0; - - Box := TAnsiMenuBox.Create; - List := TAnsiMenuList.Create; - - List.NoWindow := True; - - Box.Open (17, 5, 64, 20); - - WriteXY (27, 6, 112, 'Network Address Description'); - WriteXY (19, 7, 112, strRep('Ä', 44)); - - Repeat - CreateList; - - List.Open (17, 7, 64, 20); - - Case List.ExitCode of - #13 : If Edit Then - EditAddress(List.Picked) - Else Begin - Result := List.Picked; - Break; - End; - #27 : Break; - End; - Until False; - - List.Close; - Box.Close; - - List.Free; - Box.Free; -End; - Procedure Configuration_FileSettings; Var Box : TAnsiMenuBox; diff --git a/mystic/bbs_cfg_theme.pas b/mystic/bbs_cfg_theme.pas index d23fce4..6f14210 100644 --- a/mystic/bbs_cfg_theme.pas +++ b/mystic/bbs_cfg_theme.pas @@ -702,7 +702,6 @@ Begin Form.AddPath ('T', ' Text Path' , 12, 9, 25, 9, 11, 30, 80, @Theme.TextPath, Topic + 'Text path'); Form.AddPath ('M', ' Menu Path' , 12, 10, 25, 10, 11, 30, 80, @Theme.MenuPath, Topic + 'Menu path'); Form.AddPath ('S', ' Script Path' , 10, 11, 25, 11, 13, 30, 80, @Theme.ScriptPath, Topic + 'Script path'); - Form.AddPath ('T', ' Template Path' , 8, 12, 25, 12, 15, 30, 80, @Theme.TemplatePath, Topic + 'Template path'); Form.AddBits ('F', ' Allow Fallback' , 7, 13, 25, 13, 16, ThmFallback, @Theme.Flags, Topic + 'Allow fallback to default paths?'); Form.AddBits ('C', ' Allow ASCII' , 10, 14, 25, 14, 13, ThmAllowASCII, @Theme.Flags, Topic + 'Allow ASCII users to use this theme?'); Form.AddBits ('N', ' Allow ANSI' , 11, 15, 25, 15, 12, ThmAllowANSI, @Theme.Flags, Topic + 'Allow ANSI users to use this theme?'); diff --git a/mystic/bbs_menus.pas b/mystic/bbs_menus.pas index 02cfee8..f4b3709 100644 --- a/mystic/bbs_menus.pas +++ b/mystic/bbs_menus.pas @@ -307,7 +307,7 @@ Begin 'X' : Case Cmd[2] of 'A' : Begin Session.io.OutFile('newuser', True, 0); - If Session.io.GetYN(Session.GetPrompt(269), True) Then Begin + If Session.io.GetYN(Session.GetPrompt(269), False) Then Begin Session.User.CreateNewUser(''); Session.User.UserLogon2; @@ -323,8 +323,10 @@ Begin Session.io.OutFull (Session.GetPrompt(271)); End; 'L' : If Session.io.GetPW (Session.GetPrompt(272), Session.GetPrompt(423), Config.MatrixPW) Then Begin - Session.User.MatrixOK := True; - Result := True; +// If Session.User.GetMatrixUser Then Begin + Session.User.MatrixOK := True; + Result := True; +// End; End; 'P' : {$IFNDEF UNIX} If Session.User.GetMatrixUser Then PageForSysopChat (Pos('/F', strUpper(CmdData)) > 0) {$ENDIF}; diff --git a/mystic/mis_server.pas b/mystic/mis_server.pas index 31ce9a8..098ab0c 100644 --- a/mystic/mis_server.pas +++ b/mystic/mis_server.pas @@ -2,7 +2,6 @@ Unit MIS_Server; {$I M_OPS.PAS} - Interface Uses diff --git a/mystic/mkcrap.pas b/mystic/mkcrap.pas index 328cbfe..8148823 100644 --- a/mystic/mkcrap.pas +++ b/mystic/mkcrap.pas @@ -146,60 +146,68 @@ Begin End; End; -Function FormattedDate(DT: DateTime; Mask: String): String; +Function FormattedDate (DT: DateTime; Mask: String) : String; Var - DStr : String[2]; - MStr : String[2]; - MNStr : String[3]; - YStr : String[4]; - HourStr : String[2]; - MinStr : String[2]; - SecStr : String[2]; - TmpStr : String; - CurrPos : Word; - i : Word; + DStr : String[2]; + MStr : String[2]; + MNStr : String[3]; + YStr : String[4]; + HourStr : String[2]; + MinStr : String[2]; + SecStr : String[2]; + TmpStr : String; + CurrPos : Word; + i : Word; Begin - TmpStr := Mask; - Mask := strUpper(Mask); - DStr := Copy(strPadL(strI2S(Dt.Day), 2, '0'), 1, 2); - MStr := Copy(strPadL(strI2S(Dt.Month), 2, '0'), 1, 2); - YStr := Copy(strPadL(strI2S(Dt.Year), 4, '0'), 1, 4); - HourStr := Copy(strPadL(strI2S(Dt.Hour), 2, ' '), 1, 2); - MinStr := Copy(strPadL(strI2S(Dt.Min), 2, '0'), 1, 2); - SecStr := Copy(strPadL(strI2S(Dt.Sec), 2, '0'), 1, 2); - MNStr := MonthStr(Dt.Month); - If (Pos('YYYY', Mask) = 0) Then YStr := Copy(YStr,3,2); - CurrPos := Pos('DD', Mask); - If CurrPos > 0 Then - For i := 1 to Length(DStr) Do - TmpStr[CurrPos + i - 1] := DStr[i]; - CurrPos := Pos('YY', Mask); - If CurrPos > 0 Then - For i := 1 to Length(YStr) Do - TmpStr[CurrPos + i - 1] := YStr[i]; - CurrPos := Pos('MM', Mask); - If CurrPos > 0 Then - For i := 1 to Length(MStr) Do - TmpStr[CurrPos + i - 1] := MStr[i]; - CurrPos := Pos('HH', Mask); - If CurrPos > 0 Then - For i := 1 to Length(HourStr) Do - TmpStr[CurrPos + i - 1] := HourStr[i]; - CurrPos := Pos('SS', Mask); - If CurrPos > 0 Then - For i := 1 to Length(SecStr) Do - TmpStr[CurrPos + i - 1] := SecStr[i]; - CurrPos := Pos('II', Mask); - If CurrPos > 0 Then - For i := 1 to Length(MinStr) Do - TmpStr[CurrPos + i - 1] := MinStr[i]; - CurrPos := Pos('NNN', Mask); - If CurrPos > 0 Then - For i := 1 to Length(MNStr) Do - TmpStr[CurrPos + i - 1] := MNStr[i]; - FormattedDate := TmpStr; - End; + TmpStr := Mask; + Mask := strUpper(Mask); + DStr := Copy(strPadL(strI2S(Dt.Day), 2, '0'), 1, 2); + MStr := Copy(strPadL(strI2S(Dt.Month), 2, '0'), 1, 2); + YStr := Copy(strPadL(strI2S(Dt.Year), 4, '0'), 1, 4); + HourStr := Copy(strPadL(strI2S(Dt.Hour), 2, ' '), 1, 2); + MinStr := Copy(strPadL(strI2S(Dt.Min), 2, '0'), 1, 2); + SecStr := Copy(strPadL(strI2S(Dt.Sec), 2, '0'), 1, 2); + MNStr := MonthStr(Dt.Month); + If (Pos('YYYY', Mask) = 0) Then YStr := Copy(YStr,3,2); + + CurrPos := Pos('DD', Mask); + If CurrPos > 0 Then + For i := 1 to Length(DStr) Do + TmpStr[CurrPos + i - 1] := DStr[i]; + + CurrPos := Pos('YY', Mask); + If CurrPos > 0 Then + For i := 1 to Length(YStr) Do + TmpStr[CurrPos + i - 1] := YStr[i]; + + CurrPos := Pos('MM', Mask); + If CurrPos > 0 Then + For i := 1 to Length(MStr) Do + TmpStr[CurrPos + i - 1] := MStr[i]; + + CurrPos := Pos('HH', Mask); + If CurrPos > 0 Then + For i := 1 to Length(HourStr) Do + TmpStr[CurrPos + i - 1] := HourStr[i]; + + CurrPos := Pos('SS', Mask); + If CurrPos > 0 Then + For i := 1 to Length(SecStr) Do + TmpStr[CurrPos + i - 1] := SecStr[i]; + + CurrPos := Pos('II', Mask); + If CurrPos > 0 Then + For i := 1 to Length(MinStr) Do + TmpStr[CurrPos + i - 1] := MinStr[i]; + + CurrPos := Pos('NNN', Mask); + If CurrPos > 0 Then + For i := 1 to Length(MNStr) Do + TmpStr[CurrPos + i - 1] := MNStr[i]; + + FormattedDate := TmpStr; +End; Function LoadFilePos(FN: String; Var Rec; FS: Word; FPos: LongInt): Word; Var diff --git a/mystic/mutil.ini b/mystic/mutil.ini index e4c3926..7ecae1c 100644 --- a/mystic/mutil.ini +++ b/mystic/mutil.ini @@ -52,20 +52,21 @@ ; Level 1 = basic ; Level 2 = verbose - loglevel=1 + loglevel=2 ; list of functions to perform on startup - Import_FIDONET.NA = true - Import_MessageBase = true - Import_FILEBONE.NA = true - Import_FILES.BBS = true - MassUpload = true - GenerateTopLists = true - GenerateAllFiles = true - PurgeMessageBases = true - PostTextFiles = true - PackMessageBases = true + Import_FIDONET.NA = false + Import_MessageBase = false + Import_FILEBONE.NA = false + Import_FILES.BBS = false + MassUpload = false + GenerateTopLists = false + GenerateAllFiles = false + PurgeMessageBases = false + PostTextFiles = false + PackMessageBases = false + ExportEchoMail = true ; ========================================================================== ; ========================================================================== @@ -331,7 +332,7 @@ file2_addr = 0:0/0 file2_delfile = false -[ImportMessageBase] +[Import_MessageBase] ; This option scans the message base directory, and creates any messages ; bases inside of Mystic that have data files in the directory. @@ -365,3 +366,5 @@ private_base = 0 new_scan = 1 qwk_scan = 1 + +[ExportEchoMail] diff --git a/mystic/mutil.pas b/mystic/mutil.pas index a60abe0..b54e4d5 100644 --- a/mystic/mutil.pas +++ b/mystic/mutil.pas @@ -45,6 +45,7 @@ Uses mUtil_MsgPurge, mUtil_MsgPack, mUtil_MsgPost, + mUtil_EchoExport, bbs_Common; {$I MUTIL_ANSI.PAS} @@ -133,7 +134,7 @@ Begin Halt(1); End; - TempPath := bbsConfig.SystemPath + 'temp0' + PathChar; + TempPath := bbsConfig.SystemPath + 'temputil' + PathChar; GetDIR (0, StartPath); @@ -163,6 +164,7 @@ Var DoMassUpload : Boolean; DoTopLists : Boolean; DoAllFiles : Boolean; + DoEchoExport : Boolean; DoMsgPurge : Boolean; DoMsgPack : Boolean; DoMsgPost : Boolean; @@ -181,6 +183,7 @@ Begin DoTopLists := CheckProcess(Header_TOPLISTS); DoFilesBBS := CheckProcess(Header_FILESBBS); DoAllFiles := CheckProcess(Header_ALLFILES); + DoEchoExport := CheckProcess(Header_ECHOEXPORT); DoMsgPurge := CheckProcess(Header_MSGPURGE); DoMsgPack := CheckProcess(Header_MSGPACK); DoMsgPost := CheckProcess(Header_MSGPOST); @@ -204,6 +207,7 @@ Begin If DoMassUpload Then uMassUpload; If DoTopLists Then uTopLists; If DoAllFiles Then uAllFilesList; + If DoEchoExport Then uEchoExport; If DoMsgPurge Then uPurgeMessageBases; If DoMsgPack Then uPackMessageBases; If DoMsgPost Then uPostMessages; diff --git a/mystic/mutil_common.pas b/mystic/mutil_common.pas index e727d63..2271412 100644 --- a/mystic/mutil_common.pas +++ b/mystic/mutil_common.pas @@ -27,17 +27,18 @@ Var LogLevel : Byte = 1; Const - Header_GENERAL = 'General'; - Header_IMPORTNA = 'Import_FIDONET.NA'; - Header_IMPORTMB = 'Import_MessageBase'; - Header_FILEBONE = 'Import_FILEBONE.NA'; - Header_FILESBBS = 'Import_FILES.BBS'; - Header_UPLOAD = 'MassUpload'; - Header_TOPLISTS = 'GenerateTopLists'; - Header_ALLFILES = 'GenerateAllFiles'; - Header_MSGPURGE = 'PurgeMessageBases'; - Header_MSGPACK = 'PackMessageBases'; - Header_MSGPOST = 'PostTextFiles'; + Header_GENERAL = 'General'; + Header_IMPORTNA = 'Import_FIDONET.NA'; + Header_IMPORTMB = 'Import_MessageBase'; + Header_ECHOEXPORT = 'ExportEchoMail'; + Header_FILEBONE = 'Import_FILEBONE.NA'; + Header_FILESBBS = 'Import_FILES.BBS'; + Header_UPLOAD = 'MassUpload'; + Header_TOPLISTS = 'GenerateTopLists'; + Header_ALLFILES = 'GenerateAllFiles'; + Header_MSGPURGE = 'PurgeMessageBases'; + Header_MSGPACK = 'PackMessageBases'; + Header_MSGPOST = 'PostTextFiles'; Procedure Log (Level: Byte; Code: Char; Str: String); Function strAddr2Str (Addr : RecEchoMailAddr) : String; @@ -53,6 +54,10 @@ Procedure ExecuteArchive (FName: String; Temp: String; Mask: String; Mode: B Function GetMBaseByIndex (Num: LongInt; Var TempBase: RecMessageBase) : Boolean; Function MessageBaseOpen (Var Msg: PMsgBaseABS; Var Area: RecMessageBase) : Boolean; Function SaveMessage (mArea: RecMessageBase; mFrom, mTo, mSubj: String; mAddr: RecEchoMailAddr; mText: RecMessageText; mLines: Integer) : Boolean; +Function GetFTNPKTName : String; +Function GetFTNArchiveName (Orig, Dest: RecEchoMailAddr) : String; +Function GetFTNFlowName (Dest: RecEchoMailAddr) : String; +Function GetNodeByIndex (Num: LongInt; Var TempNode: RecEchoMailNode) : Boolean; Implementation @@ -255,7 +260,10 @@ Var Count : LongInt; Str : String; Begin - Temp := strUpper(JustFileExt(FName)); + If Temp <> '' Then + Temp := strUpper(Temp) + Else + Temp := strUpper(JustFileExt(FName)); Assign (ArcFile, bbsConfig.DataPath + 'archive.dat'); {$I-} Reset (ArcFile); {$I+} @@ -377,9 +385,9 @@ Begin Msg^.SetOrig(bbsConfig.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, bbsConfig.SemaPath + fn_SemFileEcho); + 2 : Assign (SemFile, bbsConfig.SemaPath + fn_SemFileNews); + 3 : Assign (SemFile, bbsConfig.SemaPath + fn_SemFileNet); End; ReWrite (SemFile); @@ -399,7 +407,7 @@ Begin If mArea.NetType > 0 Then Begin Msg^.DoStringLn (#13 + '--- ' + mysSoftwareID + ' BBS v' + mysVersion + ' (' + OSID + ')'); - Msg^.DoStringLn (' * Origin: ' + mArea.Origin + ' (' + strAddr2Str(Config.NetAddress[mArea.NetAddr]) + ')'); + Msg^.DoStringLn (' * Origin: ' + mArea.Origin + ' (' + strAddr2Str(bbsConfig.NetAddress[mArea.NetAddr]) + ')'); End; Msg^.WriteMsg; @@ -410,4 +418,57 @@ Begin Result := True; End; +Function GetFTNPKTName : String; +Var + Hour, Min, Sec, hSec : Word; + Year, Month, Day, DOW : Word; +Begin + GetTime (Hour, Min, Sec, hSec); + GetDate (Year, Month, Day, DOW); + + Result := strZero(Day) + strZero(Hour) + strZero(Min) + strZero(Sec); +End; + +Function GetFTNArchiveName (Orig, Dest: RecEchoMailAddr) : String; +Var + Net : LongInt; + Node : LongInt; +Begin + Net := Orig.Net - Dest.Net; + Node := Orig.Node - Dest.Node; + + If Net < 0 Then Net := 65536 + Net; + If Node < 0 Then Node := 65536 + Node; + + Result := strI2H((Net SHL 16) OR Node); +End; + +Function GetFTNFlowName (Dest: RecEchoMailAddr) : String; +Begin + Result := strI2H((Dest.Net SHL 16) OR Dest.Node); +End; + +Function GetNodeByIndex (Num: LongInt; Var TempNode: RecEchoMailNode) : Boolean; +Var + F : File; +Begin + Result := False; + + Assign (F, bbsConfig.DataPath + 'echonode.dat'); + + If Not ioReset(F, SizeOf(RecEchoMailNode), fmRWDN) Then Exit; + + While Not Eof(F) Do Begin + ioRead(F, TempNode); + + If TempNode.Index = Num Then Begin + Result := True; + + Break; + End; + End; + + Close (F); +End; + End. diff --git a/mystic/mutil_importmsgbase.pas b/mystic/mutil_importmsgbase.pas index 12c1401..55b2515 100644 --- a/mystic/mutil_importmsgbase.pas +++ b/mystic/mutil_importmsgbase.pas @@ -28,7 +28,7 @@ Begin ProcessName ('Import Message Bases', True); ProcessResult (rWORKING, False); - FindFirst ('*', AnyFile, Info); + FindFirst (bbsConfig.MsgsPath + '*', AnyFile, Info); While DosError = 0 Do Begin BaseName := JustFileName(Info.Name); diff --git a/mystic/records.pas b/mystic/records.pas index 1b69e5b..d20cec4 100644 --- a/mystic/records.pas +++ b/mystic/records.pas @@ -23,7 +23,7 @@ Const mysSoftwareID = 'Mystic'; // no idea mysCopyYear = '1997-2013'; // its been a long time! - mysVersion = '1.10 A29'; // current version + mysVersion = '1.10 A30'; // current version mysDataChanged = '1.10 A11'; // version of last records change {$IFDEF WIN32} @@ -78,6 +78,56 @@ Type AccessFlagType = Set of 1..26; +Const + pktPrivate = $0001; + pktCrash = $0002; + pktReceived = $0004; + pktSent = $0008; + pktFileAttach = $0010; + pktInTransit = $0020; + pktOrphan = $0040; + pktKillSent = $0080; + pktLocal = $0100; + pktHold = $0200; + pktUnused = $0400; + pktFileReq = $0800; + pktReturnReq = $1000; + pktIsReceipt = $2000; + pktAuditReq = $4000; + pktFileUpdate = $8000; + +Type + RecPKTMessageHdr = Record + MsgType, + OrigNode : System.Word; + DestNode : System.Word; + OrigNet : System.Word; + DestNet : System.Word; + Attribute : System.Word; + Cost : System.Word; + DateTime : String[19]; + End; + + RecPKTHeader = Record + OrigNode : System.Word; + DestNode : System.Word; + Year : System.Word; + Month : System.Word; + Day : System.Word; + Hour : System.Word; + Minute : System.Word; + Second : System.Word; + Baud : System.Word; + PKTType : System.Word; + OrigNet : System.Word; + DestNet : System.Word; + ProdCode : System.Word; // Apply to FTSC for code? + Password : Array[1..8] of Char; + OrigZone : System.Word; + DestZone : System.Word; + Filler : Array[1..20] of Char; + End; + RecEchoMailAddr = Record Zone, Net, @@ -85,6 +135,9 @@ Type Point : Word; End; + RecEchoMailExport = LongInt; + + (* RecEchoMailOpts = Record SysLocation : String[40]; SysFlags : String[40]; @@ -111,17 +164,20 @@ Type BlockSize : Word; Res : Array[1..10] of Byte; End; +*) RecEchoMailNode = Record - Description : String[40]; + Index : LongInt; + Description : String[35]; Active : Boolean; - AddrList : String[250]; - InType : Byte; // 0=Disabled 1=FTP 2=BINKP 3=EMAIL 4=DIRECTORY - OutType : Byte; // 0=Disabled 1=FTP 2=BINKP 3=EMAIL 4=DIRECTORY - FTPin : RecEchoMailNodeFTP; - FTPout : RecEchoMailNodeFTP; - BINKPin : RecEchoMailNodeBINKP; - BINKPout : RecEchoMailNodeBINKP; + Address : RecEchoMailAddr; + ArcType : String[4]; +// InType : Byte; // 0=Disabled 1=FTP 2=BINKP 3=EMAIL 4=DIRECTORY +// OutType : Byte; // 0=Disabled 1=FTP 2=BINKP 3=EMAIL 4=DIRECTORY +// FTPin : RecEchoMailNodeFTP; +// FTPout : RecEchoMailNodeFTP; +// BINKPin : RecEchoMailNodeBINKP; +// BINKPout : RecEchoMailNodeBINKP; LastRecv : LongInt; LastSent : LongInt; LastReset : LongInt; @@ -159,10 +215,10 @@ Type ScriptPath : String[mysMaxPathSize]; QwkPath : String[mysMaxPathSize]; SemaPath : String[mysMaxPathSize]; - TemplatePath : String[mysMaxPathSize]; + InboundPath : String[mysMaxPathSize]; MenuPath : String[mysMaxPathsize]; TextPath : String[mysMaxPathSize]; - WebPath : String[mysMaxPathSize]; + OutboundPath : String[mysMaxPathSize]; // GENERAL SETTINGS BBSName : String[30]; SysopName : String[30]; @@ -522,7 +578,8 @@ Type Index : Word; // permanent index Flags : LongInt; // MB flag bits see above Created : LongInt; - Res : Array[1..76] of Byte; // RESERVED + EchoTag : String[40]; // EchoMail Tag + Res : Array[1..35] of Byte; // RESERVED End; FScanRec = Record { *.SCN } diff --git a/mystic/whatsnew.txt b/mystic/whatsnew.txt index 50c448a..65e51ca 100644 --- a/mystic/whatsnew.txt +++ b/mystic/whatsnew.txt @@ -2897,3 +2897,4 @@ + MPL errors when executing a MPX module are now logged in the SYSOP logs +