with Cmvc_Implementation;
with Action;
with Table_Formatter;
with Io;
with Time_Utilities;
with Io;
with String_Utilities;
separate (Cm_Generic)
procedure Show_Info (For_Configuration : String := "<CURSOR>") is

    use Cmvc_Implementation;
    package It renames Iterator_Operations;
    package Su renames String_Utilities;
    package Tb is new Table_Formatter (6);
    Db     : Database;
    Error  : Error_Status;
    Config : Configuration;
    Iter   : Iterator_Operations.Element_Iterator;
    Set    : Version_Set;

    Baseline_Gen, Current_Gen : Generation;

    procedure Process (File : in out Io.File_Type) is
        Config_Path : constant String  := Io.Name (File);
        Dot         : constant Natural := Su.Reverse_Locate ('.', Config_Path);

        Cmvc_Database : constant String :=
           Config_Path (1 .. Dot) & "state.cmvc_database";

        Config_Name : constant String :=
           Config_Path (Dot + 1 .. Config_Path'Last);
    begin

        Database_Operations.Open (Cmvc_Database, Action.Null_Id, Db, Error);

        Configuration_Operations.Open (Config_Name, Config, Error, Db);

        Tb.Header ("Change");
        Tb.Header ("Module ");
        Tb.Header ("Baseline Gen");
        Tb.Header ("Last Gen");
        Tb.Header ("Source Library");
        Tb.Header ("Checked In By");

        Io.Put_Line (Time_Utilities.Image (Time_Utilities.Get_Time));
        Io.New_Line;

        It.Initialize (Config, Iter);
        while not It.Done (Iter) loop
            Version_Set_Operations.Open (It.Value (Iter), Set, Error, Config);

            Baseline_Gen := Generation_Operations.Generation_Of (Set, Config);
            Current_Gen  := Generation_Operations.Last_Generation_Of (Set);

            if Current_Gen /= Baseline_Gen then
                Tb.Item ("*");
            else
                Tb.Item (" ");
            end if;

            Tb.Item (Element_Operations.Name_Of (It.Value (Iter)));
            Tb.Item (Integer'Image (Baseline_Gen));
            Tb.Item (Integer'Image (Current_Gen));
            Tb.Item (Configuration_Operations.Name_Of (Config));
            Tb.Item (History_Operations.Who_Checked_In (Set));

            It.Next (Iter);
        end loop;

        Database_Operations.Close
           (Db => Db, Status => Error, Prevent_Commit => False);

        Tb.Sort (On_Field => 2);
        Tb.Display (Io.Standard_Output);




    end Process;

    procedure Show is new Io.Wildcard_Iterator (Process);
begin

    Show (For_Configuration);
end Show_Info;
