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