// ==================================================================== // Mystic BBS Software Copyright 1997-2013 By James Coyle // ==================================================================== // // This file is part of Mystic BBS. // // Mystic BBS is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Mystic BBS is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Mystic BBS. If not, see . // // ==================================================================== Program TEST5; Uses m_Types, m_Input, m_Output, m_Socket_Class, m_DateTime, m_Term_Ansi, m_Strings; Var Input : TInput; Output : TOutput; Client : TSocketClass; Term : TTermAnsi; Procedure Init; Begin Input := TInput.Create; Output := TOutput.Create(True); Client := TSocketClass.Create; Term := TTermAnsi.Create(Output); End; Procedure Cleanup; Begin Client.Free; Term.Free; Output.Free; Input.Free; End; Var Ch : Char; Res : LongInt; Buf : Array[1..1024] of Char; Done : Boolean; Image : TConsoleImageRec; Begin Init; If ParamCount <> 2 Then Begin Output.WriteLine('Invalid options: test5 [address] [port]'); Cleanup; Halt; End; Output.WriteStr ('Connecting to: ' + ParamStr(1) + ':' + ParamStr(2) + '. '); If Not Client.Connect(ParamStr(1), strS2I(ParamStr(2))) Then Begin Output.WriteLine('Unable to connect'); Cleanup; Halt; End; Output.WriteLine('Connected!'); Output.SetWindowTitle('MDL Terminal Demo'); Client.SetBlocking(False); Term.SetReplyClient(Client); Output.TextAttr := 7; Output.ClearScreen(); Output.WriteXYPipe (1, 25, 15 + 1 * 16, 79, ' MDL Terminal Demo '); Output.SetWindow(1, 1, 80, 24, True); Done := False; Repeat If Input.KeyPressed Then Begin Ch := Input.ReadKey; Case Ch of #00 : Case Input.ReadKey of #45 : Break; #71 : Client.WriteStr(#27 + '[H'); #72 : Client.WriteStr(#27 + '[A'); #73 : Client.WriteStr(#18); #75 : Client.WriteStr(#27 + '[D'); #77 : Client.WriteStr(#27 + '[C'); #79 : Client.WriteStr(#27 + '[K'); #80 : Client.WriteStr(#27 + '[B'); #81 : Client.WriteStr(#3); #83 : Client.WriteStr(#127); #34 : Begin Output.GetScreenImage(1, 1, 80, 25, Image); End; #25 : Begin Output.ClearScreen; Output.PutScreenImage(Image); End; ^C : Break; End; End; Client.WriteBuf(Ch, 1); End Else If Client.WaitForData(10) > 0 Then Begin Repeat Res := Client.ReadBuf(Buf, SizeOf(Buf)); If Res < 0 Then Begin Done := True; Break; End; Term.ProcessBuf(Buf[1], Res); Until Res <> SizeOf(Buf); End Else WaitMS(10); Until Done; Output.WriteLine(''); Output.WriteLine('Connection terminated.'); Output.SetWindow(1, 1, 80, 25, False); Cleanup; End.