anchor.diff:  
   Operator = (ARect: TRect; BRect: TRect): boolean;
   
  +// Destroy the objects stored in List and clear the list.
  +Procedure ClearListAndObjects( List: TList );
  +// Destroy the objects stored in the list and then destroy the list itself
  +// And set the reference to nil
  +Procedure DestroyListAndObjects( Var List: TList );
  +// Destroy the objects stored in the list.
  +// You probably want to use one of the two functions above.
  +Procedure DestroyListObjects( List: TList );
  +
  +Procedure AddList( Source, Dest: TList );
  +Procedure AssignList( Source, Dest: TList );
  +
  +
  +
  +var
  +  startTime : Cardinal;
  +  lastTime : Cardinal;
  +  activeLogAspects : LogAspects;
  +  infoMessage1 : String;
  +  infoMessage2 : String;
  +
   
   implementation
   
   uses
     fpg_utils
  +  ,fpg_main
  +  ,ACLStringUtility
     ;
   //  character // from utf8tools package (pulls in LCL requirement which we MUST change)
   //  ;
   
  +  Function GetAspectPrefix(const aLogAspect: LogAspect): String;
  +  Begin
  +    Case aLogAspect of
  +      LogStartup      : result := 'Startup';
  +      LogShutdown     : result := 'Start';
  +      LogSettings     : result := 'Settings';
  +      LogI18n         : result := 'I18n';
  +      LogParse        : result := 'Parse';
  +      LogDisplay      : result := 'Display';
  +      LogSearch       : result := 'Search';
  +      LogNHM          : result := 'NewHelpManager';
  +      LogViewStub     : result := 'ViewStub';
  +      LogObjConstDest : result := 'ObjConstDest';
  +      LogDebug        : result := 'Debug';
  +      else              result := 'Unknown';
  +      end;
  +  End;
  +
  +
  +  Procedure SetLogAspects(const aCommaSeparatedListOfAspectNames : String);
  +  Var
  +    tmpAspects : TStringList;
  +    i : Integer;
  +  Begin
  +    tmpAspects := TStringList.Create;
  +    StrExtractStrings(tmpAspects, aCommaSeparatedListOfAspectNames, [','], #0);
  +
  +    for i:=0 to tmpAspects.count-1 do
  +    begin
  +      if tmpAspects[i] = 'LogStartup'      then activeLogAspects := activeLogAspects + [ LogStartup ];
  +      if tmpAspects[i] = 'LogShutdown'     then activeLogAspects := activeLogAspects + [ LogShutdown ];
  +      if tmpAspects[i] = 'LogSettings'     then activeLogAspects := activeLogAspects + [ LogSettings ];
  +      if tmpAspects[i] = 'LogI18n'         then activeLogAspects := activeLogAspects + [ LogI18n ];
  +      if tmpAspects[i] = 'LogParse'        then activeLogAspects := activeLogAspects + [ LogParse ];
  +      if tmpAspects[i] = 'LogDisplay'      then activeLogAspects := activeLogAspects + [ LogDisplay ];
  +      if tmpAspects[i] = 'LogSearch'       then activeLogAspects := activeLogAspects + [ LogSearch ];
  +      if tmpAspects[i] = 'LogNHM'          then activeLogAspects := activeLogAspects + [ LogNHM ];
  +      if tmpAspects[i] = 'LogViewStub'     then activeLogAspects := activeLogAspects + [ LogViewStub ];
  +      if tmpAspects[i] = 'LogObjConstDest' then activeLogAspects := activeLogAspects + [ LogObjConstDest ];
  +      if tmpAspects[i] = 'LogDebug'        then activeLogAspects := activeLogAspects + [ LogDebug ];
  +    end;
  +
  +    tmpAspects.Destroy;
  +  End;
  +
  +procedure LogEvent(const aLogAspect: LogAspect; const anEventDescription: String);
  +var
  +  tmpMessage: String;
  +begin
  +  if (aLogAspect IN activeLogAspects) then
  +  begin
  +    tmpMessage := 'Log[' + GetAspectPrefix(aLogAspect) + ']  ' + anEventDescription;
  +    debugln(tmpMessage);
  +  end;
  +end;
   
   Function ExtractNextValue( var S: string;
                              const Separator: string ): string;
  
positive.code:   Quote = '''';
    DoubleQuote = '"';
  
  
  // Removes and returns the first value in a separated
  // value list (removes quotes if found)
  
negative.code:              (ARect.Right = BRect.Right);
  end;
  
  // Destroy the objects stored in List
  // and clear the list.
  Procedure ClearListAndObjects( List: TList );
  begin
    DestroyListObjects( List );
    List.Clear;
  end;
  
  // Destroy the objects stored in the list
  // and then destroy the list itself.
  Procedure DestroyListAndObjects( Var List: TList );
  begin
    if not Assigned( List ) then
      exit;
  
    DestroyListObjects( List );
    List.Free;
    List := nil;
  end;
  
  Procedure DestroyListObjects( List: TList );
  var
    Index: longint;
  begin
    for Index := 0 to List.Count - 1 do
    begin
      if List[ Index ] <> nil then
      begin
        TObject( List[ Index ] ).Free;
        List[ Index ] := nil;
      end;
    end;
  end;
  
  Procedure AddList( Source, Dest: TList );
  var
    i: longint;
  begin
    // expand the destination list to what's required
    Dest.Capacity := Dest.Capacity + Source.Capacity;
    for i:= 0 to Source.Count - 1 do
      Dest.Add( Source[ i ] );
  end;
  
  Procedure AssignList( Source, Dest: TList );
  begin
    Dest.Clear;
    AddList( Source, Dest );
  end;
  
  
  
  end.
  
  