separate (Check_Consistency)
procedure Check_Catalog_Node
             (This_Catalog : in Structure.Catalog;
              This_State : in out State;
              Control_Result : out Structure.Traversal_Control) is
begin
    Log.Put_Line ("Checking catalog node """ &
                  Structure.Name_Of (This_Catalog) & """",
                  Profile.Auxiliary_Msg);
    Consistency.Assert_Catalogs_Match
       (This_Catalog, Lines.Image (This_State.Catalog_Objective));
    Consistency.Assert_Versions_Match (This_Catalog,
                                       Lines.Image (This_State.Version));
    Consistency.Assert_Is_Simple_World (This_Catalog);
    if (Located_Objective (This_Catalog, This_State)) then
        Report_Objective_Located (This_State);
    end if;
    Control_Result := Structure.Continue;  
    Log.Put_Line ("Catalog node checked", Profile.Positive_Msg);
    --
exception
    when Consistency.Catalog_Mismatch =>
        Report
           ("Catalog name in data file and catalog library names do not match",
            This_State);
        Control_Result := Structure.Abandon_Traversal;
        --
    when Consistency.Version_Mismatch =>
        Report ("Version in data file and version library names do not match",
                This_State);
        Control_Result := Structure.Abandon_Traversal;
        --
    when Consistency.No_Such_Catalog =>
        Report ("Unable to resolve catalog", This_State);  
        Control_Result := Structure.Abandon_Traversal;
        --
    when Consistency.Not_A_Simple_World =>
        Report ("Catalog is not a simple world", This_State);  
        Control_Result := Structure.Abandon_Traversal;
        --
end Check_Catalog_Node;