diff --git a/mystic/bbs_userchat.pas b/mystic/bbs_userchat.pas index 19351c9..6bfd02d 100644 --- a/mystic/bbs_userchat.pas +++ b/mystic/bbs_userchat.pas @@ -5,7 +5,7 @@ Unit bbs_UserChat; Interface Procedure PageUserForChat; -Procedure OpenUserChat (Forced: Boolean; ToNode: Byte); +Procedure OpenUserChat (Split, Forced: Boolean; ToNode: Byte); Implementation @@ -25,7 +25,7 @@ Var TempChat : ChatRec; Begin Repeat - Session.io.OutFull ('|CR|09Enter node to chat with |01[|10?|01/|10List|01]|09: '); + Session.io.OutFull (Session.GetPrompt(479)); Str := Session.io.GetInput(3, 3, 12, ''); @@ -37,34 +37,96 @@ Begin If (Not GetChatRecord(ToNode, TempChat)) or (ToNode = Session.NodeNum) or (Not TempChat.Active) or (Not TempChat.Available) Then Begin - Session.io.OutFull('|CR|15That user is marked unavailable.|CR|CR|PA'); + Session.io.OutFull(Session.GetPrompt(480)); Exit; End; If Session.User.Access(Config.ACSSysop) Then - If Session.io.GetYN('|CR|12Force user into chat? ', False) Then + If Session.io.GetYN(Session.GetPrompt(481), False) Then ReqType := 9; FileErase (Config.DataPath + 'userchat.' + strI2S(ToNode)); FileErase (Config.DataPath + 'userchat.' + strI2S(Session.NodeNum)); Session.io.PromptInfo[1] := TempChat.Name; + Session.io.PromptInfo[2] := strI2S(ToNode); - Session.io.OutFull('|CR|15Sending chat request to |&1...|DE|DE|CR'); + Session.io.OutFull(Session.GetPrompt(482)); - Send_Node_Message (ReqType, strI2S(ToNode) + ';C' + Str, 0); + Send_Node_Message (ReqType, strI2S(ToNode) + ';' + strI2S(Session.io.Graphics), 0); End; -Procedure OpenUserChat (Forced: Boolean; ToNode: Byte); +Procedure OpenUserChat (Split, Forced: Boolean; ToNode: Byte); Var - fOut : File; - fIn : File; - Ch : Char; - Str1 : String = ''; - Str2 : String = ''; - Done : Boolean = False; + fOut : File; + fIn : File; + Ch : Char; + Str1 : String = ''; + Str2 : String = ''; + InRemote : Byte; + + Procedure LineChat; + Begin + Session.io.BufFlush; + + Repeat + If Not Eof(fIn) Then Begin + BlockRead (fIn, Ch, 1); + + If Ch = #255 Then Break; + + InRemote := 1; + + Session.io.AnsiColor (Session.Lang.LineChat1); + End Else Begin + Ch := Session.io.InKey(200); + + If Ch = #255 Then Continue; + + Session.io.AnsiColor (Session.Lang.LineChat2); + + BlockWrite (fOut, Ch, 1); + + InRemote := 0; + End; + + Case Ch of + #08 : If Length(Str1) > 0 Then Begin + Session.io.OutBS(1, True); + Dec (Str1[0]); + End; + #10 : ; + #13 : Begin + Str1 := ''; + Session.io.OutRawLn(''); + End; + #27 : If Not Forced And (InRemote = 0) Then Begin + Ch := #255; + BlockWrite(fOut, Ch, 1); + Break; + End; + Else + Str1 := Str1 + Ch; + + If Length(Str1) > 79 Then Begin + strWrap(Str1, Str2, 79); + + Session.io.OutBS(Length(Str2), True); + Session.io.OutRawLn(''); + + Str1 := Str2; + + Session.io.OutRaw(Str1); + End Else + Session.io.OutRaw(Ch); + End; + + Session.io.BufFlush; + Until False; + End; + Begin - Session.io.OutFullLn('|CR|15Chat mode begin.|CR'); + Session.io.OutFullLn(Session.GetPrompt(483)); Assign (fOut, Config.DataPath + 'userchat.' + strI2S(ToNode)); Assign (fIn, Config.DataPath + 'userchat.' + strI2S(Session.NodeNum)); @@ -72,52 +134,11 @@ Begin FileMode := 66; ReWrite (fOut, 1); - ReWrite (fIn, 1); + ReWrite (fIn, 1); - While Not Done Do Begin - If Not Eof(fIn) Then - While Not Eof(fIn) Do Begin - BlockRead (fIn, Ch, 1); - - If Ch = #255 Then Begin - Done := True; - Break; - End; - - Session.io.AnsiColor (Session.Lang.LineChat2); - Session.io.BufAddChar (Ch); - End; - - Session.io.BufFlush; - - If Done Then Break; - - Ch := Session.io.InKey(25); - - Case Ch of - #08 : If Screen.CursorX > 1 Then Begin - Str2 := #8#32#8; - BlockWrite (fOut, Str2[1], 3); - Session.io.OutBS(1, True); - End; - #13 : Begin - Str2 := #13#10; - BlockWrite (fOut, Str2[1], 2); - Session.io.OutRawLn(''); - End; - #27 : If Not Forced Then Begin - Ch := #255; - BlockWrite (fOut, Ch, 1); - Break; - End; - Else - If Ch in [#32..#254] Then Begin - BlockWrite (fOut, Ch, 1); - - Session.io.AnsiColor (Session.Lang.LineChat1); - Session.io.BufAddChar (Ch); - End; - End; + Case Split of + False : LineChat; + True : LineChat; End; Close(fOut); @@ -126,7 +147,7 @@ Begin Erase(fOut); Erase(fIn); - Session.io.OutFullLn('|CR|CR|15Chat mode complete.|DE|DE|DE'); + Session.io.OutFullLn(Session.GetPrompt(484)); End; End.