User to user private chat (line mode) completed
This commit is contained in:
parent
645be03667
commit
b7579bd5a7
|
@ -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;
|
||||
InRemote : Byte;
|
||||
|
||||
Procedure LineChat;
|
||||
Begin
|
||||
Session.io.OutFullLn('|CR|15Chat mode begin.|CR');
|
||||
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(Session.GetPrompt(483));
|
||||
|
||||
Assign (fOut, Config.DataPath + 'userchat.' + strI2S(ToNode));
|
||||
Assign (fIn, Config.DataPath + 'userchat.' + strI2S(Session.NodeNum));
|
||||
|
@ -74,50 +136,9 @@ Begin
|
|||
ReWrite (fOut, 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.
|
||||
|
|
Loading…
Reference in New Issue