diff --git a/mystic/bbs_menus.pas b/mystic/bbs_menus.pas index 6da82b7..02cfee8 100644 --- a/mystic/bbs_menus.pas +++ b/mystic/bbs_menus.pas @@ -735,12 +735,10 @@ Var Procedure DrawItem; Begin - If ItemY >= Session.User.ThisUser.ScreenSize {24} Then Begin + If ItemY >= Session.User.ThisUser.ScreenSize Then Begin Session.io.OutRawLn(''); - //ItemY := Session.User.ThisUser.ScreenSize - 1; - - Dec (ItemY); + ItemY := Session.User.ThisUser.ScreenSize - 1; End; If Data.Item[CurItem]^.TextLo <> '' Then Begin diff --git a/mystic/bbs_msgbase.pas b/mystic/bbs_msgbase.pas index 5ce7490..8cf2e16 100644 --- a/mystic/bbs_msgbase.pas +++ b/mystic/bbs_msgbase.pas @@ -1613,6 +1613,8 @@ Var Var NetAddr : RecEchoMailAddr; Begin + FillChar (Session.io.PromptInfo, SizeOf(Session.io.PromptInfo), 0); + Session.io.PromptInfo[1] := MsgBase^.GetFrom; If MBase.NetType = 3 Then Begin @@ -1644,6 +1646,8 @@ Var If MsgBase^.IsSent Then Session.io.PromptInfo[9] := Session.io.PromptInfo[9] + ' ' + strWordGet(4, TempStr, ','); If MsgBase^.IsRcvd Then Session.io.PromptInfo[9] := Session.io.PromptInfo[9] + ' ' + strWordGet(6, TempStr, ','); If MsgBase^.IsDeleted Then Session.io.PromptInfo[9] := Session.io.PromptInfo[9] + ' ' + strWordGet(5, TempStr, ','); + + Session.io.PromptInfo[9] := strStripB(Session.io.PromptInfo[9], ' '); End; Procedure Send_Msg_Text (Str : String); @@ -1869,7 +1873,11 @@ Var 'H' : Begin LastRead := CurMsg - 1; + Session.io.PromptInfo[1] := strI2S(LastRead); + Session.io.OutFullLn(Session.GetPrompt(504)); + + Break; End; 'I' : Begin LastRead := MsgBase^.GetHighMsgNum; @@ -2235,6 +2243,7 @@ Var Inc (PagePos) Else Begin MsgBase^.SeekFirst(MsgInfo[PageTotal].Num); + If Read_Page(False, False, False) Then PagePos := 1; End; End; @@ -2338,9 +2347,15 @@ Var If Session.io.NoFile Then Begin Session.io.OutFullLn ('|CL|03From : |14|$R40|&1 |03Msg # : |14|&5 |03of |14|&6'); + Session.io.OutFullLn ('|03To : |10|$R40|&2 |03Date : |11|&4 |&0'); + Session.io.OutFullLn ('|03Subj : |12|$R40|&3 |03Refer to : |10|&7'); + Session.io.OutFullLn ('|03Stat : |13|$R40|&9 |03See Also : |12|&8'); + +(* Session.io.OutFullLn ('|03To : |10|$R40|&2 |03Refer to : |10|&7'); Session.io.OutFullLn ('|03Subj : |12|$R40|&3 |03See Also : |12|&8'); - Session.io.OutFullLn ('|03Date : |11|&4 |$R31|&0 |03Status : |13|&9'); + Session.io.OutFullLn ('|03Stat : |13|$R40|&9 |03Date : |11|&4 |&0'); +*) Session.io.OutFullLn ('|03Base : |14|MB|CR'); End; @@ -2438,6 +2453,8 @@ Var 'H' : Begin LastRead := MsgBase^.GetMsgNum - 1; + Session.io.PromptInfo[1] := strI2S(LastRead); + Session.io.OutFullLn(Session.GetPrompt(505)); Break; diff --git a/mystic/bbs_msgbase_ansi.pas b/mystic/bbs_msgbase_ansi.pas index 20ac0ac..678d02c 100644 --- a/mystic/bbs_msgbase_ansi.pas +++ b/mystic/bbs_msgbase_ansi.pas @@ -317,6 +317,7 @@ Begin End; End; +(* Procedure TMsgBaseAnsi.ProcessChar (Ch: Char); Begin If GotPipe Then Begin @@ -353,9 +354,9 @@ Begin #13 : CurX := 1; #27 : Escape := 1; Else -// If Ch = '|' Then -// GotPipe := True -// Else + If Ch = '|' Then + GotPipe := True + Else AddChar (Ch); ResetControlCode; @@ -375,6 +376,72 @@ Begin LastChar := Ch; End; +*) + +Procedure TMsgBaseAnsi.ProcessChar (Ch: Char); + + Procedure OneChar (C: Char); + Begin + Case Escape of + 0 : Begin + Case C of + #0 : ; + #9 : MoveXY (CurX + 8, CurY); + #12 : GotClear := True; + #13 : CurX := 1; + #27 : Escape := 1; + Else + If C = '|' Then + GotPipe := True + Else + AddChar (C); + + ResetControlCode; + End; + End; + 1 : If C = '[' Then Begin + Escape := 2; + Code := ''; + GotAnsi := True; + End Else + Escape := 0; + + 2 : CheckCode(C); + Else + ResetControlCode; + End; + + LastChar := C; + End; + +Begin + If GotPipe Then Begin + PipeCode := PipeCode + Ch; + + If Length(PipeCode) = 2 Then Begin + If PipeCode = '00' Then + SetFore(0) + Else + Case strS2I(PipeCode) of + 01.. + 15 : SetFore(strS2I(PipeCode)); + 16.. + 23 : SetBack(strS2I(PipeCode) - 16); + Else + AddChar('|'); + OneChar(PipeCode[1]); + OneChar(PipeCode[2]); + End; + + GotPipe := False; + PipeCode := ''; + End; + + Exit; + End; + + OneChar (Ch); +End; Function TMsgBaseAnsi.ProcessBuf (Var Buf; BufLen: Word) : Boolean; Var diff --git a/mystic/bbs_user.pas b/mystic/bbs_user.pas index b7f79e0..d5b7bb1 100644 --- a/mystic/bbs_user.pas +++ b/mystic/bbs_user.pas @@ -351,6 +351,7 @@ End; Function TBBSUser.GetMatrixUser : Boolean; Var SavedNum : LongInt; + Str : String; Begin Result := False; @@ -361,9 +362,9 @@ Begin Session.io.OutFull (Session.GetPrompt(273)); - ThisUser.Handle := Session.io.GetInput(30, 30, 18, ''); + Str := Session.io.GetInput(30, 30, 18, ''); - If Not FindUser(ThisUser.Handle, True) Then Exit; + If Not FindUser(Str, True) Then Exit; SavedNum := UserNum; UserNum := -1; @@ -1177,6 +1178,7 @@ Procedure TBBSUser.UserLogon1 (Var MPE: String); Var A : Integer; Count : Byte; + Str : String; Begin {$IFDEF LOGGING} Session.SystemLog('Logon1'); {$ENDIF} @@ -1254,13 +1256,13 @@ Begin Session.io.OutFull (Session.GetPrompt(0)); - ThisUser.Handle := strStripB(Session.io.GetInput(30, 30, 18, ''), ' '); + Str := strStripB(Session.io.GetInput(30, 30, 18, ''), ' '); - If Not FindUser(ThisUser.Handle, True) Then Begin + If Not FindUser(Str, True) Then Begin Session.io.OutFile ('newuser', True, 0); If Session.io.GetYN(Session.GetPrompt(1), False) Then Begin - CreateNewUser(ThisUser.Handle); + CreateNewUser(Str); UserLogon2; UserLogon3; Exit; diff --git a/mystic/mpl_common.pas b/mystic/mpl_common.pas index 1b2274b..179e0b6 100644 --- a/mystic/mpl_common.pas +++ b/mystic/mpl_common.pas @@ -297,6 +297,7 @@ Begin AddProc ({$IFDEF MPLPARSER} 'msgeditor', {$ENDIF} 'iIiiosS', iBool); // 544 AddProc ({$IFDEF MPLPARSER} 'msgeditget', {$ENDIF} 'i', iString); // 545 AddProc ({$IFDEF MPLPARSER} 'msgeditset', {$ENDIF} 'is', iNone); // 546 + AddProc ({$IFDEF MPLPARSER} 'onekeyrange', {$ENDIF} 'sll', iChar); // 547 { END OF PROCEDURE DEFINITIONS } @@ -314,6 +315,7 @@ Begin AddPointer ({$IFDEF MPLPARSER} 'allowmci', {$ENDIF} iBool, 1, {$IFNDEF MPLPARSER} @Session.io.PausePtr {$ELSE} NIL {$ENDIF}); AddPointer ({$IFDEF MPLPARSER} 'userloginname',{$ENDIF} iString, 31, {$IFNDEF MPLPARSER} @Session.UserLoginName {$ELSE} NIL {$ENDIF}); AddPointer ({$IFDEF MPLPARSER} 'userloginpw', {$ENDIF} iString, 16, {$IFNDEF MPLPARSER} @Session.UserLoginPW {$ELSE} NIL {$ENDIF}); + AddPointer ({$IFDEF MPLPARSER} 'rangevalue', {$ENDIF} iLongInt, 4, {$IFNDEF MPLPARSER} @Session.io.RangeValue {$ELSE} NIL {$ENDIF}); {$IFNDEF MPLPARSER} TInterpEngine(S).IdxVarDir := X + 1; {$ENDIF} diff --git a/mystic/mpl_execute.pas b/mystic/mpl_execute.pas index 5ceeb61..d3f6e5b 100644 --- a/mystic/mpl_execute.pas +++ b/mystic/mpl_execute.pas @@ -1928,6 +1928,11 @@ Begin End; 546 : If (Param[1].I > 0) and (Param[1].I <= mysMaxMsgLines) Then Session.Msgs.MsgText[Param[1].I] := Param[2].S; + 547 : Begin + TempStr[1] := Session.io.OneKeyRange(Param[1].S, Param[2].L, Param[3].L); + + Store (TempStr[1], 1); + End; End; End; @@ -2074,6 +2079,7 @@ Begin Repeat MoveToPos (StartPos); + If ExecuteBlock (CurVarNum) = 1 Then Begin EvaluateBoolean; Break; @@ -2136,6 +2142,7 @@ Begin Else Repeat Inc (NumberPos); + Numbers[NumberPos].Num := EvaluateNumber; NextChar; @@ -2417,12 +2424,17 @@ End; Function ExecuteMPL (Owner: Pointer; Str: String) : Byte; Var Script : TInterpEngine; + ErrStr : String; Begin Script := TInterpEngine.Create(Owner); Result := Script.Execute(Str); - If Script.ErrNum > 0 Then - Session.io.OutFullLn ('|CR|12MPX ERROR: ' + Script.GetErrorMsg); + If Script.ErrNum > 0 Then Begin + ErrStr := 'MPX ERROR: ' + Script.GetErrorMsg; + + Session.SystemLog(ErrStr + '(' + Str + ')'); + Session.io.OutFullLn ('|CR|12' + ErrStr); + End; Script.Free; End; diff --git a/mystic/todo.pas b/mystic/todo.pas index 9389a8f..071a3b7 100644 --- a/mystic/todo.pas +++ b/mystic/todo.pas @@ -8,7 +8,6 @@ design elements/issues. BUGS AND POSSIBLE ISSUES ======================== -! Posting echomail via NNTP is not setting ECHO flag ! LBP menus arent scrolling correctly in Linux ! MUTIL FILESBBS import is not skipping FILES.BBS? ! Make sure MIS in Linux works with DOSEMU @@ -242,3 +241,30 @@ InsertChar (XPOS, Ch, Attr) ReplaceChar (XPOS, Ch, Attr ReplaceLine + +1.11 +==== +- Rewrite user login functions and MATRIX +- Change temp directories. Add MIS/MUTIL/FTN/NODE +- User directories (research disk performance with a zillion dirs) + 1. Ability to save file batch queues between sessions + 2. Ability to save "draft" message posts between sessions + 3. Accessible via /home in FTP (virtual dir) allows QWK/REP +- New FS editor with DRAW MODE w/ inline ANSI/pipe editing +- Option to send QWK packet by e-mail OR download it +- Option to "upload" REP packet by sending email to BBS (qwk@yourbbs.com)? + - Needs additional research +! POSSIBLE removal of local console in Windows and STDIO usage in Linux + ^ Massive performance increase possible here as well as: +! POSSIBLE FTN tosser. +! POSSIBLE FTN mailer (transx, FTP, binkP) +! MIS event system (possible 1.10) +! Password reset via email (possible 1.10) +! Email verification system (for access upgrades) (possible 1.10) +- New message reader functions allows inline ANSI +- Msg editor can "post process" ANSIs to be 79 columns max in stored line + length (bbs friendly) +- Rewrite of MBBSWEB or integrated HTML server? still need a good designer + that actually will put a lot of time into it +- Rewrite of ANSI template system (.ini files or mystic2 format?) +! Revamp logging system and add additional logging to MIS diff --git a/mystic/whatsnew.txt b/mystic/whatsnew.txt index bcf9695..50c448a 100644 --- a/mystic/whatsnew.txt +++ b/mystic/whatsnew.txt @@ -2823,13 +2823,16 @@ ; Msg header flags text one word each separated by a comma ; 1=Local 2=Echo 3=Private 4=Sent 5=Delete, 6=Received - 490 Local,Echo,Priv,Sent,Del,Read + 490 Local,Echo,Private,Sent,Deleted,Read ! Echo flag was not displaying correctly in the message headers. ! Fixed a bug in the ANSI file viewer which was causing garbled ANSIs in the gallery and the viewer. + ! Fixed a bug in the ANSI file viewer that could be caused by falsely + recognizing pipe codes when they were not. + + Pressing the SPACE bar in the ANSI viewer now displays the file "normally" with a screenpause at the end. @@ -2848,8 +2851,8 @@ + Added a different type of line check into the ANSI parsers. If a line ends with a linefeed but didn't have carrage return before it (as is - standard), Mystic will now add the carrage return. If this blows up - any existing ANSIs it will be changed back. + standard), Mystic will now add the carrage return. This is an attempt to + auto-correct ANSI files that are incorrectly saved in Unix. ! Fixed a bug with pipe color code parsing in the ANSI viewer (GV) @@ -2862,7 +2865,35 @@ + Mystic will now perform text wrapping in the message editors based on the select theme's column size. - + Abbreviated Mystic's copyright notice upon connect to be friendly to - 40 column connections. + + Abbreviated Mystic's copyright notice upon connect to display within a + 40 column terminal. + + + Rearranged the built in message header a little bit to allow more space + for message flags. Moved the date to the right side and the status + flags to the left side. + + ! Fixed a random weird bug in the Matrix login that I don't feel like + explaining. :) + + + Added a new MPL function called OneKeyRange. This function works similar + to OneKey, except that it will also allow for a number input within a + certain range. The number value is stored in a variable called + RangeValue and the function returns a #0 if a number was entered. For + example: + + Var + Ch : Char; + Begin + Write ('Enter letters A-G or a number between 1-50: '); + + Ch := OneKeyRange('ABCDEFG', 1, 50); + + If Ch = #0 Then + WriteLn ('You entered a number: ' + Int2Str(RangeValue)) + Else + WriteLn ('You entered character: ' + Ch); + End. + + + MPL errors when executing a MPX module are now logged in the SYSOP logs