diff --git a/mystic/bbs_cfg_syscfg.pas b/mystic/bbs_cfg_syscfg.pas index 8ee46dd..3cfec1e 100644 --- a/mystic/bbs_cfg_syscfg.pas +++ b/mystic/bbs_cfg_syscfg.pas @@ -471,8 +471,8 @@ Begin 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', ' Crosspost ACS', 12, 13, 29, 13, 15, 20, 30, @Config.AcsCrossPost, Topic + 'ACS to allow crosspost messages'); - Form.AddStr ('A', ' Attachment ACS', 11, 14, 29, 14, 16, 20, 30, @Config.AcsFileAttach, Topic + 'ACS to allow file attachments'); + 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'); diff --git a/mystic/bbs_edit_ansi.pas b/mystic/bbs_edit_ansi.pas index 4bbe559..ddd5f96 100644 --- a/mystic/bbs_edit_ansi.pas +++ b/mystic/bbs_edit_ansi.pas @@ -44,6 +44,8 @@ Type Done : Boolean; Subject : String; Template : String; + MaxMsgLines : Word; + MaxMsgCols : Byte; Constructor Create (Var O: Pointer; TemplateFile: String); Destructor Destroy; Override; @@ -95,29 +97,31 @@ Constructor TEditorANSI.Create (Var O: Pointer; TemplateFile: String); Begin Inherited Create; - Owner := O; - ANSI := TMsgBaseANSI.Create(NIL, False); - WinX1 := 1; - WinX2 := 79; - WinY1 := 2; - WinY2 := 23; - WinSize := WinY2 - WinY1 + 1; - RowSize := WinX2 - WinX1 + 1; - CurX := 1; - CurY := 1; - CurLine := 1; - TopLine := 1; - CurAttr := 7; - QuoteAttr := 9; - InsertMode := True; - DrawMode := False; - GlyphMode := False; - WrapMode := True; - ClearEOL := RowSize >= 79; - LastLine := 1; - CutPasted := False; - CutTextPos := 0; - Template := TemplateFile; + Owner := O; + ANSI := TMsgBaseANSI.Create(NIL, False); + WinX1 := 1; + WinX2 := 79; + WinY1 := 2; + WinY2 := 23; + WinSize := WinY2 - WinY1 + 1; + RowSize := WinX2 - WinX1 + 1; + CurX := 1; + CurY := 1; + CurLine := 1; + TopLine := 1; + CurAttr := 7; + QuoteAttr := 9; + InsertMode := True; + DrawMode := False; + GlyphMode := False; + WrapMode := True; + ClearEOL := RowSize >= 79; + LastLine := 1; + CutPasted := False; + CutTextPos := 0; + Template := TemplateFile; + MaxMsgLines := mysMaxMsgLines; + MaxMsgCols := 79; FillChar (CutText, SizeOf(CutText), 0); End; @@ -156,7 +160,7 @@ End; Procedure TEditorANSI.FindLastLine; Begin - LastLine := mysMaxMsgLines; + LastLine := MaxMsgLines; While (LastLine > 1) And IsBlankLine(ANSI.Data[LastLine], 80) Do Dec(LastLine); @@ -226,10 +230,10 @@ Procedure TEditorANSI.DeleteLine (Line: LongInt); Var Count : LongInt; Begin - For Count := Line to mysMaxMsgLines - 1 Do + For Count := Line to MaxMsgLines - 1 Do ANSI.Data[Count] := ANSI.Data[Count + 1]; - FillChar (ANSI.Data[mysMaxMsgLines], SizeOf(RecAnsiBufferLine), #0); + FillChar (ANSI.Data[MaxMsgLines], SizeOf(RecAnsiBufferLine), #0); If LastLine > 1 Then Dec(LastLine); End; @@ -238,12 +242,12 @@ Procedure TEditorANSI.InsertLine (Line: LongInt); Var Count : LongInt; Begin - For Count := mysMaxMsgLines DownTo Line + 1 Do + For Count := MaxMsgLines DownTo Line + 1 Do ANSI.Data[Count] := ANSI.Data[Count - 1]; FillChar(ANSI.Data[Line], SizeOf(RecAnsiBufferLine), #0); - If LastLine < mysMaxMsgLines Then Inc(LastLine); + If LastLine < MaxMsgLines Then Inc(LastLine); End; Function TEditorANSI.GetWrapPos (Var Line; LineSize: Byte; WrapPos: Byte) : Byte; @@ -305,7 +309,7 @@ Begin StartY := CurY; StartLine := Count; - While Count <= mysMaxMsgLines Do Begin + While Count <= MaxMsgLines Do Begin If Count > LastLine Then LastLine := Count; FillChar (TempStr, SizeOf(TempStr), #0); @@ -315,7 +319,7 @@ Begin If IsBlankLine(TempStr, 255) Then Begin If Count < LastLine Then Begin InsertLine(Count); - EndLine := mysMaxMsgLines; + EndLine := MaxMsgLines; End Else EndLine := Count; @@ -397,7 +401,7 @@ Begin Session.io.OutFile (Template, True, 0); WinX1 := 1; - WinX2 := 79; + WinX2 := MaxMsgCols; //79 // WinX1 := Session.io.ScreenInfo[1].X; // WinX2 := Session.io.ScreenInfo[2].X; WinY1 := Session.io.ScreenInfo[1].Y; @@ -405,6 +409,7 @@ Begin WinSize := WinY2 - WinY1 + 1; RowSize := WinX2 - WinX1 + 1; + // if rowsize > msgmaxcols then rowsize := maxmsgcols; ClearEOL := RowSize >= 79; If Reset Then Begin @@ -508,7 +513,7 @@ Var Begin NewTop := TopLine + (WinSize DIV 2) + 1; - While NewTop >= mysMaxMsgLines Do + While NewTop >= MaxMsgLines Do Dec (NewTop, 2); CurY := CurLine - NewTop + 1; @@ -543,7 +548,7 @@ Begin Result := False; If CurLine >= LastLine Then Exit; -// If CurLine >= mysMaxMsgLines Then Exit; +// If CurLine >= MaxMsgLines Then Exit; Inc (CurLine); Inc (CurY); @@ -585,7 +590,8 @@ Begin TBBSCore(Owner).io.AnsiClrEOL; End Else Begin TBBSCore(Owner).io.AnsiColor (7); - TBBSCore(Owner).io.BufAddStr (strRep(' ', LineLen - RowSize)); + TBBSCore(Owner).io.BufAddStr (strRep(' ', RowSize - LineLen)); + End; End; @@ -776,7 +782,7 @@ Procedure TEditorANSI.DoEnter; Var TempLine : RecAnsiBufferLine; Begin - If InsertMode and IsBlankLine(ANSI.Data[mysMaxMsgLines], 80) Then Begin + If InsertMode and IsBlankLine(ANSI.Data[MaxMsgLines], 80) Then Begin If CurX > CurLength Then Begin InsertLine (CurLine + 1); @@ -855,7 +861,7 @@ Begin If Finish = 0 Then Finish := Start; For NumLines := Start to Finish Do Begin - If LastLine = mysMaxMsgLines Then Break; + If LastLine = MaxMsgLines Then Break; If Not IsBlankLine(Ansi.Data[CurLine], 80) Then Begin Inc (CurLine); @@ -872,7 +878,7 @@ Begin End; End; - If CurLine < mysMaxMsgLines Then Begin + If CurLine < MaxMsgLines Then Begin Inc (CurLine); Inc (CurY); @@ -1071,7 +1077,7 @@ Begin End Else Case Ch of #27 : Break; - #13 : If (LastLine < mysMaxMsgLines) and (Not NoMore) Then Begin + #13 : If (LastLine < MaxMsgLines) and (Not NoMore) Then Begin If QuoteTopPage + QuoteCurLine = QuoteLines Then NoMore := True; @@ -1107,7 +1113,7 @@ Begin Session.io.OutFull('|16'); - If CurLine < mysMaxMsgLines Then Begin + If CurLine < MaxMsgLines Then Begin Inc (CurLine); Inc (CurY); @@ -1367,7 +1373,7 @@ Begin CutPasted := True; For Count := CutTextPos DownTo 1 Do - If LastLine < mysMaxMsgLines Then Begin + If LastLine < MaxMsgLines Then Begin InsertLine(CurLine); ANSI.Data[CurLine] := CutText[Count]; diff --git a/mystic/bbs_general.pas b/mystic/bbs_general.pas index 92fced0..de8c09d 100644 --- a/mystic/bbs_general.pas +++ b/mystic/bbs_general.pas @@ -60,7 +60,10 @@ Var Begin Editor := TEditorANSI.Create(Pointer(Session), Template); - Editor.Subject := Subj; + Editor.Forced := Forced; + Editor.Subject := Subj; + Editor.MaxMsgLines := MaxLines; + Editor.MaxMsgCols := WrapPos; For Count := 1 to Lines Do Editor.SetLineText (Count, Session.Msgs.MsgText[Count]); diff --git a/mystic/bbs_io.pas b/mystic/bbs_io.pas index 120c408..601f1f9 100644 --- a/mystic/bbs_io.pas +++ b/mystic/bbs_io.pas @@ -2144,7 +2144,7 @@ Var FillSize : Byte; Attr : Byte; Begin -// Attr := Screen.TextAttr; + Attr := Screen.TextAttr; Screen.TextAttr := 0; // kludge to force it to return full ansi codes diff --git a/mystic/bbs_msgbase.pas b/mystic/bbs_msgbase.pas index 4b58296..908d38c 100644 --- a/mystic/bbs_msgbase.pas +++ b/mystic/bbs_msgbase.pas @@ -1183,7 +1183,7 @@ Var Begin ReplyBase := MBase; - If Not Email Then Begin + If Not Email And Session.User.Access(Config.AcsExtReply) Then Begin Session.io.PromptInfo[1] := MBase.Name; Session.io.PromptInfo[2] := MsgBase^.GetFrom; Session.io.PromptInfo[3] := MsgBase^.GetSubj; diff --git a/mystic/mide.ini b/mystic/mide.ini index 6cfb6c9..37934bf 100644 --- a/mystic/mide.ini +++ b/mystic/mide.ini @@ -55,7 +55,7 @@ ; For rootpath, you need to include the directory where the MYSTIC binary ; exists. - rootpath = \dev\code\mystic\ - username = g00r00 - password = asdf + rootpath = c:\mystic\ + username = guest + password = guest diff --git a/mystic/records.pas b/mystic/records.pas index ec18a25..80c15cd 100644 --- a/mystic/records.pas +++ b/mystic/records.pas @@ -240,7 +240,7 @@ Type ColorTear : Byte; ColorOrigin : Byte; ColorKludge : Byte; - AcsCrossPost : String[mysMaxAcsSize]; + AcsExtReply : String[mysMaxAcsSize]; AcsFileAttach : String[mysMaxAcsSize]; AcsNodeLookup : String[mysMaxAcsSize]; FSEditor : Boolean; diff --git a/mystic/todo.pas b/mystic/todo.pas index 6b42ed1..67d9b16 100644 --- a/mystic/todo.pas +++ b/mystic/todo.pas @@ -8,6 +8,7 @@ design elements/issues. BUGS AND POSSIBLE ISSUES ======================== +! check forced messages in new fs editor might not be enforced. ! Weird console slowdown with test.txt in Win7 use MVIEW to test ! GE option 32 (change def protocol) might be broken ! Node chat goes haywire at 1000 lines scrollback @@ -26,6 +27,9 @@ BUGS AND POSSIBLE ISSUES FUTURE / IDEAS / WORK IN PROGRESS / NOTES ========================================= +- redo voting booth externalize user storage and allow unlimited questions + plus maybe categories. or at least up it to like 50 questions or + something and also add in the "created" date to the voting question itself - Fix up new FS editor to use passed template and editor contraints. - Test with file description editor. - ACS to allow "selecable reply base" diff --git a/mystic/whatsnew.txt b/mystic/whatsnew.txt index ecd5f66..6117138 100644 --- a/mystic/whatsnew.txt +++ b/mystic/whatsnew.txt @@ -3275,8 +3275,10 @@ + FTP server now has the option to allow passive data transfers or not, and this has replaced the "Allow Anonymous" which does not exist at this time. - Please review your configuration. If you or users have issues with passive - turn it off. The default should set it to off now. + PLEASE REVIEW YOUR CONFIGURATION. If you or users have issues with passive + turn it off or review the network interface setting (see below). + + The default should set it to off now. + When editing a posted message, Mystic now allows the option to set the echomail "sent" flag. Prompt #296 has been updated for this new option. A @@ -3336,4 +3338,28 @@ ! Fixed a rare bug that could ocassionally cause some strange behavior during global new scans IF a message was moved. + ! The new FS editor wasn't correctly handling the parameters passed to it + via MPL and some other areas (like editing file descriptions). This has + been fixed. It can do SO much more than it does now, but its going to + require a revamp to the editor template files. More on that later. + + + The "Crosspost ACS" value in the configuration has been renamed as the + "Extended Reply ACS". If this value is met for a user, Mystic will allow + the user to select the message base which the reply will go to. ALPHAS: + YOU MUST REVIEW THIS SETTING BECAUSE IT WILL BE S255 BY DEFAULT NOW. + + Crossposting is already allowed because once you post a message you can + forward it to other message bases if you are the "owner" of that message, + which is basically the same outcome. This ACS was unused and useless so + its now changed to a more appropriate "Extended Reply ACS". + + + Mystic has been ported to ARM Linux (aka Raspberry Pi). There is still + one issue with MIS and FIDOPOLL so I am not releasing a complete install + for A33, but once that is sorted out I will do an installable release. + + In the meantime, you can certainly compile the code now and run it. It + runs suprisingly well once you get the console setup correctly. However, + until the issue with MIS is solved you will have to use inetxd or similar + for your telnet server. +