Too much to list
This commit is contained in:
parent
e337c2b676
commit
13309e8b35
|
@ -130,7 +130,6 @@ Var
|
||||||
Box : TAnsiMenuBox;
|
Box : TAnsiMenuBox;
|
||||||
Form : TAnsiMenuForm;
|
Form : TAnsiMenuForm;
|
||||||
Topic : String;
|
Topic : String;
|
||||||
TempB : Byte;
|
|
||||||
Begin
|
Begin
|
||||||
Topic := '|03(|09Echomail Node|03) |01-|09> |15';
|
Topic := '|03(|09Echomail Node|03) |01-|09> |15';
|
||||||
Box := TAnsiMenuBox.Create;
|
Box := TAnsiMenuBox.Create;
|
||||||
|
@ -417,15 +416,16 @@ Function Configuration_EchomailAddress (Edit: Boolean) : Byte;
|
||||||
Box : TAnsiMenuBox;
|
Box : TAnsiMenuBox;
|
||||||
Form : TAnsiMenuForm;
|
Form : TAnsiMenuForm;
|
||||||
Topic : String;
|
Topic : String;
|
||||||
|
Count : Byte;
|
||||||
Begin
|
Begin
|
||||||
Topic := '|03(|09Echomail Network|03) |01-|09> |15';
|
Topic := '|03(|09Echomail Network|03) |01-|09> |15';
|
||||||
Box := TAnsiMenuBox.Create;
|
Box := TAnsiMenuBox.Create;
|
||||||
Form := TAnsiMenuForm.Create;
|
Form := TAnsiMenuForm.Create;
|
||||||
|
|
||||||
Box.Open (14, 6, 66, 17);
|
Box.Open (14, 6, 66, 18);
|
||||||
|
|
||||||
VerticalLine (29, 9, 12);
|
VerticalLine (29, 9, 12);
|
||||||
VerticalLine (29, 14, 15);
|
VerticalLine (29, 14, 16);
|
||||||
|
|
||||||
WriteXY (21, 8, 112, 'Address');
|
WriteXY (21, 8, 112, 'Address');
|
||||||
|
|
||||||
|
@ -436,11 +436,16 @@ Function Configuration_EchomailAddress (Edit: Boolean) : Byte;
|
||||||
|
|
||||||
Form.AddStr ('M', ' Domain', 21, 14, 31, 14, 8, 8, 8, @Config.NetDomain[Num], Topic + 'Network domain');
|
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.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.Execute;
|
Form.Execute;
|
||||||
|
|
||||||
Box.Close;
|
If Config.NetPrimary[Num] Then
|
||||||
|
For Count := 1 to 30 Do
|
||||||
|
If Config.NetPrimary[Count] and (Count <> Num) Then
|
||||||
|
Config.NetPrimary[Count] := False;
|
||||||
|
|
||||||
|
Box.Close;
|
||||||
Form.Free;
|
Form.Free;
|
||||||
Box.Free;
|
Box.Free;
|
||||||
End;
|
End;
|
||||||
|
@ -456,7 +461,7 @@ Var
|
||||||
List.Clear;
|
List.Clear;
|
||||||
|
|
||||||
For A := 1 to 30 Do
|
For A := 1 to 30 Do
|
||||||
List.Add(strPadL(strAddr2Str(Config.NetAddress[A]), 23, ' ') + ' ' + strPadL(Config.NetDesc[A], 20, ' '), 0);
|
List.Add(strPadR(strAddr2Str(Config.NetAddress[A]), 23, ' ') + ' ' + strPadR(Config.NetDomain[A], 8, ' ') + ' ' + strPadR(strYN(Config.NetPrimary[A]), 3, ' ') + ' ' + Config.NetDesc[A], 0);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Begin
|
Begin
|
||||||
|
@ -467,15 +472,15 @@ Begin
|
||||||
|
|
||||||
List.NoWindow := True;
|
List.NoWindow := True;
|
||||||
|
|
||||||
Box.Open (17, 5, 64, 20);
|
Box.Open (7, 5, 74, 20);
|
||||||
|
|
||||||
WriteXY (27, 6, 112, 'Network Address Description');
|
WriteXY (9, 6, 112, 'Network Address Domain Pri Description');
|
||||||
WriteXY (19, 7, 112, strRep('Ä', 44));
|
WriteXY (9, 7, 112, strRep('Ä', 64));
|
||||||
|
|
||||||
Repeat
|
Repeat
|
||||||
CreateList;
|
CreateList;
|
||||||
|
|
||||||
List.Open (17, 7, 64, 20);
|
List.Open (7, 7, 74, 20);
|
||||||
|
|
||||||
Case List.ExitCode of
|
Case List.ExitCode of
|
||||||
#13 : If Edit Then
|
#13 : If Edit Then
|
||||||
|
|
|
@ -333,7 +333,8 @@ Var
|
||||||
|
|
||||||
Procedure MakeList;
|
Procedure MakeList;
|
||||||
Var
|
Var
|
||||||
Tag : Byte;
|
Tag : Byte;
|
||||||
|
Addr : String;
|
||||||
Begin
|
Begin
|
||||||
List.Clear;
|
List.Clear;
|
||||||
|
|
||||||
|
@ -344,7 +345,12 @@ Var
|
||||||
|
|
||||||
Read (MBaseFile, MBase);
|
Read (MBaseFile, MBase);
|
||||||
|
|
||||||
List.Add(strPadR(strI2S(FilePos(MBaseFile) - 1), 5, ' ') + ' ' + strPadR(strStripMCI(MBase.Name), 35, ' ') + ' ' + strPadL(strAddr2Str(Config.NetAddress[MBase.NetAddr]), 12, ' '), Tag);
|
If MBase.NetType = 0 Then
|
||||||
|
Addr := 'Local'
|
||||||
|
Else
|
||||||
|
Addr := strAddr2Str(Config.NetAddress[MBase.NetAddr]);
|
||||||
|
|
||||||
|
List.Add(strPadR(strI2S(FilePos(MBaseFile) - 1), 5, ' ') + ' ' + strPadR(strStripMCI(MBase.Name), 35, ' ') + ' ' + strPadL(Addr, 12, ' '), Tag);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
List.Add('', 2);
|
List.Add('', 2);
|
||||||
|
|
|
@ -475,6 +475,7 @@ Begin
|
||||||
Form.AddBol ('T', ' External FSE', 13, 15, 29, 15, 14, 3, @Config.FSEditor, Topic + 'Use external editor');
|
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 ('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 ('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.AddAttr ('Q', ' Quote Color', 52, 7, 67, 7, 13, @Config.ColorQuote, Topic + 'Color for quoted text');
|
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 ('E', ' Text Color' , 53, 8, 67, 8, 12, @Config.ColorText, Topic + 'Color for message text');
|
||||||
|
|
|
@ -68,7 +68,7 @@ Type
|
||||||
Procedure DrawPage (StartY, EndY: Byte; ExitEOF: Boolean);
|
Procedure DrawPage (StartY, EndY: Byte; ExitEOF: Boolean);
|
||||||
Procedure ScrollUp;
|
Procedure ScrollUp;
|
||||||
Procedure ScrollDown (Draw: Boolean);
|
Procedure ScrollDown (Draw: Boolean);
|
||||||
Function LineUp : Boolean;
|
Function LineUp (Reset: Boolean) : Boolean;
|
||||||
Function LineDown (Reset: Boolean) : Boolean;
|
Function LineDown (Reset: Boolean) : Boolean;
|
||||||
Procedure PageUp;
|
Procedure PageUp;
|
||||||
Procedure PageDown;
|
Procedure PageDown;
|
||||||
|
@ -514,7 +514,7 @@ Begin
|
||||||
DrawPage(1, WinSize, False);
|
DrawPage(1, WinSize, False);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Function TEditorANSI.LineUp : Boolean;
|
Function TEditorANSI.LineUp (Reset: Boolean) : Boolean;
|
||||||
Begin
|
Begin
|
||||||
Result := False;
|
Result := False;
|
||||||
|
|
||||||
|
@ -523,7 +523,8 @@ Begin
|
||||||
Dec (CurLine);
|
Dec (CurLine);
|
||||||
Dec (CurY);
|
Dec (CurY);
|
||||||
|
|
||||||
If CurX > GetLineLength(ANSI.Data[CurLine], 80) Then
|
// might be able to use curlength
|
||||||
|
If Reset or (CurX > GetLineLength(ANSI.Data[CurLine], 80)) Then
|
||||||
CurX := GetLineLength(ANSI.Data[CurLine], 80) + 1;
|
CurX := GetLineLength(ANSI.Data[CurLine], 80) + 1;
|
||||||
|
|
||||||
If CurY < 1 Then Begin
|
If CurY < 1 Then Begin
|
||||||
|
@ -537,7 +538,8 @@ Function TEditorANSI.LineDown (Reset: Boolean) : Boolean;
|
||||||
Begin
|
Begin
|
||||||
Result := False;
|
Result := False;
|
||||||
|
|
||||||
If CurLine >= mysMaxMsgLines Then Exit;
|
If CurLine >= LastLine Then Exit;
|
||||||
|
// If CurLine >= mysMaxMsgLines Then Exit;
|
||||||
|
|
||||||
Inc (CurLine);
|
Inc (CurLine);
|
||||||
Inc (CurY);
|
Inc (CurY);
|
||||||
|
@ -648,7 +650,7 @@ Begin
|
||||||
|
|
||||||
DeleteLine (CurLine);
|
DeleteLine (CurLine);
|
||||||
|
|
||||||
If Not LineUp Then DrawPage (CurY, WinSize, False); //optimize
|
If Not LineUp(False) Then DrawPage (CurY, WinSize, False); //optimize
|
||||||
End Else Begin
|
End Else Begin
|
||||||
JoinPos := GetWrapPos(ANSI.Data[CurLine], RowSize, RowSize - GetLineLength(ANSI.Data[CurLine - 1], RowSize));
|
JoinPos := GetWrapPos(ANSI.Data[CurLine], RowSize, RowSize - GetLineLength(ANSI.Data[CurLine - 1], RowSize));
|
||||||
|
|
||||||
|
@ -660,9 +662,9 @@ Begin
|
||||||
Move (ANSI.Data[CurLine][JoinPos + 1], JoinBuf, (CurLength - JoinPos + 1) * SizeOf(RecAnsiBufferChar));
|
Move (ANSI.Data[CurLine][JoinPos + 1], JoinBuf, (CurLength - JoinPos + 1) * SizeOf(RecAnsiBufferChar));
|
||||||
Move (JoinBuf, ANSI.Data[CurLine], RowSize * SizeOf(RecAnsiBufferChar));
|
Move (JoinBuf, ANSI.Data[CurLine], RowSize * SizeOf(RecAnsiBufferChar));
|
||||||
|
|
||||||
If Not LineUp Then DrawPage (CurY, WinSize, False);
|
If Not LineUp(False) Then DrawPage (CurY, WinSize, False);
|
||||||
End Else Begin
|
End Else Begin
|
||||||
LineUp;
|
LineUp(False);
|
||||||
|
|
||||||
CurX := CurLength + 1;
|
CurX := CurLength + 1;
|
||||||
End;
|
End;
|
||||||
|
@ -1252,10 +1254,16 @@ Begin
|
||||||
|
|
||||||
If LineLen + JoinLen <= RowSize Then Begin
|
If LineLen + JoinLen <= RowSize Then Begin
|
||||||
Move (ANSI.Data[Line + 1], ANSI.Data[Line][LineLen + 2], SizeOf(RecAnsiBufferChar) * JoinLen);
|
Move (ANSI.Data[Line + 1], ANSI.Data[Line][LineLen + 2], SizeOf(RecAnsiBufferChar) * JoinLen);
|
||||||
|
|
||||||
|
ANSI.Data[Line][LineLen + 1].Ch := ' ';
|
||||||
|
|
||||||
DeleteLine (Line + 1);
|
DeleteLine (Line + 1);
|
||||||
End Else
|
End Else
|
||||||
If JoinPos > 0 Then Begin
|
If JoinPos > 0 Then Begin
|
||||||
Move (ANSI.Data[Line + 1], ANSI.Data[Line][LineLen + 2], SizeOf(RecAnsiBufferChar) * (JoinPos - 1));
|
Move (ANSI.Data[Line + 1], ANSI.Data[Line][LineLen + 2], SizeOf(RecAnsiBufferChar) * (JoinPos - 1));
|
||||||
|
|
||||||
|
ANSI.Data[Line][LineLen + 1].Ch := ' ';
|
||||||
|
|
||||||
FillChar (JoinBuf, SizeOf(JoinBuf), #0);
|
FillChar (JoinBuf, SizeOf(JoinBuf), #0);
|
||||||
Move (ANSI.Data[Line + 1][JoinPos + 1], JoinBuf, (JoinLen - JoinPos + 1) * SizeOf(RecAnsiBufferChar));
|
Move (ANSI.Data[Line + 1][JoinPos + 1], JoinBuf, (JoinLen - JoinPos + 1) * SizeOf(RecAnsiBufferChar));
|
||||||
Move (JoinBuf, ANSI.Data[Line + 1], RowSize * SizeOf(RecAnsiBufferChar));
|
Move (JoinBuf, ANSI.Data[Line + 1], RowSize * SizeOf(RecAnsiBufferChar));
|
||||||
|
@ -1287,10 +1295,10 @@ Begin
|
||||||
If Session.io.IsArrow Then Begin
|
If Session.io.IsArrow Then Begin
|
||||||
Case Ch of
|
Case Ch of
|
||||||
#71 : CurX := 1;
|
#71 : CurX := 1;
|
||||||
#72 : LineUp;
|
#72 : LineUp(False);
|
||||||
#73 : PageUp;
|
#73 : PageUp;
|
||||||
#75 : If CurX > 1 Then Dec(CurX);
|
#75 : If CurX > 1 Then Dec(CurX) Else LineUp(True);
|
||||||
#77 : If CurX <= RowSize Then Inc(CurX);
|
#77 : If CurX <= CurLength Then Inc(CurX) Else LineDown(True);
|
||||||
#79 : CurX := CurLength + 1;
|
#79 : CurX := CurLength + 1;
|
||||||
#80 : If CurLine < LastLine Then LineDown(False);
|
#80 : If CurLine < LastLine Then LineDown(False);
|
||||||
#81 : PageDown;
|
#81 : PageDown;
|
||||||
|
@ -1298,7 +1306,30 @@ Begin
|
||||||
End;
|
End;
|
||||||
End Else
|
End Else
|
||||||
Case Ch of
|
Case Ch of
|
||||||
|
(*
|
||||||
|
^A : Begin
|
||||||
|
If Forced Then
|
||||||
|
Session.io.OutFull (Session.GetPrompt(307))
|
||||||
|
Else
|
||||||
|
Done := Session.io.GetYN(Session.GetPrompt(356), False);
|
||||||
|
|
||||||
|
If Not Done Then ReDrawTemplate(False);
|
||||||
|
End;
|
||||||
|
*)
|
||||||
^B : ReformParagraph;
|
^B : ReformParagraph;
|
||||||
|
^F : CurX := 1;
|
||||||
|
^G : CurX := CurLength + 1;
|
||||||
|
^H : DoBackSpace;
|
||||||
|
^I : Begin
|
||||||
|
If (CurX < RowSize) and (CurX MOD 5 = 0) Then
|
||||||
|
DoChar(' ');
|
||||||
|
|
||||||
|
While (CurX < RowSize) and (CurX MOD 5 <> 0) Do Begin
|
||||||
|
CurLength := GetLineLength(ANSI.Data[CurLine], RowSize);
|
||||||
|
|
||||||
|
DoChar(' ');
|
||||||
|
End;
|
||||||
|
End;
|
||||||
^K : Begin
|
^K : Begin
|
||||||
If CutPasted Then Begin
|
If CutPasted Then Begin
|
||||||
CutTextPos := 0;
|
CutTextPos := 0;
|
||||||
|
@ -1315,6 +1346,7 @@ Begin
|
||||||
DrawPage (CurY, WinSize, False); //optimize + 1
|
DrawPage (CurY, WinSize, False); //optimize + 1
|
||||||
End;
|
End;
|
||||||
End;
|
End;
|
||||||
|
^M : DoEnter;
|
||||||
^O : Begin
|
^O : Begin
|
||||||
Session.io.OutFile('fshelp', True, 0);
|
Session.io.OutFile('fshelp', True, 0);
|
||||||
ReDrawTemplate(False);
|
ReDrawTemplate(False);
|
||||||
|
@ -1356,8 +1388,6 @@ Begin
|
||||||
|
|
||||||
Session.io.AllowArrow := True;
|
Session.io.AllowArrow := True;
|
||||||
End;
|
End;
|
||||||
#08 : DoBackSpace;
|
|
||||||
#13 : DoEnter;
|
|
||||||
#32..
|
#32..
|
||||||
#254 : If (CurLength >= RowSize) and (GetWrapPos(ANSI.Data[CurLine], RowSize, RowSize) = 0) Then Begin
|
#254 : If (CurLength >= RowSize) and (GetWrapPos(ANSI.Data[CurLine], RowSize, RowSize) = 0) Then Begin
|
||||||
// dont do anything
|
// dont do anything
|
||||||
|
|
|
@ -12,11 +12,7 @@ Uses
|
||||||
bbs_SysopChat,
|
bbs_SysopChat,
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
bbs_Common,
|
bbs_Common,
|
||||||
{$IFDEF NEWEDITOR}
|
|
||||||
bbs_Edit_ANSI,
|
bbs_Edit_ANSI,
|
||||||
{$ELSE}
|
|
||||||
bbs_Edit_Full,
|
|
||||||
{$ENDIF}
|
|
||||||
bbs_Edit_Line;
|
bbs_Edit_Line;
|
||||||
|
|
||||||
Function Editor (Var Lines: SmallInt; MaxLen, MaxLine: SmallInt; Forced: Boolean; Template: String; Var Subj: String) : Boolean;
|
Function Editor (Var Lines: SmallInt; MaxLen, MaxLine: SmallInt; Forced: Boolean; Template: String; Var Subj: String) : Boolean;
|
||||||
|
@ -57,7 +53,6 @@ Uses
|
||||||
bbs_MsgBase_Ansi,
|
bbs_MsgBase_Ansi,
|
||||||
bbs_NodeInfo;
|
bbs_NodeInfo;
|
||||||
|
|
||||||
{$IFDEF NEWEDITOR}
|
|
||||||
Function AnsiEditor (Var Lines: SmallInt; WrapPos: Byte; MaxLines: SmallInt; Forced: Boolean; Template: String; Var Subj: String) : Boolean;
|
Function AnsiEditor (Var Lines: SmallInt; WrapPos: Byte; MaxLines: SmallInt; Forced: Boolean; Template: String; Var Subj: String) : Boolean;
|
||||||
Var
|
Var
|
||||||
Editor : TEditorANSI;
|
Editor : TEditorANSI;
|
||||||
|
@ -83,16 +78,11 @@ Begin
|
||||||
|
|
||||||
Editor.Free;
|
Editor.Free;
|
||||||
End;
|
End;
|
||||||
{$ENDIF}
|
|
||||||
|
|
||||||
Function Editor (Var Lines: SmallInt; MaxLen, MaxLine: SmallInt; Forced: Boolean; Template: String; Var Subj: String) : Boolean;
|
Function Editor (Var Lines: SmallInt; MaxLen, MaxLine: SmallInt; Forced: Boolean; Template: String; Var Subj: String) : Boolean;
|
||||||
Begin
|
Begin
|
||||||
If (Session.io.Graphics > 0) and ((Session.User.ThisUser.EditType = 1) or ((Session.User.ThisUser.EditType = 2) and Session.io.GetYN(Session.GetPrompt(106), True))) Then
|
If (Session.io.Graphics > 0) and ((Session.User.ThisUser.EditType = 1) or ((Session.User.ThisUser.EditType = 2) and Session.io.GetYN(Session.GetPrompt(106), True))) Then
|
||||||
{$IFDEF NEWEDITOR}
|
|
||||||
Editor := AnsiEditor(Lines, MaxLen, MaxLine, Forced, Template, Subj)
|
Editor := AnsiEditor(Lines, MaxLen, MaxLine, Forced, Template, Subj)
|
||||||
{$ELSE}
|
|
||||||
Editor := FullEditor(Lines, MaxLen, MaxLine, Forced, Template, Subj)
|
|
||||||
{$ENDIF}
|
|
||||||
Else
|
Else
|
||||||
Editor := LineEditor(Lines, MaxLen, MaxLine, False, Forced, Subj);
|
Editor := LineEditor(Lines, MaxLen, MaxLine, False, Forced, Subj);
|
||||||
End;
|
End;
|
||||||
|
|
|
@ -550,8 +550,8 @@ Var
|
||||||
S : String;
|
S : String;
|
||||||
A : SmallInt;
|
A : SmallInt;
|
||||||
Begin
|
Begin
|
||||||
If MBase.NetType > 0 Then Begin
|
If (MBase.NetType > 0) and (MBase.NetType <> 3) Then Begin
|
||||||
Msg^.DoStringLn (#1 + 'MSGID: ' + strAddr2Str(Config.NetAddress[MBase.NetAddr]) + ' ' + strI2H(CurDateDos));
|
Msg^.DoStringLn (#1 + 'MSGID: ' + strAddr2Str(Config.NetAddress[MBase.NetAddr]) + ' ' + strI2H(CurDateDos, 8));
|
||||||
|
|
||||||
If ReplyID <> '' Then
|
If ReplyID <> '' Then
|
||||||
Msg^.DoStringLn (#1 + 'REPLY: ' + ReplyID);
|
Msg^.DoStringLn (#1 + 'REPLY: ' + ReplyID);
|
||||||
|
|
|
@ -474,7 +474,9 @@ Begin
|
||||||
Error := IoResult;
|
Error := IoResult;
|
||||||
JM^.TxtBufStart := FileSize(JM^.BufFile);
|
JM^.TxtBufStart := FileSize(JM^.BufFile);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
TxtBuf^[JM^.TxtPos - JM^.TxtBufStart] := Ch;
|
TxtBuf^[JM^.TxtPos - JM^.TxtBufStart] := Ch;
|
||||||
|
|
||||||
Inc(JM^.TxtPos);
|
Inc(JM^.TxtPos);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
@ -1647,8 +1649,7 @@ Begin
|
||||||
FindLastRead := -1;
|
FindLastRead := -1;
|
||||||
Found := False;
|
Found := False;
|
||||||
|
|
||||||
New (LastBuf);
|
New (LastBuf);
|
||||||
|
|
||||||
Seek (LastFile, 0);
|
Seek (LastFile, 0);
|
||||||
|
|
||||||
LastError := IoResult;
|
LastError := IoResult;
|
||||||
|
@ -1792,7 +1793,9 @@ Begin
|
||||||
LockError := IoResult;
|
LockError := IoResult;
|
||||||
End;
|
End;
|
||||||
End;
|
End;
|
||||||
Inc(JM^.LockCount);
|
|
||||||
|
Inc (JM^.LockCount);
|
||||||
|
|
||||||
LockMsgBase := (LockError = 0);
|
LockMsgBase := (LockError = 0);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
@ -1821,8 +1824,6 @@ Begin
|
||||||
UnLockMsgBase := (LockError = 0);
|
UnLockMsgBase := (LockError = 0);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
{SetSeeAlso/GetSeeAlso provided by 2:201/623@FidoNet Jonas@iis.bbs.bad.se}
|
|
||||||
|
|
||||||
Procedure TMsgBaseJAM.SetNextSeeAlso(SAlso: LongInt);
|
Procedure TMsgBaseJAM.SetNextSeeAlso(SAlso: LongInt);
|
||||||
Begin
|
Begin
|
||||||
MsgHdr^.JamHdr.ReplyNext := SAlso;
|
MsgHdr^.JamHdr.ReplyNext := SAlso;
|
||||||
|
@ -1833,7 +1834,7 @@ Begin
|
||||||
GetNextSeeAlso := MsgHdr^.JamHdr.ReplyNext;
|
GetNextSeeAlso := MsgHdr^.JamHdr.ReplyNext;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Function TMsgBaseJAM.ReReadIdx(Var IdxLoc : LongInt) : Word;
|
Function TMsgBaseJAM.ReReadIdx (Var IdxLoc : LongInt) : Word;
|
||||||
Begin
|
Begin
|
||||||
ReReadIdx := 0;
|
ReReadIdx := 0;
|
||||||
IdxLoc := JM^.CurrMsgNum - JM^.BaseHdr.BaseMsgNum;
|
IdxLoc := JM^.CurrMsgNum - JM^.BaseHdr.BaseMsgNum;
|
||||||
|
|
|
@ -892,7 +892,7 @@ Begin
|
||||||
|
|
||||||
If MBase.NetType <> 1 Then Continue;
|
If MBase.NetType <> 1 Then Continue;
|
||||||
|
|
||||||
WriteLn (OutFile, '!' + Config.DataPath + MBase.FileName + ' ' + MBase.FileName + ' ' + strAddr2Str(Config.NetUplink[MBase.NetAddr]));
|
WriteLn (OutFile, '!' + Config.DataPath + MBase.FileName + ' ' + MBase.FileName + ' ' + '0:0/0');
|
||||||
End;
|
End;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
|
|
|
@ -1524,7 +1524,7 @@ Begin
|
||||||
Store (TempLong, 4);
|
Store (TempLong, 4);
|
||||||
End;
|
End;
|
||||||
28 : Begin
|
28 : Begin
|
||||||
TempStr := strI2H(Param[1].L);
|
TempStr := strI2H(Param[1].L, 8);
|
||||||
Store (TempStr, 256);
|
Store (TempStr, 256);
|
||||||
End;
|
End;
|
||||||
29 : Begin
|
29 : Begin
|
||||||
|
|
|
@ -72,7 +72,7 @@
|
||||||
PostTextFiles = false
|
PostTextFiles = false
|
||||||
PackMessageBases = false
|
PackMessageBases = false
|
||||||
ImportEchoMail = false
|
ImportEchoMail = false
|
||||||
ExportEchoMail = false
|
ExportEchoMail = true
|
||||||
|
|
||||||
; ==========================================================================
|
; ==========================================================================
|
||||||
; ==========================================================================
|
; ==========================================================================
|
||||||
|
|
|
@ -216,8 +216,8 @@ Begin
|
||||||
If DoMassUpload Then uMassUpload;
|
If DoMassUpload Then uMassUpload;
|
||||||
If DoTopLists Then uTopLists;
|
If DoTopLists Then uTopLists;
|
||||||
If DoAllFiles Then uAllFilesList;
|
If DoAllFiles Then uAllFilesList;
|
||||||
If DoEchoExport Then uEchoExport;
|
|
||||||
If DoEchoImport Then uEchoImport;
|
If DoEchoImport Then uEchoImport;
|
||||||
|
If DoEchoExport Then uEchoExport;
|
||||||
If DoMsgPurge Then uPurgeMessageBases;
|
If DoMsgPurge Then uPurgeMessageBases;
|
||||||
If DoMsgPack Then uPackMessageBases;
|
If DoMsgPack Then uPackMessageBases;
|
||||||
If DoMsgPost Then uPostMessages;
|
If DoMsgPost Then uPostMessages;
|
||||||
|
|
|
@ -60,6 +60,7 @@ Function SaveMessage (mArea: RecMessageBase; mFrom, mTo, mSubj: String;
|
||||||
Function GetFTNPKTName : String;
|
Function GetFTNPKTName : String;
|
||||||
Function GetFTNArchiveName (Orig, Dest: RecEchoMailAddr) : String;
|
Function GetFTNArchiveName (Orig, Dest: RecEchoMailAddr) : String;
|
||||||
Function GetFTNFlowName (Dest: RecEchoMailAddr) : String;
|
Function GetFTNFlowName (Dest: RecEchoMailAddr) : String;
|
||||||
|
Function GetFTNOutPath (EchoNode: RecEchoMailNode) : String;
|
||||||
Function GetNodeByIndex (Num: LongInt; Var TempNode: RecEchoMailNode) : Boolean;
|
Function GetNodeByIndex (Num: LongInt; Var TempNode: RecEchoMailNode) : Boolean;
|
||||||
|
|
||||||
Implementation
|
Implementation
|
||||||
|
@ -494,12 +495,36 @@ Begin
|
||||||
If Net < 0 Then Net := 65536 + Net;
|
If Net < 0 Then Net := 65536 + Net;
|
||||||
If Node < 0 Then Node := 65536 + Node;
|
If Node < 0 Then Node := 65536 + Node;
|
||||||
|
|
||||||
Result := strI2H((Net SHL 16) OR Node);
|
Result := strI2H((Net SHL 16) OR Node, 8);
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Function GetFTNFlowName (Dest: RecEchoMailAddr) : String;
|
Function GetFTNFlowName (Dest: RecEchoMailAddr) : String;
|
||||||
Begin
|
Begin
|
||||||
Result := strI2H((Dest.Net SHL 16) OR Dest.Node);
|
Result := strI2H((Dest.Net SHL 16) OR Dest.Node, 8);
|
||||||
|
End;
|
||||||
|
|
||||||
|
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 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;
|
||||||
End;
|
End;
|
||||||
|
|
||||||
Function GetNodeByIndex (Num: LongInt; Var TempNode: RecEchoMailNode) : Boolean;
|
Function GetNodeByIndex (Num: LongInt; Var TempNode: RecEchoMailNode) : Boolean;
|
||||||
|
|
|
@ -40,7 +40,7 @@ Begin
|
||||||
While Not Eof(T) Do Begin
|
While Not Eof(T) Do Begin
|
||||||
ReadLn (T, Str);
|
ReadLn (T, Str);
|
||||||
|
|
||||||
If strUpper(Str) = '^' + strUpper(PacketFN) Then Begin
|
If (strUpper(Str) = strUpper(PacketFN)) or (strUpper(Copy(Str, 2, 255)) = strUpper(PacketFN)) Then Begin
|
||||||
Close (T);
|
Close (T);
|
||||||
Exit;
|
Exit;
|
||||||
End;
|
End;
|
||||||
|
@ -61,6 +61,7 @@ Var
|
||||||
EchoNode : RecEchoMailNode;
|
EchoNode : RecEchoMailNode;
|
||||||
PKTName : String;
|
PKTName : String;
|
||||||
BundleName : String;
|
BundleName : String;
|
||||||
|
BundlePath : String;
|
||||||
FLOName : String;
|
FLOName : String;
|
||||||
OrigAddr : RecEchoMailAddr;
|
OrigAddr : RecEchoMailAddr;
|
||||||
Begin
|
Begin
|
||||||
|
@ -84,11 +85,19 @@ Begin
|
||||||
OrigAddr.Net := PH.OrigNet;
|
OrigAddr.Net := PH.OrigNet;
|
||||||
OrigAddr.Node := PH.OrigNode;
|
OrigAddr.Node := PH.OrigNode;
|
||||||
|
|
||||||
// TODO
|
BundlePath := GetFTNOutPath(EchoNode);
|
||||||
// if echonode.echomail.crash etc change char F in FLO extension
|
|
||||||
|
|
||||||
FLOName := bbsConfig.OutboundPath + GetFTNFlowName(EchoNode.Address) + '.flo';
|
DirCreate (BundlePath);
|
||||||
BundleName := bbsConfig.OutboundPath + GetFTNArchiveName(OrigAddr, EchoNode.Address) + '.' + DayString[DayOfWeek(CurDateDos)];
|
|
||||||
|
FLOName := BundlePath + GetFTNFlowName(EchoNode.Address);
|
||||||
|
BundleName := BundlePath + GetFTNArchiveName(OrigAddr, EchoNode.Address) + '.' + strLower(DayString[DayOfWeek(CurDateDos)]);
|
||||||
|
|
||||||
|
Case EchoNode.MailType of
|
||||||
|
0 : FLOName := FLOName + '.flo';
|
||||||
|
1 : FLOName := FLOName + '.clo';
|
||||||
|
2 : FLOName := FLOName + '.dlo';
|
||||||
|
3 : FlOName := FLOName + '.hlo';
|
||||||
|
End;
|
||||||
|
|
||||||
// TODO
|
// TODO
|
||||||
// check for existance, packet size limitations, etc and increment
|
// check for existance, packet size limitations, etc and increment
|
||||||
|
@ -143,6 +152,7 @@ Var
|
||||||
Var
|
Var
|
||||||
TempStr1 : String;
|
TempStr1 : String;
|
||||||
TempStr2 : String;
|
TempStr2 : String;
|
||||||
|
TempStr3 : String;
|
||||||
Begin
|
Begin
|
||||||
If (EchoNode.Address.Zone = MsgBase^.GetOrigAddr.Zone) and
|
If (EchoNode.Address.Zone = MsgBase^.GetOrigAddr.Zone) and
|
||||||
(EchoNode.Address.Net = MsgBase^.GetOrigAddr.Net) and
|
(EchoNode.Address.Net = MsgBase^.GetOrigAddr.Net) and
|
||||||
|
@ -154,12 +164,32 @@ Var
|
||||||
GetTime (DT.Hour, DT.Min, DT.Sec, Temp);
|
GetTime (DT.Hour, DT.Min, DT.Sec, Temp);
|
||||||
|
|
||||||
If MBase.NetType = 3 Then Begin
|
If MBase.NetType = 3 Then Begin
|
||||||
TempStr1 := bbsConfig.OutboundPath + GetFTNFlowName(EchoNode.Address) + '.out';
|
// need to incorporate routing here?!?
|
||||||
TempStr2 := bbsConfig.OutboundPath + GetFTNFlowName(EchoNode.Address) + '.flo';
|
|
||||||
|
|
||||||
// change extensions based on crash etc from echonode
|
TempStr3 := GetFTNOutPath(EchoNode);
|
||||||
// need to add aka matching somewhere in here and also incorporate
|
|
||||||
// routing?
|
DirCreate (TempStr3);
|
||||||
|
|
||||||
|
TempStr1 := TempStr3 + GetFTNFlowName(EchoNode.Address);
|
||||||
|
TempStr2 := TempStr3 + GetFTNFlowName(EchoNode.Address);
|
||||||
|
|
||||||
|
Case EchoNode.MailType of
|
||||||
|
1 : Begin
|
||||||
|
TempStr1 := TempStr1 + '.cut';
|
||||||
|
TempStr2 := TempStr2 + '.clo';
|
||||||
|
End;
|
||||||
|
2 : Begin
|
||||||
|
TempStr1 := TempStr1 + '.dut';
|
||||||
|
TempStr2 := TempStr2 + '.dlo';
|
||||||
|
End;
|
||||||
|
3 : Begin
|
||||||
|
TempStr1 := TempStr1 + '.hut';
|
||||||
|
TempStr2 := TempStr2 + '.hlo';
|
||||||
|
End;
|
||||||
|
Else
|
||||||
|
TempStr1 := TempStr1 + '.out';
|
||||||
|
TempStr2 := TempStr2 + '.flo';
|
||||||
|
End;
|
||||||
|
|
||||||
Assign (F, TempStr1);
|
Assign (F, TempStr1);
|
||||||
|
|
||||||
|
@ -179,7 +209,7 @@ Var
|
||||||
|
|
||||||
FillChar (PH, SizeOf(PH), 0);
|
FillChar (PH, SizeOf(PH), 0);
|
||||||
|
|
||||||
PH.OrigNode := bbsConfig.NetAddress[MBase.NetAddr].Node;
|
PH.OrigNode := MsgBase^.GetOrigAddr.Node;
|
||||||
PH.DestNode := EchoNode.Address.Node;
|
PH.DestNode := EchoNode.Address.Node;
|
||||||
PH.Year := DT.Year;
|
PH.Year := DT.Year;
|
||||||
PH.Month := DT.Month;
|
PH.Month := DT.Month;
|
||||||
|
@ -188,10 +218,10 @@ Var
|
||||||
PH.Minute := DT.Min;
|
PH.Minute := DT.Min;
|
||||||
PH.Second := DT.Sec;
|
PH.Second := DT.Sec;
|
||||||
PH.PKTType := 2;
|
PH.PKTType := 2;
|
||||||
PH.OrigNet := bbsConfig.NetAddress[MBase.NetAddr].Net;
|
PH.OrigNet := MsgBase^.GetOrigAddr.Net;
|
||||||
PH.DestNet := EchoNode.Address.Net;
|
PH.DestNet := EchoNode.Address.Net;
|
||||||
PH.ProdCode := 254; // RESEARCH THIS
|
PH.ProdCode := 254; // RESEARCH THIS
|
||||||
PH.OrigZone := bbsConfig.NetAddress[MBase.NetAddr].Zone;
|
PH.OrigZone := MsgBase^.GetOrigAddr.Zone;
|
||||||
PH.DestZone := EchoNode.Address.Zone;
|
PH.DestZone := EchoNode.Address.Zone;
|
||||||
//Password : Array[1..8] of Char; // RESEARCH THIS
|
//Password : Array[1..8] of Char; // RESEARCH THIS
|
||||||
|
|
||||||
|
@ -201,9 +231,9 @@ Var
|
||||||
FillChar (MH, SizeOf(MH), 0);
|
FillChar (MH, SizeOf(MH), 0);
|
||||||
|
|
||||||
MH.MsgType := 2;
|
MH.MsgType := 2;
|
||||||
MH.OrigNode := bbsConfig.NetAddress[MBase.NetAddr].Node;
|
MH.OrigNode := MsgBase^.GetOrigAddr.Node;
|
||||||
MH.DestNode := EchoNode.Address.Node;
|
MH.DestNode := EchoNode.Address.Node;
|
||||||
MH.OrigNet := bbsConfig.NetAddress[MBase.NetAddr].Net;
|
MH.OrigNet := MsgBase^.GetOrigAddr.Net;
|
||||||
MH.DestNet := EchoNode.Address.Net;
|
MH.DestNet := EchoNode.Address.Net;
|
||||||
|
|
||||||
TempStr1 := FormattedDate(DT, 'DD NNN YY HH:MM:SS') + #0;
|
TempStr1 := FormattedDate(DT, 'DD NNN YY HH:MM:SS') + #0;
|
||||||
|
@ -225,7 +255,7 @@ Var
|
||||||
WriteStr ('AREA:' + MBase.EchoTag, #13);
|
WriteStr ('AREA:' + MBase.EchoTag, #13);
|
||||||
|
|
||||||
If MBase.NetType = 3 Then
|
If MBase.NetType = 3 Then
|
||||||
WriteStr (#1 + 'INTL ' + strAddr2Str(EchoNode.Address) + ' ' + strAddr2Str(bbsConfig.NetAddress[MBase.NetAddr]), #13);
|
WriteStr (#1 + 'INTL ' + strAddr2Str(EchoNode.Address) + ' ' + strAddr2Str(MsgBase^.GetOrigAddr), #13);
|
||||||
|
|
||||||
WriteStr (#1 + 'TID: Mystic BBS ' + mysVersion, #13);
|
WriteStr (#1 + 'TID: Mystic BBS ' + mysVersion, #13);
|
||||||
|
|
||||||
|
@ -237,15 +267,15 @@ Var
|
||||||
// SEEN-BY needs to include yourself and ANYTHING it is sent to (downlinks)
|
// SEEN-BY needs to include yourself and ANYTHING it is sent to (downlinks)
|
||||||
// so we need to cycle through nodes for this mbase and add ALL of them
|
// so we need to cycle through nodes for this mbase and add ALL of them
|
||||||
|
|
||||||
TempStr1 := 'SEEN-BY: ' + strI2S(bbsConfig.NetAddress[MBase.NetAddr].Net) + '/' + strI2S(bbsConfig.NetAddress[MBase.NetAddr].Node) + ' ';
|
TempStr1 := 'SEEN-BY: ' + strI2S(MsgBase^.GetOrigAddr.Net) + '/' + strI2S(MsgBase^.GetOrigAddr.Node) + ' ';
|
||||||
|
|
||||||
If bbsConfig.NetAddress[MBase.NetAddr].Net <> EchoNode.Address.Net Then
|
If MsgBase^.GetOrigAddr.Net <> EchoNode.Address.Net Then
|
||||||
TempStr1 := TempStr1 + strI2S(EchoNode.Address.Net) + '/';
|
TempStr1 := TempStr1 + strI2S(EchoNode.Address.Net) + '/';
|
||||||
|
|
||||||
TempStr1 := TempStr1 + strI2S(EchoNode.Address.Node);
|
TempStr1 := TempStr1 + strI2S(EchoNode.Address.Node);
|
||||||
|
|
||||||
WriteStr (TempStr1, #13);
|
WriteStr (TempStr1, #13);
|
||||||
WriteStr (#1 + 'PATH: ' + strI2S(bbsConfig.NetAddress[MBase.NetAddr].Net) + '/' + strI2S(bbsConfig.NetAddress[MBase.NetAddr].Node), #13);
|
WriteStr (#1 + 'PATH: ' + strI2S(MsgBase^.GetOrigAddr.Net) + '/' + strI2S(MsgBase^.GetOrigAddr.Node), #13);
|
||||||
WriteStr (#0#0, #0);
|
WriteStr (#0#0, #0);
|
||||||
|
|
||||||
Close (F);
|
Close (F);
|
||||||
|
@ -303,6 +333,14 @@ Begin
|
||||||
While Not Eof(ExportFile) Do Begin
|
While Not Eof(ExportFile) Do Begin
|
||||||
Read (ExportFile, ExportIndex);
|
Read (ExportFile, ExportIndex);
|
||||||
|
|
||||||
|
// check base type and export network or echo? or
|
||||||
|
// do it from exportmessage?
|
||||||
|
|
||||||
|
If MBase.NetType = 3 Then Begin
|
||||||
|
If GetNodeByIndex(ExportIndex, EchoNode) Then
|
||||||
|
If EchoNode.Active and (EchoNode.Address.Zone = MsgBase^.GetOrigAddr.Zone) Then
|
||||||
|
ExportMessage;
|
||||||
|
End Else
|
||||||
If GetNodeByIndex(ExportIndex, EchoNode) Then
|
If GetNodeByIndex(ExportIndex, EchoNode) Then
|
||||||
If EchoNode.Active Then
|
If EchoNode.Active Then
|
||||||
ExportMessage;
|
ExportMessage;
|
||||||
|
|
|
@ -44,12 +44,9 @@ Uses
|
||||||
bbs_Common,
|
bbs_Common,
|
||||||
bbs_Core,
|
bbs_Core,
|
||||||
bbs_NodeInfo,
|
bbs_NodeInfo,
|
||||||
{$IFDEF NEWEDITOR}
|
|
||||||
bbs_edit_ansi,
|
|
||||||
{$ENDIF}
|
|
||||||
bbs_Cfg_Main;
|
bbs_Cfg_Main;
|
||||||
|
|
||||||
{$IFDEF NEWEDITOR}
|
(*
|
||||||
Procedure TestEditor;
|
Procedure TestEditor;
|
||||||
Var
|
Var
|
||||||
T : TEditorANSI;
|
T : TEditorANSI;
|
||||||
|
@ -59,7 +56,7 @@ Begin
|
||||||
T.Edit;
|
T.Edit;
|
||||||
T.Free;
|
T.Free;
|
||||||
End;
|
End;
|
||||||
{$ENDIF}
|
*)
|
||||||
|
|
||||||
Procedure InitClasses;
|
Procedure InitClasses;
|
||||||
Begin
|
Begin
|
||||||
|
@ -482,10 +479,8 @@ Begin
|
||||||
|
|
||||||
Set_Node_Action (Session.GetPrompt(345));
|
Set_Node_Action (Session.GetPrompt(345));
|
||||||
|
|
||||||
{$IFDEF NEWEDITOR}
|
// TestEditor;
|
||||||
//TestEditor;
|
// Halt(0);
|
||||||
//Halt(0);
|
|
||||||
{$ENDIF}
|
|
||||||
|
|
||||||
Session.User.UserLogon1 (Script);
|
Session.User.UserLogon1 (Script);
|
||||||
|
|
||||||
|
|
|
@ -246,7 +246,8 @@ Type
|
||||||
FSCommand : String[60];
|
FSCommand : String[60];
|
||||||
// ECHOMAIL NETWORKS
|
// ECHOMAIL NETWORKS
|
||||||
NetAddress : Array[1..30] of RecEchoMailAddr; // echomail addresses
|
NetAddress : Array[1..30] of RecEchoMailAddr; // echomail addresses
|
||||||
NetUplink : Array[1..30] of RecEchoMailAddr; // echomail uplink addresses
|
NetPrimary : Array[1..30] of Boolean;
|
||||||
|
Res1 : Array[1..210] of Byte;
|
||||||
NetDomain : Array[1..30] of String[8]; // echomail domains (5D)
|
NetDomain : Array[1..30] of String[8]; // echomail domains (5D)
|
||||||
NetDesc : Array[1..30] of String[25]; // echomail network description
|
NetDesc : Array[1..30] of String[25]; // echomail network description
|
||||||
// OFFLINE MAIL (should include local qwk path)
|
// OFFLINE MAIL (should include local qwk path)
|
||||||
|
@ -316,6 +317,7 @@ Type
|
||||||
ThemeOnStart : Boolean;
|
ThemeOnStart : Boolean;
|
||||||
StartCodePage : Byte;
|
StartCodePage : Byte;
|
||||||
AcsSeeOffline : String[mysMaxAcsSize];
|
AcsSeeOffline : String[mysMaxAcsSize];
|
||||||
|
// DefDomain : String[8];
|
||||||
//inetSMTPRelay : String[30];
|
//inetSMTPRelay : String[30];
|
||||||
//inetSMTPLogin : String[30];
|
//inetSMTPLogin : String[30];
|
||||||
//inetSMTPPW : String[30];
|
//inetSMTPPW : String[30];
|
||||||
|
|
|
@ -2999,3 +2999,11 @@
|
||||||
|
|
||||||
+ Old Voting booth editor has been replaced with the VD menu command used
|
+ Old Voting booth editor has been replaced with the VD menu command used
|
||||||
to delete voting questions.
|
to delete voting questions.
|
||||||
|
|
||||||
|
+ CTRL-B will now reformat paragraphs in the FS editor.
|
||||||
|
|
||||||
|
+ In the FSE the TAB key now works in insert mode meaning it will push and
|
||||||
|
wrap text by tabstop.
|
||||||
|
|
||||||
|
! Forced messages were able to be aborted sometimes while using the FS
|
||||||
|
editor and using the CTRL-A key to abort.
|
||||||
|
|
Loading…
Reference in New Issue