From 79d94e90c7c0debb8504a338a9cc99461446e28c Mon Sep 17 00:00:00 2001 From: mysticbbs Date: Sat, 25 May 2013 13:56:32 -0400 Subject: [PATCH] More A35 work --- mystic/bbs_io.pas | 11 ++- mystic/bbs_msgbase.pas | 115 ++++++++++++++++++++----------- mystic/bbs_msgbase_squish.pas | 2 +- mystic/bbs_user.pas | 64 +++++++++--------- mystic/default.txt | 3 +- mystic/mis.pas | 2 + mystic/mis_client_http.pas | 11 +-- mystic/mkcrap.pas | 64 ------------------ mystic/mpl_common.pas | 64 +++++++++++------- mystic/mplc.pas | 13 ++-- mystic/mutil_echoexport.pas | 2 +- mystic/mutil_toplists.pas | 4 +- mystic/nodespy_term.pas | 124 +++++++++++++++++++--------------- mystic/whatsnew.txt | 21 ++++++ 14 files changed, 264 insertions(+), 236 deletions(-) diff --git a/mystic/bbs_io.pas b/mystic/bbs_io.pas index 44281b3..5656fdc 100644 --- a/mystic/bbs_io.pas +++ b/mystic/bbs_io.pas @@ -1276,13 +1276,12 @@ Begin If BufPos MOD BaudEmulator = 0 Then WaitMS(6); End; -(* - If AllowAbort And (BufPos MOD 128 = 0) Then - If InKey(0) = #32 Then Begin + If AllowAbort And (BufPos MOD 128 = 0) And Not Session.LocalMode Then + If Session.Client.DataWaiting And (InKey(0) = #32) Then Begin AnsiColor(7); Break; End; - +(* If AllowAbort And (InKey(0) = #32) Then Begin AnsiColor(7); Break; @@ -1440,7 +1439,7 @@ Begin Handles[0] := Input.ConIn; If Not TBBSCore(Core).LocalMode Then Begin - If TBBSCore(Core).Client.FInBufPos <= TBBSCore(Core).Client.FInBufEnd Then + If TBBSCore(Core).Client.FInBufPos < TBBSCore(Core).Client.FInBufEnd Then InType := 2 Else Begin Handles[1] := SocketEvent; @@ -1916,7 +1915,7 @@ Var End; Begin - PurgeInputBuffer; +// PurgeInputBuffer; If UseInLimit Then Begin Field := InLimit; diff --git a/mystic/bbs_msgbase.pas b/mystic/bbs_msgbase.pas index a3491c9..3b783dd 100644 --- a/mystic/bbs_msgbase.pas +++ b/mystic/bbs_msgbase.pas @@ -350,6 +350,7 @@ Var Begin If Not Config.MCompress Then Begin Result := GetBaseByNum(Num, TempBase); + Exit; End; @@ -826,31 +827,13 @@ Var End; End; + Close (MBaseFile); + Session.io.OutFull (Session.GetPrompt(430)); End; - Procedure ToggleBase (A : Word); - Var - B : Word; + Procedure ToggleCurrent (Forced: LongInt); Begin - If A = 0 Then Exit; - - B := 0; - FileMode := 66; - - Reset (MBaseFile); - - Repeat - {$I-} Read (MBaseFile, MBase); {$I+} - - If IoResult <> 0 Then Exit; - - If Session.User.Access(MBase.ListACS) Then - Inc(B); - - If A = B Then Break; - Until False; - GetMessageScan; Session.io.PromptInfo[1] := MBase.Name; @@ -858,32 +841,74 @@ Var If QWK Then Begin Case MScan.QwkScan of 0 : Begin - MScan.QwkScan := 1; - Session.io.OutFullLn (Session.GetPrompt(97)); + If Forced <> -1 Then + MScan.QwkScan := Forced + Else Begin + MScan.QwkScan := 1; + + Session.io.OutFullLn (Session.GetPrompt(97)); + End; End; 1 : Begin - MScan.QwkScan := 0; - Session.io.OutFullLn (Session.GetPrompt(96)); + If Forced <> -1 Then + MScan.QwkScan := Forced + Else Begin + MScan.QwkScan := 0; + + Session.io.OutFullLn (Session.GetPrompt(96)); + End; End; - 2 : Session.io.OutFullLn (Session.GetPrompt(302)); + 2 : If Forced <> -1 Then + Session.io.OutFullLn (Session.GetPrompt(302)); End; End Else Begin Case MScan.NewScan of 0 : Begin - MScan.NewScan := 1; - Session.io.OutFullLn (Session.GetPrompt(99)); + If Forced <> -1 Then + MScan.NewScan := Forced + Else Begin + MScan.NewScan := 1; + + Session.io.OutFullLn (Session.GetPrompt(99)); + End; End; 1 : Begin - MScan.NewScan := 0; - Session.io.OutFullLn (Session.GetPrompt(98)); + If Forced <> -1 Then + MScan.NewScan := Forced + Else Begin + MScan.NewScan := 0; + + Session.io.OutFullLn (Session.GetPrompt(98)); + End; End; - 2 : Session.io.OutFullLn (Session.GetPrompt(302)); + 2 : If Forced <> -1 Then + Session.io.OutFullLn (Session.GetPrompt(302)); End; End; SetMessageScan; End; + Procedure ToggleAll (Value: Byte); + Begin + Reset (MBaseFile); + + While Not Eof(MBaseFile) Do Begin + Read (MBaseFile, MBase); + + If Session.User.Access(MBase.ListACS) Then + ToggleCurrent(Value); + End; + + Close (MBaseFile); + End; + + Procedure ToggleByNumber (BaseNumber: LongInt); + Begin + If (BaseNumber > 0) And GetBaseCompressed(BaseNumber, MBase) Then + ToggleCurrent(-1); + End; + Var Old : RecMessageBase; Temp : String[40]; @@ -892,7 +917,8 @@ Var Num1 : String[40]; Num2 : String[40]; Begin - Old := MBase; + Old := MBase; + FileMode := 66; Session.User.IgnoreGroup := Pos('/ALLGROUP', strUpper(Data)) > 0; @@ -900,8 +926,11 @@ Begin If Total = 0 Then Begin Session.io.OutFullLn (Session.GetPrompt(94)); + MBase := Old; + Session.User.IgnoreGroup := False; + Exit; End; @@ -912,8 +941,14 @@ Begin If (Temp = '') or (Temp = 'Q') Then Break; + If Temp = 'A' Then + ToggleAll(1) + Else + If Temp = 'D' Then + ToggleAll(0) + Else If Temp = '?' Then - List_Bases + // do nothing Else Begin Num1 := ''; Num2 := ''; @@ -924,9 +959,9 @@ Begin If Temp[Count1] = ',' Then Begin If Num2 <> '' Then Begin For Count2 := strS2I(Num2) to strS2I(Num1) Do - ToggleBase(Count2); + ToggleByNumber(Count2); End Else - ToggleBase(strS2I(Num1)); + ToggleByNumber(strS2I(Num1)); Num1 := ''; Num2 := ''; @@ -940,15 +975,13 @@ Begin If Num2 <> '' Then Begin For Count1 := strS2I(Num2) to strS2I(Num1) Do - ToggleBase(Count1); + ToggleByNumber(Count1); End Else - ToggleBase(strS2I(Num1)); - - List_Bases; + ToggleByNumber(strS2I(Num1)); End; - Until False; - Close (MBaseFile); + List_Bases; + Until False; MBase := Old; diff --git a/mystic/bbs_msgbase_squish.pas b/mystic/bbs_msgbase_squish.pas index fd95048..44115b5 100644 --- a/mystic/bbs_msgbase_squish.pas +++ b/mystic/bbs_msgbase_squish.pas @@ -1000,7 +1000,7 @@ Begin TmpDt.Hour := strS2I(Copy(SqInfo^.StrTime,1,2)); TmpDt.Min := strS2I(Copy(SqInfo^.StrTime, 4,2)); TmpDt.Sec := 0; - TmpStr := FormattedDate(TmpDT, 'DD NNN YY ') + Copy(SqInfo^.StrTime, 1, 5) + ':00'; + TmpStr := FormatDate(TmpDT, 'DD NNN YY ') + Copy(SqInfo^.StrTime, 1, 5) + ':00'; PackTime (TmpDT, TmpDate); diff --git a/mystic/bbs_user.pas b/mystic/bbs_user.pas index 6c50cb3..b087987 100644 --- a/mystic/bbs_user.pas +++ b/mystic/bbs_user.pas @@ -1309,51 +1309,53 @@ Begin Session.io.OutFile ('prelogon', True, 0); If UserNum = -1 Then Begin + Count := 1; - Count := 1; + Repeat + If Count > Config.LoginAttempts Then Halt; - Repeat - If Count > Config.LoginAttempts Then Halt; + Session.io.PromptInfo[1] := strI2S(Count); + Session.io.PromptInfo[2] := strI2S(Config.LoginAttempts); + Session.io.PromptInfo[3] := strI2S(Config.LoginAttempts - Count); - Session.io.PromptInfo[1] := strI2S(Count); - Session.io.PromptInfo[2] := strI2S(Config.LoginAttempts); - Session.io.PromptInfo[3] := strI2S(Config.LoginAttempts - Count); + Session.io.OutFull (Session.GetPrompt(0)); - Session.io.OutFull (Session.GetPrompt(0)); + Str := strStripB(Session.io.GetInput(30, 30, 18, ''), ' '); - Str := strStripB(Session.io.GetInput(30, 30, 18, ''), ' '); + If Not FindUser(Str, True) Then Begin + Session.io.OutFile ('newuser', True, 0); - If Not FindUser(Str, True) Then Begin - Session.io.OutFile ('newuser', True, 0); + If Session.io.GetYN(Session.GetPrompt(1), False) Then Begin + CreateNewUser(Str); + UserLogon2; + UserLogon3; - If Session.io.GetYN(Session.GetPrompt(1), False) Then Begin - CreateNewUser(Str); - UserLogon2; - UserLogon3; - Exit; - End; + Exit; + End; - Inc (Count); - End Else Break; - Until False; + Inc (Count); + End Else + Break; + Until False; - A := UserNum; {If user would drop carrier here itd save their info } - UserNum := -1; {which is only User.ThisUser.realname at this time } + A := UserNum; {If user would drop carrier here itd save their info } + UserNum := -1; {which is only User.ThisUser.realname at this time } - If Not Session.io.GetPW(Session.GetPrompt(2), Session.GetPrompt(3), TempUser.Password) Then Begin - If Config.PWInquiry Then - If Session.io.GetYN(Session.GetPrompt(475), False) Then - Session.Msgs.PostMessage(True, '/TO:' + strReplace(Config.FeedbackTo, ' ', '_') + ' /SUBJ:Password_Inquiry'); + If Not Session.io.GetPW(Session.GetPrompt(2), Session.GetPrompt(3), TempUser.Password) Then Begin + If Config.PWInquiry Then + If Session.io.GetYN(Session.GetPrompt(475), False) Then + Session.Msgs.PostMessage(True, '/TO:' + strReplace(Config.FeedbackTo, ' ', '_') + ' /SUBJ:Password_Inquiry'); - Session.Msgs.PostTextFile('hackwarn.txt;0;' + Config.SysopName + ';' + TempUser.Handle + ';Possible hack attempt', True); + Session.Msgs.PostTextFile('hackwarn.txt;0;' + Config.SysopName + ';' + TempUser.Handle + ';Possible hack attempt', True); - Halt(0); + Halt(0); + End; + + UserNum := A; + ThisUser := TempUser; End; - UserNum := A; - End; - - ThisUser := TempUser; +// ThisUser := TempUser; End; Session.SystemLog ('User: ' + ThisUser.Handle + ' logged in'); diff --git a/mystic/default.txt b/mystic/default.txt index 2619415..5f74c31 100644 --- a/mystic/default.txt +++ b/mystic/default.txt @@ -197,7 +197,8 @@ ; &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,|10##|01]|09, |01[|10?|01/|10List|01]|09, or |01[|10Q|01]|09uit: |XX +; Message base new and qwk scan toggle prompt: +095 Toggle: |09[|11#-#,#|09], Select [|11A|09]ll, [|11D|09]eselect All, [|11?|09/|11List|09]: |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 diff --git a/mystic/mis.pas b/mystic/mis.pas index 5cc0905..a3b5e42 100644 --- a/mystic/mis.pas +++ b/mystic/mis.pas @@ -316,7 +316,9 @@ Begin Console.SetWindow (1, 1, 80, 25, True); FocusCurrent := FocusMax; + DrawStatusScreen; + SwitchFocus; End; diff --git a/mystic/mis_client_http.pas b/mystic/mis_client_http.pas index c6a3a99..0dc0c0d 100644 --- a/mystic/mis_client_http.pas +++ b/mystic/mis_client_http.pas @@ -10,7 +10,7 @@ Uses SysUtils, m_Strings, m_FileIO, - m_Socket_Class, + m_io_Sockets, m_DateTime, MIS_Server, MIS_NodeData, @@ -19,7 +19,7 @@ Uses BBS_MsgBase_JAM, BBS_MsgBase_Squish; -Function CreateHTTP (Owner: TServerManager; Config: RecConfig; ND: TNodeData; CliSock: TSocketClass) : TServerClient; +Function CreateHTTP (Owner: TServerManager; Config: RecConfig; ND: TNodeData; CliSock: TIOSocket) : TServerClient; Type THTTPServer = Class(TServerClient) @@ -30,7 +30,7 @@ Type Cmd : String; Data : String; - Constructor Create (Owner: TServerManager; CliSock: TSocketClass); + Constructor Create (Owner: TServerManager; CliSock: TIOSocket); Procedure Execute; Override; Destructor Destroy; Override; @@ -39,12 +39,12 @@ Type Implementation -Function CreateHTTP (Owner: TServerManager; Config: RecConfig; ND: TNodeData; CliSock: TSocketClass) : TServerClient; +Function CreateHTTP (Owner: TServerManager; Config: RecConfig; ND: TNodeData; CliSock: TIOSocket) : TServerClient; Begin Result := THTTPServer.Create(Owner, CliSock); End; -Constructor THTTPServer.Create (Owner: TServerManager; CliSock: TSocketClass); +Constructor THTTPServer.Create (Owner: TServerManager; CliSock: TIOSocket); Begin Inherited Create(Owner, CliSock); @@ -83,6 +83,7 @@ Begin If Cmd = 'QUIT' Then Begin GotQuit := True; + Break; End Else Client.WriteLine(re_UnknownCommand); diff --git a/mystic/mkcrap.pas b/mystic/mkcrap.pas index ec67118..7f9a154 100644 --- a/mystic/mkcrap.pas +++ b/mystic/mkcrap.pas @@ -17,7 +17,6 @@ Function ToUnixDate (DosDate: LongInt): LongInt; Function DTToUnixDate (DT: DateTime): LongInt; Procedure UnixToDT (SecsPast: LongInt; Var Dt: DateTime); Procedure Str2Az (Str: String; MaxLen: Byte; Var AZStr); {Convert string to asciiz} -Function FormattedDate (DT: DateTime; Mask: String): String; Function LoadFilePos (FN: String; Var Rec; FS: Word; FPos: LongInt): Word; Function ExtendFile (FN: String; ToSize: LongInt): Word; Function SaveFilePos (FN: String; Var Rec; FS: Word; FPos: LongInt): Word; @@ -119,69 +118,6 @@ Begin End; End; -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; -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, '0'), 1, 2); - MinStr := Copy(strPadL(strI2S(Dt.Min), 2, '0'), 1, 2); - SecStr := Copy(strPadL(strI2S(Dt.Sec), 2, '0'), 1, 2); - MNStr := MonthString[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 F: File; diff --git a/mystic/mpl_common.pas b/mystic/mpl_common.pas index 64efc8b..3e9ff66 100644 --- a/mystic/mpl_common.pas +++ b/mystic/mpl_common.pas @@ -64,55 +64,63 @@ Procedure InitProcedures (O: Pointer; S: Pointer; Var CV: VarDataRec; Var X: Wor Procedure AddProc ({$IFDEF MPLPARSER} I: String; {$ENDIF} P: String; T: TIdentTypes); Begin - Inc(X); - New(CV[X]); + Inc (X); + New (CV[X]); With CV[X]^ Do Begin - VarID := IW; - Inc(IW); + VarID := IW; vType := T; - Move(P[1], Params, Ord(P[0])); - NumParams := Ord(p[0]); + ArrPos := 0; + + Move (P[1], Params, Ord(P[0])); + + NumParams := Ord(P[0]); + + Inc(IW); + {$IFNDEF MPLPARSER} VarSize := 0; DataSize := 0; Data := NIL; ProcPos := 0; Kill := True; + FillChar (pID, SizeOf(pID), 0); {$ELSE} Ident := I; InProc := False; Proc := True; {$ENDIF} - ArrPos := 0; End; End; Procedure AddStr ({$IFDEF MPLPARSER} I: String; {$ENDIF} T: TIdentTypes; SI: Word); Begin - Inc(X); - New(CV[X]); + Inc (X); + New (CV[X]); - With cV[x]^ Do Begin + With CV[X]^ Do Begin VarID := IW; - Inc(IW); - vType := T; + vType := T; NumParams := 0; + ArrPos := 0; + + Inc(IW); + {$IFNDEF MPLPARSER} + ProcPos := 0; + Kill := True; VarSize := SI + 1; DataSize := VarSize; + GetMem (Data, DataSize); FillChar (Data^, DataSize, 0); FillChar (pID, SizeOf(pID), 0); //cant we just assign it to 0 here? - ProcPos := 0; - Kill := True; {$ELSE} Ident := I; InProc := False; - Proc := False; + Proc := False; {$ENDIF} - ArrPos := 0; End; End; @@ -123,27 +131,31 @@ Procedure InitProcedures (O: Pointer; S: Pointer; Var CV: VarDataRec; Var X: Wor Procedure AddPointer ({$IFDEF MPLPARSER} I: String; {$ENDIF} T: TIdentTypes; SI: Word; PD: Pointer); Begin - Inc(x); - New(cV[x]); + Inc (X); + New (CV[X]); - With cV[x]^ Do Begin + With CV[X]^ Do Begin VarID := IW; - Inc(IW); - vType := t; + vType := T; NumParams := 0; + ArrPos := 0; + + Inc (IW); + {$IFNDEF MPLPARSER} If T = iString Then VarSize := SI + 1 Else VarSize := SI; + DataSize := VarSize; - Data := PD; + Data := PD; + ProcPos := 0; + Kill := False; + FillChar (pID, SizeOf(pID), 0); - ProcPos := 0; - Kill := False; {$ELSE} Ident := I; InProc := False; - Proc := False; + Proc := False; {$ENDIF} - ArrPos := 0; End; End; diff --git a/mystic/mplc.pas b/mystic/mplc.pas index 9051668..0d65d38 100644 --- a/mystic/mplc.pas +++ b/mystic/mplc.pas @@ -33,6 +33,7 @@ Uses Var SavedX : Byte; + SavedY : Byte; Console : TOutput; WasError : Boolean; @@ -72,15 +73,17 @@ Begin Else Begin If Pos('-ALL', strUpper(ParamStr(1))) > 0 Then Begin FindFirst ('*.mps', AnyFile - Directory - VolumeID, Dir); + While DosError = 0 Do Begin Parser := TParserEngine.Create(Status); - If Not Parser.Compile(Dir.Name) Then Begin - Parser.Free; - Break; - End; - FindNext(Dir); + + Parser.Compile(Dir.Name); + Parser.Free; + + FindNext(Dir); End; + FindClose(Dir); End Else Begin Parser := TParserEngine.Create(Status); diff --git a/mystic/mutil_echoexport.pas b/mystic/mutil_echoexport.pas index 3733d26..e9756f9 100644 --- a/mystic/mutil_echoexport.pas +++ b/mystic/mutil_echoexport.pas @@ -236,7 +236,7 @@ Var MH.OrigNet := MsgBase^.GetOrigAddr.Net; MH.DestNet := EchoNode.Address.Net; - TempStr1 := FormattedDate(DT, 'DD NNN YY HH:MM:SS') + #0; + TempStr1 := FormatDate(DT, 'DD NNN YY HH:II:SS') + #0; Move (TempStr1[1], MH.DateTime[0], 20); If MsgBase^.IsLocal Then MH.Attribute := MH.Attribute OR pktLocal; diff --git a/mystic/mutil_toplists.pas b/mystic/mutil_toplists.pas index c244b09..1482d90 100644 --- a/mystic/mutil_toplists.pas +++ b/mystic/mutil_toplists.pas @@ -159,7 +159,8 @@ Var Excluded : Boolean; SortMode : TSortMethod; Begin - Result := True; + Result := True; + FileMode := 66; Case ListType of TopCall : ProcessStatus('Top Callers', False); @@ -206,6 +207,7 @@ Begin If (strUpper(User.Handle) = Str) or (strUpper(User.RealName) = Str) Then Begin Excluded := True; + Break; End; End; diff --git a/mystic/nodespy_term.pas b/mystic/nodespy_term.pas index a4fe21c..43f4521 100644 --- a/mystic/nodespy_term.pas +++ b/mystic/nodespy_term.pas @@ -33,6 +33,7 @@ Uses Type PhoneRec = Record + Position : LongInt; Name : String[26]; Address : String[60]; User : String[30]; @@ -164,6 +165,7 @@ Begin Book[Count].StatusBar := INI.ReadString(strI2S(Count), 'statusbar', '1') = '1'; Book[Count].LastCall := INI.ReadString(strI2S(Count), 'last', ''); Book[Count].Calls := INI.ReadString(strI2S(Count), 'calls', ''); + Book[Count].Position := Count; End; INI.Free; @@ -704,18 +706,60 @@ Begin Screen.PutScreenImage(Image); End; -Procedure TelnetClient (Dial: PhoneRec); +Procedure EditEntry (Var Book: PhoneBookRec; Num: SmallInt); +Var + Box : TMenuBox; + Form : TMenuForm; + NewRec : PhoneRec; +Begin + NewRec := Book[Num]; + Box := TMenuBox.Create(TOutput(Screen)); + Form := TMenuForm.Create(TOutput(Screen)); - Procedure DrawStatus; + Box.HeadAttr := 1 + 7 * 16; + Box.Header := ' Book Editor '; + + Box.Open (17, 8, 63, 16); + + Form.HelpSize := 0; + + Form.AddStr ('N', ' Name' , 24, 10, 32, 10, 6, 26, 26, @NewRec.Name, ''); + Form.AddStr ('A', ' Address', 21, 11, 32, 11, 9, 30, 60, @NewRec.Address, ''); + Form.AddStr ('U', ' User Name', 19, 12, 32, 12, 11, 30, 30, @NewRec.User, ''); + Form.AddPass ('P', ' Password', 20, 13, 32, 13, 10, 20, 20, @NewRec.Password, ''); + Form.AddBol ('S', ' StatusBar', 19, 14, 32, 14, 11, 3, @NewRec.StatusBar, ''); + + Form.Execute; + + If Form.Changed Then + If ShowMsgBox(1, 'Save changes?') Then Begin + Book[Num] := NewRec; + WriteBook(Book); + End; + + Form.Free; + + Box.Close; + Box.Free; +End; + +Procedure TelnetClient (Var Book: PhoneBookRec; Dial: PhoneRec); + + Procedure DrawStatus (Toggle: Boolean); Begin If Dial.StatusBar Then Begin Screen.SetWindow (1, 1, 80, 24, False); - Screen.WriteXY (1, 25, Config.StatusColor3, strPadC('ALT/B-Scrollback ALT/L-Send Login ALT/T-Zmodem ALT-H/Hangup ALT-X/Quit', 80, ' ')); + Screen.WriteXY (1, 25, Config.StatusColor3, strPadC('ALT/B-Scrollback ALT/L-Send Login ALT/T-Zmodem ALT-E/Edit ALT-X/Quit', 80, ' ')); + End Else + If Toggle Then Begin + Screen.SetWindow (1, 1, 80, 25, False); + Screen.WriteXY (1, 25, 7, strRep(' ', 79)); End; End; Const BufferSize = 1024 * 4; + Var Client : TIOSocket; Res : LongInt; @@ -733,13 +777,20 @@ Begin If Not Client.Connect(StripAddressPort(Dial.Address), GetAddressPort(Dial.Address)) Then ShowMsgBox (0, 'Unable to connect') Else Begin + Book[Dial.Position].LastCall := DateDos2Str(CurDateDos, 1); + Book[Dial.Position].Calls := strI2S(strS2I(Dial.Calls) + 1); + + WriteBook(Book); + + Dial := Book[Dial.Position]; + Screen.TextAttr := 7; Screen.ClearScreen; Done := False; Term := TTermAnsi.Create(TOutput(Screen)); - DrawStatus; + DrawStatus(False); Term.SetReplyClient(TIOBase(Client)); @@ -748,8 +799,6 @@ Begin Res := Client.ReadBuf (Buffer, BufferSize); If Res < 0 Then Begin - ShowMsgBox (0, 'Connection terminated'); - Done := True; Break; @@ -785,13 +834,23 @@ Begin Case Ch of #00 : Case Keyboard.ReadKey of + #18 : Begin + EditEntry(Book, Dial.Position); + + If Dial.StatusBar <> Book[Dial.Position].StatusBar Then Begin + Dial := Book[Dial.Position]; + + DrawStatus (True); + End Else + Dial := Book[Dial.Position]; + End; #20 : Begin Case GetTransferType of 1 : DoZmodemDownload(TIOBase(Client)); 2 : DoZmodemUpload(TIOBase(Client)); End; - DrawStatus; + DrawStatus(False); End; #35 : Done := True; #38 : Begin @@ -801,7 +860,7 @@ Begin #45 : Break; #48 : Begin ActivateScrollBack; - DrawStatus; + DrawStatus(False); End; #71 : Client.WriteStr(#27 + '[H'); #72 : Client.WriteStr(#27 + '[A'); @@ -827,48 +886,12 @@ Begin Client.Free; + ShowMsgBox (0, 'Connection terminated'); + Screen.TextAttr := 7; Screen.SetWindow (1, 1, 80, 25, True); End; -Procedure EditEntry (Var Book: PhoneBookRec; Num: SmallInt); -Var - Box : TMenuBox; - Form : TMenuForm; - NewRec : PhoneRec; -Begin - NewRec := Book[Num]; - Box := TMenuBox.Create(TOutput(Screen)); - Form := TMenuForm.Create(TOutput(Screen)); - - Box.HeadAttr := 1 + 7 * 16; - Box.Header := ' Book Editor '; - - Box.Open (17, 8, 63, 16); - - Form.HelpSize := 0; - - Form.AddStr ('N', ' Name' , 24, 10, 32, 10, 6, 26, 26, @NewRec.Name, ''); - Form.AddStr ('A', ' Address', 21, 11, 32, 11, 9, 30, 60, @NewRec.Address, ''); - Form.AddStr ('U', ' User Name', 19, 12, 32, 12, 11, 30, 30, @NewRec.User, ''); - Form.AddPass ('P', ' Password', 20, 13, 32, 13, 10, 20, 20, @NewRec.Password, ''); - Form.AddBol ('S', ' StatusBar', 19, 14, 32, 14, 11, 3, @NewRec.StatusBar, ''); - - - Form.Execute; - - If Form.Changed Then - If ShowMsgBox(1, 'Save changes?') Then Begin - Book[Num] := NewRec; - WriteBook(Book); - End; - - Form.Free; - - Box.Close; - Box.Free; -End; - Procedure SearchEntry (Var Owner: Pointer; Str: String); Begin If Str = '' Then @@ -943,13 +966,6 @@ Begin #13 : If Book[List.Picked].Address = '' Then ShowMsgBox(0, 'Address is empty') Else Begin - With Book[List.Picked] Do Begin - LastCall := DateDos2Str(CurDateDos, 1); - Calls := strI2S(strS2I(Calls) + 1); - End; - - WriteBook(Book); - Dial := Book[List.Picked]; Result := True; @@ -1005,7 +1021,7 @@ Begin Repeat If Not GetTerminalEntry(Book, Dial) Then Break; - TelnetClient(Dial); + TelnetClient(Book, Dial); Until False; End; diff --git a/mystic/whatsnew.txt b/mystic/whatsnew.txt index 979c09d..ca1968a 100644 --- a/mystic/whatsnew.txt +++ b/mystic/whatsnew.txt @@ -3440,4 +3440,25 @@ + If the download directory doesn't exist when NodeSpy attempts a Zmodem download, it will now tell you instead of crashing. + + NodeSpy Terminal now allows the current connected phone book entry to be + edited while connected. This allows the password to be set, statusbar to + be turned on/off, etc. + + + NodeSpy Terminal now only updates the last call date and times called if + the connection was successful. + + + NodeSpy terminal now fully disconnects the session before displaying the + "connection terminated" box. + + + MPLC will now continue to attempt to compile subsequent MPL programs even + if one compilation fails. + + + Message Base QWK scan and regular scan settings now have the ability to + toggle ALL bases on or off at one time. An updated prompt goes along with + this: + + ; Message base new and qwk scan toggle prompt: + 095 Toggle: |09[|11#-#,#|09], Select [|11A|09]ll, [|11D|09]eselect All, [|11?|09/|11List|09]: |XX + +