123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- { Control stack
- CopyRight (C) 2004-2008 Ales Katona
- This library is Free software; you can rediStribute it and/or modify it
- under the terms of the GNU Library General Public License as published by
- the Free Software Foundation; either version 2 of the License, or (at your
- option) any later version.
- This program 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 Library General Public License
- for more details.
- You should have received a Copy of the GNU Library General Public License
- along with This library; if not, Write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- This license has been modified. See File LICENSE for more inFormation.
- Should you find these sources withOut a LICENSE File, please contact
- me at [email protected]
- }
- unit lControlStack;
- {$mode objfpc}
- interface
- const
- TL_CSLENGTH = 3;
- type
- TLOnFull = procedure of object;
-
- TLControlStack = class
- private
- FItems: array of Char;
- FIndex: Byte;
- FOnFull: TLOnFull;
- function GetFull: Boolean;
- function GetItem(const i: Byte): Char;
- procedure SetItem(const i: Byte; const Value: Char);
- public
- constructor Create;
- procedure Clear;
- procedure Push(const Value: Char);
- property ItemIndex: Byte read FIndex;
- property Items[i: Byte]: Char read GetItem write SetItem; default;
- property Full: Boolean read GetFull;
- property OnFull: TLOnFull read FOnFull write FOnFull;
- end;
- implementation
- uses
- lTelnet;
-
- constructor TLControlStack.Create;
- begin
- FOnFull:=nil;
- FIndex:=0;
- SetLength(FItems, TL_CSLENGTH);
- end;
- function TLControlStack.GetFull: Boolean;
- begin
- Result:=False;
- if FIndex >= TL_CSLENGTH then
- Result:=True;
- end;
- function TLControlStack.GetItem(const i: Byte): Char;
- begin
- Result:=TS_NOP;
- if i < TL_CSLENGTH then
- Result:=FItems[i];
- end;
- procedure TLControlStack.SetItem(const i: Byte; const Value: Char);
- begin
- if i < TL_CSLENGTH then
- FItems[i]:=Value;
- end;
- procedure TLControlStack.Clear;
- begin
- FIndex:=0;
- end;
- procedure TLControlStack.Push(const Value: Char);
- begin
- if FIndex < TL_CSLENGTH then begin
- FItems[FIndex]:=Value;
- Inc(FIndex);
- if Full and Assigned(FOnFull) then
- FOnFull;
- end;
- end;
- end.
|