This commit is contained in:
mysticbbs 2013-04-06 23:58:41 -04:00
parent e13a0cf040
commit f540f5fa8f
12 changed files with 235 additions and 108 deletions

View File

@ -465,6 +465,8 @@ Procedure TAnsiMenuForm.AddTog (HK: Char; D: String; X, Y, FX, FY, DS, FS, MN, M
Begin
If Items = FormMaxItems Then Exit;
If (Byte(P^) > MX) or (Byte(P^) < MN) Then Byte(P^) := MN;
AddBasic (HK, D, X, Y, FX, FY, DS, FS, MX, ItemToggle, P, H);
ItemData[Items]^.Toggle := TG;

View File

@ -192,7 +192,7 @@ Var
Read (MBaseFile, MBase);
If IsExportNode(MBase, Node.Index) Then
List.Add(strPadR(strI2S(MBase.Index), 6, ' ') + ' ' + strPadR('(' + MBase.EchoTag + ') ' + strStripPipe(MBase.Name), 40, ' '), 0);
List.Add(strPadR(strI2S(MBase.Index), 6, ' ') + ' ' + strPadR('(' + MBase.EchoTag + ') ' + strStripPipe(MBase.Name), 47, ' '), 0);
End;
End;
@ -301,7 +301,7 @@ Var
While Not Eof(EchoFile) Do Begin
Read (EchoFile, EchoNode);
List.Add(strPadR(strI2S(FilePos(EchoFile)), 3, ' ') + ' ' + strPadR(EchoNode.Description, 35, ' ') + ' ' + strPadL(strAddr2Str(EchoNode.Address), 12, ' '), 0);
List.Add(strPadR(strI2S(FilePos(EchoFile)), 7, ' ') + ' ' + strPadL(strYN(EchoNode.Active), 3, ' ') + ' ' + strPadR(EchoNode.Description, 35, ' ') + ' ' + strPadL(strAddr2Str(EchoNode.Address), 17, ' '), 0);
End;
List.Add('', 2);
@ -345,17 +345,17 @@ Begin
If Not Edit Then Box.Header := ' Select' + Box.Header;
Box.Open (11, 5, 69, 21);
Box.Open (5, 5, 74, 21);
WriteXY (13, 6, 112, '### Node Description' + strRep(' ', 25) + 'Network');
WriteXY (13, 7, 112, strRep(#196, 53));
WriteXY (13, 19, 112, strRep(#196, 53));
WriteXY (7, 6, 112, '### Active Description' + strRep(' ', 35) + 'Network');
WriteXY (7, 7, 112, strRep(#196, 66));
WriteXY (7, 19, 112, strRep(#196, 66));
WriteXY (28, 20, 112, cfgCommandList);
Repeat
MakeList;
List.Open (11, 7, 69, 19);
List.Open (5, 7, 74, 19);
List.Close;
Case List.ExitCode of
@ -513,7 +513,7 @@ Var
Begin
List.Clear;
Reset (ExportFile);
ioReset (ExportFile, SizeOf(RecEchoMailExport), fmRWDN);
While Not Eof(ExportFile) Do Begin
Read (ExportFile, ExpNode);

View File

@ -134,6 +134,9 @@ Begin
Result := '';
For Count := 1 to GetLineLength(ANSI.Data[Line], RowSize) Do
If ANSI.Data[Line][Count].Ch = #0 Then
Result := Result + ' '
Else
Result := Result + ANSI.Data[Line][Count].Ch;
End;

View File

@ -1167,13 +1167,17 @@ Var
Var
B : Word;
Begin
B := 0;
If A = 0 Then Exit;
B := 0;
FileMode := 66;
Reset (FBaseFile);
Repeat
Read (FBaseFile, FBase);
{$I-} Read (FBaseFile, FBase); {$I+}
If IoResult <> 0 Then Exit;
If Session.User.Access(FBase.ListACS) Then Inc(B);
@ -1204,10 +1208,11 @@ Var
Var
Old : RecFileBase;
Temp : String[11];
A : Word;
N1 : Word;
N2 : Word;
Temp : String[40];
Count1 : LongInt;
Count2 : LongInt;
Num1 : String[40];
Num2 : String[40];
Begin
Old := FBase;
@ -1222,23 +1227,43 @@ Begin
Repeat
Session.io.OutFull (Session.GetPrompt(202));
Temp := Session.io.GetInput(11, 11, 12, '');
Temp := Session.io.GetInput(10, 40, 12, '');
If (Temp = '') or (Temp = 'Q') Then Break;
If Temp = '?' Then
List_Bases
Else Begin
If Pos('-', Temp) > 0 Then Begin
N1 := strS2I(Copy(Temp, 1, Pos('-', Temp) - 1));
N2 := strS2I(Copy(Temp, Pos('-', Temp) + 1, Length(Temp)));
End Else Begin
N1 := strS2I(Temp);
N2 := N1;
Num1 := '';
Num2 := '';
For Count1 := 1 to Length(Temp) Do Begin
If Temp[Count1] = ' ' Then Continue;
If Temp[Count1] = ',' Then Begin
If Num2 <> '' Then Begin
For Count2 := strS2I(Num2) to strS2I(Num1) Do
ToggleBase(Count2);
End Else
ToggleBase(strS2I(Num1));
Num1 := '';
Num2 := '';
End Else
If Temp[Count1] = '-' Then Begin
Num2 := Num1;
Num1 := '';
End Else
Num1 := Num1 + Temp[Count1];
End;
For A := N1 to N2 Do
If (A > 0) and (A <= Total) Then ToggleBase(A);
If Num2 <> '' Then Begin
For Count1 := strS2I(Num2) to strS2I(Num1) Do
ToggleBase(Count1);
End Else
ToggleBase(strS2I(Num1));
List_Bases;
End;
Until False;

View File

@ -1055,7 +1055,7 @@ Procedure TBBSIO.AnsiGotoXY (X: Byte; Y: Byte);
Begin
If Graphics = 0 Then Exit;
If (X = Screen.CursorX) and (Y = Screen.CursorY) Then Exit;
// If (X = Screen.CursorX) and (Y = Screen.CursorY) Then Exit;
If X = 0 Then X := Screen.CursorX;
If Y = 0 Then Y := Screen.CursorY;

View File

@ -758,13 +758,17 @@ Var
Var
B : Word;
Begin
If A = 0 Then Exit;
B := 0;
FileMode := 66;
Reset (MBaseFile);
Repeat
Read (MBaseFile, MBase);
{$I-} Read (MBaseFile, MBase); {$I+}
If IoResult <> 0 Then Exit;
If Session.User.Access(MBase.ListACS) Then
Inc(B);
@ -807,10 +811,11 @@ Var
Var
Old : RecMessageBase;
Temp : String[11];
A : Word;
N1 : Word;
N2 : Word;
Temp : String[40];
Count1 : LongInt;
Count2 : LongInt;
Num1 : String[40];
Num2 : String[40];
Begin
Old := MBase;
@ -828,23 +833,43 @@ Begin
Repeat
Session.io.OutFull (Session.GetPrompt(95));
Temp := Session.io.GetInput(11, 11, 12, '');
Temp := Session.io.GetInput(10, 40, 12, '');
If (Temp = '') or (Temp = 'Q') Then Break;
If Temp = '?' Then
List_Bases
Else Begin
If Pos('-', Temp) > 0 Then Begin
N1 := strS2I(Copy(Temp, 1, Pos('-', Temp) - 1));
N2 := strS2I(Copy(Temp, Pos('-', Temp) + 1, Length(Temp)));
End Else Begin
N1 := strS2I(Temp);
N2 := N1;
Num1 := '';
Num2 := '';
For Count1 := 1 to Length(Temp) Do Begin
If Temp[Count1] = ' ' Then Continue;
If Temp[Count1] = ',' Then Begin
If Num2 <> '' Then Begin
For Count2 := strS2I(Num2) to strS2I(Num1) Do
ToggleBase(Count2);
End Else
ToggleBase(strS2I(Num1));
Num1 := '';
Num2 := '';
End Else
If Temp[Count1] = '-' Then Begin
Num2 := Num1;
Num1 := '';
End Else
Num1 := Num1 + Temp[Count1];
End;
For A := N1 to N2 Do
If (A > 0) and (A <= Total) Then ToggleBase(A);
If Num2 <> '' Then Begin
For Count1 := strS2I(Num2) to strS2I(Num1) Do
ToggleBase(Count1);
End Else
ToggleBase(strS2I(Num1));
List_Bases;
End;
Until False;
@ -1400,7 +1425,7 @@ Var
HelpFile : String[8];
LastRead : LongInt;
ListMode : Byte;
ReplyID : String[31];
ReplyID : String[60];
TempStr : String;
Procedure SetMessageSecurity;
@ -1754,15 +1779,13 @@ Var
A : LongInt;
CurMsg : LongInt;
Begin
Ansi_View_Message := False;
Result := False;
Repeat
Set_Node_Action (Session.GetPrompt(348));
SetMessageSecurity;
If MsgBase^.GetMsgNum > LastRead Then LastRead := MsgBase^.GetMsgNum;
If Session.User.IsThisUser(MsgBase^.GetTo) And Not MsgBase^.IsRcvd Then Begin
MsgBase^.SetRcvd(True);
MsgBase^.ReWriteHDR;
@ -1772,8 +1795,12 @@ Var
Lines := 0;
PageStart := 1;
If CurMsg > LastRead Then LastRead := CurMsg;
Session.io.AllowArrow := True;
// create ReadMessageText function?
MsgBase^.MsgTxtStartUp;
While Not MsgBase^.EOM And (Lines < mysMaxMsgLines) Do Begin
@ -1845,6 +1872,7 @@ Var
End;
#80 : If PageEnd <= Lines Then Begin
Inc (PageStart);
Draw_Msg_Text;
End;
#81 : If (Lines > PageSize) and (PageEnd <= Lines) Then Begin
@ -1869,6 +1897,7 @@ Var
End;
End Else
MsgBase^.SeekFirst(CurMsg);
Break;
End;
'E' : Begin
@ -1894,7 +1923,7 @@ Var
End;
'I' : Begin
LastRead := MsgBase^.GetHighMsgNum;
Ansi_View_Message := True;
Result := True;
RemoveNewScan(495);
@ -2045,6 +2074,7 @@ Var
CurPage : Word;
MsgInfo : Array[1..24] of MsgInfoRec;
FirstPage : Boolean;
AskRemove : Boolean;
Procedure DrawPage;
Var
@ -2188,6 +2218,8 @@ Var
SN : LongInt;
A : Byte;
Begin
AskRemove := False;
If Read_Page (True, False, False) Then Begin
WereMsgs := True;
PagePos := 1;
@ -2309,8 +2341,7 @@ Var
'G' : Break;
'I' : Begin
LastRead := MsgBase^.GetHighMsgNum;
RemoveNewScan(495);
AskRemove := True;
Break;
End;
@ -2328,6 +2359,9 @@ Var
If WereMsgs Then Begin
Session.io.AnsiGotoXY (1, Session.io.ScreenInfo[3].Y);
Session.io.OutRawLn('');
If AskRemove Then
RemoveNewScan(495);
End;
End;

View File

@ -196,7 +196,7 @@
; &1 = base number &2 = base name &3 = scan base? (Yes or No)
093 |07|$R04|&1|15|$R03|&3 |07|$R29|&2
094 |CR|12There are no available message bases!
095 |09Selection |01[|10##|01]|09, |01[|10##|01-|10##|01]|09, |01[|10?|01/|10List|01]|09, or |01[|10Q|01]|09uit: |XX
095 |09Selection |01[|10##|01]|09, |01[|10##|01-|10##|01,|10##|01]|09, |01[|10?|01/|10List|01]|09, or |01[|10Q|01]|09uit: |XX
; For strings 096 - 099: &1 = message base name
096 |CR |11|&1 will NOT be scanned in QWK packets!|CR
097 |CR |11|&1 will be scanned in QWK packets!|CR
@ -373,7 +373,7 @@
; &1 = File base number &2 = File base name &3 = Scan? (Yes or No)
201 |07|$R04|&1|15|$R03|&3 |07|$R29|&2
; Select scanned file bases prompt
202 |09Selection |01[|10##|01]|09, |01[|10##|01-|10##|01]|09, |01[|10?|01/|10List|01]|09, or |01[|10Q|01]|09uit: |XX
202 |09Selection |01[|10##|01]|09, |01[|10##|01-|10##|01,|10##|01]|09, |01[|10?|01/|10List|01]|09, or |01[|10Q|01]|09uit: |XX
; &1 = File base name
203 |CR |11|&1 will NOT be scanned in new file scan!|CR
; &1 = File base name

View File

@ -120,34 +120,13 @@ Begin
End;
Function MakeDir (Str: String) : Boolean;
Var
PathPos : Byte;
CurDIR : String;
Prefix : String;
Begin
Result := True;
If DirExists(Str) Then Exit;
Prefix := '';
PathPos := Pos(PathChar, Str);
While (PathPos > 0) Do Begin
CurDIR := Copy(Str, 1, PathPos);
Delete (Str, 1, PathPos);
Prefix := Prefix + CurDIR;
If Not IsDir(Prefix) Then Begin
{$I-} MkDIR (Prefix); {$I+}
If IoResult <> 0 Then Begin
ShowError('Unable to create: ' + Prefix);
End;
End;
PathPos := Pos(PathChar, Str);
End;
If Not DirCreate(Str) Then
ShowError('Unable to create: ' + Str);
End;
Var
@ -391,8 +370,10 @@ Begin
MakeDir (Config.ScriptPath);
MakeDir (Config.AttachPath);
MakeDir (Config.QwkPath);
MakeDir (Config.SystemPath + 'files');
MakeDir (Config.SystemPath + 'files' + PathChar + 'uploads');
MakeDir (Config.SystemPath + 'docs' + PathChar);
MakeDir (Config.SystemPath + 'files' + PathChar + 'uploads' + PathChar);
MakeDir (Config.InBoundPath);
MakeDir (Config.OutBoundPath);
End;
Procedure ExtractFile (Y : Byte; Desc, FN, EID, DestPath : String);
@ -437,6 +418,8 @@ Begin
Cfg.LogsPath := Config.LogsPath;
Cfg.MenuPath := Lang.MenuPath;
Cfg.TextPath := Lang.TextPath;
Cfg.InBoundPath := Config.InBoundPath;
Cfg.OutBoundPath := Config.OutBoundPath;
Cfg.UserIdxPos := 0;
Cfg.SystemCalls := 0;
@ -502,6 +485,7 @@ Begin
ExtractFile (16, '|08[|15û|08] |07Installing menu files|08...', 'install_data', 'MENUS', Lang.MenuPath);
ExtractFile (17, '|08[|15û|08] |07Installing script files|08...', 'install_data', 'SCRIPT', Config.ScriptPath);
ExtractFile (18, '|08[|15û|08] |07Installing data files|08...', 'install_data', 'DATA', Config.DataPath);
ExtractFile (19, '|08[|15û|08] |07Installing documentation|08...', 'install_data', 'DOCS', Config.SystemPath + 'docs' + PathChar);
UpdateDataFiles;
@ -659,6 +643,8 @@ Begin
{ update paths not on the list }
Config.QwkPath := Config.SystemPath + 'localqwk' + PathChar;
Config.InBoundPath := Config.SystemPath + 'echomail' + PathChar + 'in' + PathChar;
Config.OutBoundPath := Config.SystemPath + 'echomail' + PathChar + 'out' + PathChar + 'fidonet' + PathChar;
End;
Const

View File

@ -334,6 +334,8 @@ Begin
// of export
If {MsgBase^.IsLocal And } Not MsgBase^.IsSent Then Begin
Log (3, '!', ' Found msg for export');
Assign (ExportFile, MBase.Path + MBase.FileName + '.lnk');
If ioReset(ExportFile, SizeOf(RecEchoMailExport), fmRWDN) Then Begin
@ -345,7 +347,7 @@ Begin
If MBase.NetType = 3 Then Begin
If GetNodeByIndex(ExportIndex, EchoNode) Then
If EchoNode.Active and (EchoNode.Address.Zone = MsgBase^.GetOrigAddr.Zone) Then
If EchoNode.Active and (EchoNode.Address.Zone = MsgBase^.GetDestAddr.Zone) Then
ExportMessage;
End Else
If GetNodeByIndex(ExportIndex, EchoNode) Then

View File

@ -193,7 +193,7 @@ Var
MBase.FileName := PKT.MsgArea;
MBase.EchoTag := PKT.MsgArea;
MBase.Path := bbsConfig.MsgsPath;
MBase.NetType := 2;
MBase.NetType := 1;
MBase.ColQuote := bbsConfig.ColorQuote;
MBase.ColText := bbsConfig.ColorText;
MBase.ColTear := bbsConfig.ColorTear;

View File

@ -688,7 +688,7 @@ Begin
Zmodem.StatusProc := @ProtocolStatusUpdate;
Zmodem.AbortProc := @ProtocolAbort;
Queue.Add(JustPath(FileName), JustFile(FileName));
Queue.Add(JustPath(FileName), JustFile(FileName), '');
Zmodem.QueueSend;

View File

@ -2952,13 +2952,28 @@
you if you want to physically rename them on disk too upon leaving the
base editor.
+ MUTIL now has a full binkley-style echomail importer and exporter. It
+ MUTIL now has a full binkley-style 5D echomail importer and exporter. It
can autocreate new bases, perform dupe checking, and push duplicate msgs
to their own base. All node configuration, echos, and export info comes
from within the new editor options with Mystic's configuration.
Please review MUTIL.INI for the two new added functions for import/export
There are a few things left on my TODO list before I consider everything
pretty much functional. I have two networks setup using only Mystic and
it is able to interact fine so far (Fido and Agora) with both Echo and
Netmail - so it DOES work, however, please review the current TODO:
1. Does not support exporting to point nodes.
2. Does not properly create reply chain links when importing
3. Netmail routing/passthrough does not exist yet. You can only export
netmail to a configured uplink or downlink. This is a big issue
when using networks like Fido that have multiple zones.
4. Does not have the option to keep "last scanned" pointers when
exporting mail. This means that it searches all of your messages when
exporting. This doesn't effect features, just the speed of exporting
messages.
The basic setup is this:
0. Set your inbound and outbound directories in the System Paths.
@ -2983,7 +2998,37 @@
6. Turn on importing/exporting in MUTIL.INI.
7. At your own risk: Delete FastEcho, GEcho, CrashMail, etc. :)
7. Set one echomail address as your PRIMARY address. This will be
what the root outbound directory you defined in system configuration
will use. When a echomail message for a non-primary address is
found Mystic will replace the last directory with the domain and
zone. So for example if your root is:
c:\mybbs\echomail\out\
And you have Fido as your primary, a message posted to Agora net
will be created in:
c:\mybbs\echomail\agoranet.02e\
The 5D BSO outbound format doesn't append to the base outbound
directory as you would expect. Because of this, I recommand setting
the default outbound to include the primary address network domain.
So for example, if you have FidoNet as your primary address, set your
outbound directory to include the primary's domain:
c:\mybbs\echomail\out\fidonet\
This will mean that Mystic will then create the following using the
above example:
c:\mybbs\echomail\out\agoranet.02e\
I know all of this is confusing and stupid, but I didn't create the
standard I'm only dealing with it! :)
8. At your own risk: Delete FastEcho, GEcho, CrashMail, etc. :)
! Fixed a bug that could cause the user editor to crash directly after a
new install if you didn't create your SysOp account first.
@ -3007,3 +3052,33 @@
! Forced messages were able to be aborted sometimes while using the FS
editor and using the CTRL-A key to abort.
+ Toggling message base new scan and QWK scan can now accept commas, in
addition to range. For example: 1,3,7-9,15 will toggle bases
1, 3, 7, 8, 9, and 15.
+ Toggling file base new scan can now accept commas, in addition to range.
For example: 1,3,7-9,15 will toggle bases 1, 3, 7, 8, 9, and 15.
+ After toggling any base or range of bases, the list of bases will now
automatically redisplay for both message, qwk, and file bases.
! Fixed a bug in the MPL user get functions that could cause a RTE 100.
! Installation will now properly create the file base directory for the
default upload filebase.
+ Installation now creates a DOCS directory off the root installation. This
will eventually contain documentation.
+ Installation now creates default echomail in/out directories.
+ New program called FIDOPOLL has been added. This will poll or send mail
to configured echomail nodes using BINKP. This will eventually be baked
into MIS or MUTIL and will also include FTP echomail exchange as well as
QWK FTP networking. For now it just does BINKP.
This program does NOT run as a server (daemon) so it will only poll for
mail it will not allow nodes to connect to you to exchange mail.
<ALPHA 30 RELEASED>