Files
bds.mr.jtg/src.jtag/svf/jtag.svfProgram.pas
T
2026-01-08 19:12:06 +01:00

156 lines
4.8 KiB
ObjectPascal

unit jtag.svfProgram;
interface
uses
jtag.svfAstNode,
System.Contnrs;
const
stRESET = 0;
stIDLE = 1;
stDRSELECT = 2;
stDRCAPTURE = 3;
stDRSHIFT = 4;
stDRPAUSE = 5;
stDREXIT1 = 6;
stDREXIT2 = 7;
stDRUPDATE = 8;
stIRSELECT = 9;
stIRCAPTURE = 10;
stIRSHIFT = 11;
stIRPAUSE = 12;
stIREXIT1 = 13;
stIREXIT2 = 14;
stIRUPDATE = 15;
stNONDEF = $ff;
type
TsvfProgram = class
private
fStatements : TObjectList;
function GetStatementCount : integer;
function GetStatement(i: integer): TsvfAstNode;
public
procedure AddStatement( Stmt: TsvfAstNode);
public
constructor Create;
destructor Destroy; override;
procedure Dump( FileName: string);
public
property StatementCount : integer read GetStatementCount;
property Statements[i: integer] : TsvfAstNode read GetStatement;
end;
implementation
uses
System.Classes;
{ TsvfProgram }
// @@@: Constructor/destructor ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//
// Constructor/destructor
//
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// ======================================================================================
// Constructor
// ======================================================================================
constructor TsvfProgram.Create;
begin
inherited;
fStatements := TObjectList.Create( true);
end;
// ======================================================================================
// Destructor
// ======================================================================================
destructor TsvfProgram.Destroy;
begin
fStatements.Free;
inherited;
end;
// @@@: Interface +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//
// Interface
//
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// ======================================================================================
// AddStatement
// ======================================================================================
procedure TsvfProgram.AddStatement(Stmt: TsvfAstNode);
begin
fStatements.Add( Stmt);
end;
// ================================================================================================
// Dump
// ================================================================================================
procedure TsvfProgram.Dump(FileName: string);
var
i : integer;
s : AnsiString;
stm : TMemoryStream;
begin
stm := TMemoryStream.Create;
for i:=0 to StatementCount -1 do
begin
s := Statements[i].AsText;
stm.Write(s[1], Length(s));
end;
stm.SaveToFile(FileName);
stm.Free
end;
// @@@: Property Handlers +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//
// Property Handlers
//
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// ======================================================================================
// GetStatementCount
// ======================================================================================
function TsvfProgram.GetStatementCount: integer;
begin
result := fStatements.Count;
end;
// ======================================================================================
// GetStatement
// ======================================================================================
function TsvfProgram.GetStatement(i: integer): TsvfAstNode;
begin
if (i>=0) and (i<fStatements.Count)
then result := fStatements[i] as TsvfAstNode
else result := nil
end;
end.