oft House Labs

Product PasDiff 1.0
Author Copyright (c) 1999, Soft House Labs, Andre N Belokon
Web:   http://softlab.od.ua
Email: support@softlab.od.ua
Status Freeware
THIS SOFTWARE AND THE ACCOMPANYING FILES ARE DISTRIBUTED "AS IS" AND WITHOUT WARRANTIES AS TO PERFORMANCE OF MERCHANTABILITY OR ANY OTHER WARRANTIES WHETHER EXPRESSED OR IMPLIED. NO WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE IS OFFERED.

PasDiff is the syntax oriented diff tools. It compare two delphi source file and report all changes. Skip comments. Insensitive to change comments, cases and reformat sources (add/remove spaces or/and empty lines).

Sample compare of two source file:

File1 - old version File 2 - new version

unit Unit1;

interface

type
  ShortName = string[20];
  TEmployee = class
  private
    FFirstName: ShortName;
    FLastName: ShortName;
    FParentList: TList;
    procedure SetFirstName(const Value: ShortName);
    procedure SetLastName(const Value: ShortName);
  published
    property FirstName: ShortName
      read FFirstName write SetFirstName;
    property LastName: ShortName 
      read FLastName write SetLastName;
    property ParentList: TList read FParentList;
  end;

var
  RootEmployee: TEmployee;
  
implementation

{ TEmployee }

procedure TEmployee.SetFirstName(
    const Value: ShortName);
begin
  FFirstName := Value;
end;

procedure TEmployee.SetLastName(
    const Value: ShortName);
begin
  FLastName := Value;
end;

end.

unit Unit1;

interface

type
  ShortName = string[32];
  TEmployee = class(TPersistent)
  private
    FLock: integer;
    FFirstName: ShortName;
    FLastName: ShortName;
    FParentList: TList;
    FLastWork: string;
    procedure SetFirstName(const Value: ShortName);
    procedure SetLastName(const Value: ShortName);
    procedure SetLastWork(const Value: string);
    function GetLock: Boolean;
  public
    constructor Create; override;
    destructor Destroy; override;
    procedure Lock;
    procedure Unlock;
    property Locked: Boolean read GetLock;
  published
    property FirstName: ShortName
      read FFirstName write SetFirstName;
    property LastName: ShortName 
      read FLastName write SetLastName;
    property LastWork: string 
      read FLastWork write SetLastWork;
    property ParentList: TList read FParentList;
  end;

var
  RootEmployee: TEmployee = nil;

implementation

const
  UnknownWork = 'N/A';
  
{ TEmployee }

constructor TEmployee.Create;
begin
  FLock:=0;
  FFirstName:='';
  FLastName:='';
  FParentList:=TList.Create;
  FLastWork:=UnknownWork;
end;

destructor TEmployee.Destroy;
begin
  FParentList.Free;
end;

function TEmployee.GetLock: Boolean;
begin
  Result:=FLock > 0;
end;

procedure TEmployee.Lock;
begin
  Inc(FLock);
end;

procedure TEmployee.SetFirstName(
    const Value: ShortName);
begin
  FFirstName := Value;
end;

procedure TEmployee.SetLastName(
    const Value: ShortName);
begin
  FLastName := Value;
end;

procedure TEmployee.SetLastWork(
    const Value: string);
begin
  FLastWork := Value;
end;

procedure TEmployee.Unlock;
begin
  Dec(FLock);
end;

initialization
finalization
  if RootEmployee <> nil then
    RootEmployee.Free;
end.

Result of comparisons:

Legend:  +  added
-  removed
F  field
M  method
P  property

PasDiff ver. 1.0

Copyright (c) Soft House Labs, Andre N Belokon, Feb 1999
Web:   http://softlab.od.ua
Email: support@softlab.od.ua

>>> Type
* ShortName
  - string[20]
  + string[32]
>>> Class/Interface
* TEmployee
  *I () -> (TPersistent)
  +F FLastWork: string;
  +F FLock: integer;
  +M constructor Create; override
  +M destructor Destroy; override
  +M function GetLock: Boolean
  +M procedure Lock
  +M procedure SetLastWork(const Value: string)
  +M procedure Unlock
  +P property LastWork: string read FLastWork write SetLastWork;
  +P property Locked: Boolean read GetLock;
>>> Variable
* RootEmployee - change init value
>>> Constant
+ UnknownWork: 
>>> Other
* finalization change

More complex sample. Here you can see compare result for source files in Source\Vcl between Delphi4v5.33 and Delphi4v5.37+UpdatePack1,2,3.