-------------------------------------------------------------------------------------------------------------------------------------------------------------- -- Gnostic is Ada Generic Neural Object System Engineering. -- -- Gnostic (C) Copyright 2016 Manuel De Girardi. -- -------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------- -- Date := 2016-12-04 15:05:40 ;  -- Description : Ada Generic Neural Object System Engineering. -- -- Version := 2016.34.3a ;  -- Authors : Manuel De Girardi. -- -------------------------------------------------------------------------------------------------------------------------------------------------------------- with Gnat.Os_Lib; with Ada.Directories; use Ada.Directories; with Ada.Characters.Handling; use Ada.Characters.Handling; with Gnos.Versions; with Ada.Text_Io; with Ada.Directories; with ada.strings.fixed; use ada.strings.fixed; use ada.strings; package body Gnos.Versions.Environment is procedure Set_Date(Date : out Date_Type; To : in Calendar.Time) is begin Calendar.Split(To, Date.Year, Date.Month, Date.Day, Date.Hours); end Set_date; function Version_Reset return Integer is begin Versions.Version.Major_Version := Versions.Major_Version_Type'First; Versions.Version.Minor_Version := Versions.Minor_Version_Type'First; Versions.Version.Revision_Version := Versions.Revision_Version_Type'First; Versions.Version.Release_Version := 'a'; return 0; end Version_Reset; function Version_Update return Integer is begin --Set_date(Shared_Date, Calendar.Clock); if not New_Version then return 0; end if; -- Change major if is the current year > Major_Version. if Versions.Version.Major_Version < Calendar.Year(Calendar.Clock) then if Versions.Version.Major_Version + 1 < Major_Version_Type'Last then Versions.Version.Major_Version := Versions.Version.Major_Version + 1; Versions.Version.Minor_Version := 0; Versions.Version.Revision_Version := 0; else return -1; end if; end if; if New_Description or New_Action then Versions.Version.Release_Version := 'a'; elsif Versions.Version.Release_Version = 'a' then Versions.Version.Release_Version := 'b'; else return 0; end if; -- Change minor if some data description is modified or added. if New_Description then if Versions.Version.Minor_Version + 1 < Minor_Version_Type'Last then Versions.Version.Minor_Version := Versions.Version.Minor_Version + 1; Versions.Version.Revision_Version := 0; else return -1; end if; end if; -- Change minor if some function is modified or added. if New_Action then if Versions.Version.Revision_Version + 1 < Revision_Version_Type'Last then Versions.Version.Revision_Version := Versions.Version.Revision_Version + 1; else return -1; end if; end if; return 0; end Version_Update; procedure Set_Start_Time(Date : in Calendar.Time := Calendar.Clock) is begin Set_Date(Start_Date, Date); end Set_Start_Time; function Check_Modification_To_New_Description(Project_Context : in Projects_Context_Record) return Boolean is To_Be_Updated : Boolean := False; Buffer : Variadic_Access; Initialized : Boolean := False; begin for File_Id in 1..Project_Context.Project.Proj_Library.Unit_Index loop declare file_name : string := Project_Context.Project.Proj_Library.Library_Unit(File_Id).File_Name (1..index_non_blank(Project_Context.Project.Proj_Library.Library_Unit(File_Id).File_Name, backward)); begin if Extension(file_name) = "ads" then if Calendar.">"(Directories.Modification_Time(File_Name), Calendar.Time_Of(Start_Date.Year, Start_Date.Month, Start_Date.Day, Start_Date.Hours)) then Text_Io.Put_Line("Modified filename : " & File_Name); To_Be_Updated := True; if Initialized then Buffer := new Variadic_Array(1..(Specifications_Filenames_Search.File_Content'Length)+1); Buffer(Buffer'First..Buffer'Last-1) := Specifications_Filenames_Search.File_Content.all; Buffer(Buffer'Last) := (+(To_Wide_String(File_Name))); else Buffer := new Variadic_Array(1..1); Buffer(Buffer'Last) := (+(To_Wide_String(File_Name))); Initialized := True; end if; Free(Specifications_Filenames_Search.File_Content); Specifications_Filenames_Search.File_Content := new Variadic_Array ' (Buffer.all); Free(Buffer); end if; end if; end; end Loop; return To_Be_Updated; end; function Check_Modification_To_New_Action(Project_Context : in Projects_Context_Record) return Boolean is To_Be_Updated : Boolean := False; Buffer : Variadic_Access; Initialized : Boolean := False; begin for File_Id in 1..Project_Context.Project.Proj_Library.Unit_Index loop declare file_name : string := Project_Context.Project.Proj_Library.Library_Unit(File_Id).File_Name (1..index_non_blank(Project_Context.Project.Proj_Library.Library_Unit(File_Id).File_Name, backward)); begin if Extension(File_Name) = "adb" then if Calendar.">"(Directories.Modification_Time(File_Name), Calendar.Time_Of(Start_Date.Year, Start_Date.Month, Start_Date.Day, Start_Date.Hours)) then Text_Io.Put_Line("Modified filename : " & File_Name); To_Be_Updated := True; if Initialized then Buffer := new Variadic_Array(1..(Implementations_Filenames_Search.File_Content'Length)+1); Buffer(Buffer'First..Buffer'Last-1) := Implementations_Filenames_Search.File_Content.all; Buffer(Buffer'Last) := (+(To_Wide_String(File_Name))); else Buffer := new Variadic_Array(1..1); Buffer(Buffer'Last) := (+(To_Wide_String(File_Name))); Initialized := True; end if; Free(Implementations_Filenames_Search.File_Content); Implementations_Filenames_Search.File_Content := new Variadic_Array ' (Buffer.all); Free(Buffer); end if; end if; end; end Loop; return To_Be_Updated; end; end Gnos.versions.Environment;