source: branches/bigint/Console.pas

Last change on this file was 2, checked in by chronos, 3 months ago
File size: 1.2 KB
Line 
1unit Console;
2
3interface
4
5uses
6 Classes, SysUtils, Device, Int;
7
8type
9
10 { TConsole }
11
12 TConsole = class(TDevice)
13 private
14 FOnRead: TNotifyEvent;
15 FOnWrite: TNotifyEvent;
16 procedure WriteChar(Data: TInt);
17 function ReadChar: TInt;
18 function ReadInputBufferSize: TInt;
19 public
20 InputBuffer: string;
21 OutputBuffer: string;
22 function GetHandlers: THandlers; override;
23 property OnWrite: TNotifyEvent read FOnWrite write FOnWrite;
24 property OnRead: TNotifyEvent read FOnRead write FOnRead;
25 end;
26
27
28implementation
29
30{ TConsole }
31
32function TConsole.GetHandlers: THandlers;
33begin
34 Result := THandlers.Create;
35 Result.ReadHandlers.Add(ReadChar);
36 Result.ReadHandlers.Add(ReadInputBufferSize);
37 Result.WriteHandlers.Add(WriteChar);
38end;
39
40procedure TConsole.WriteChar(Data: TInt);
41begin
42 OutputBuffer := OutputBuffer + Chr(Data);
43 if Assigned(FOnWrite) then FOnWrite(Self);
44end;
45
46function TConsole.ReadChar: TInt;
47begin
48 if Length(InputBuffer) > 0 then begin
49 Result := Ord(InputBuffer[1]);
50 Delete(InputBuffer, 1, 1);
51 end else Result := 0;
52end;
53
54function TConsole.ReadInputBufferSize: TInt;
55begin
56 Result := Length(InputBuffer);
57end;
58
59end.
60
Note: See TracBrowser for help on using the repository browser.