-- main is main file of main project written with Ada. -- Main is Copyright (C) 2025 Manuel De Girardi ;  -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation; either version 2 of the License, or -- (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software -- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA -- -- Date := 2025-07-25 08:23:49 ;  -- Version := 0.4.0r ;  with Ada.Containers.Vectors; use Ada.Containers; with M.Ansi.Windows; with Ada.Calendar; use Ada.Calendar; with M.Strings; use M.Strings; with Ada.Wide_Text_Io; with M.Attributes; use M.Attributes; generic with package My_Windows is new M.Ansi.Windows (<>); package M.Engine is use My_Windows; package W_Io renames Ada.Wide_Text_Io; type Element_Index is new Positive; type Element_Class(Tag : Element_Enum); type Element_Access is access all Element_Class'Class; procedure Obj_Free(O : in out Element_Access); function Same (Left, Right : in Element_Access) return Boolean; package Element_Vectors is new Vectors (Element_Index, Element_Access, Same); type Element_Info(Tag : Element_Enum) is record Index : Element_Index := 1; Name : Wide_String_Access; Created : Time := Time_Of(1970, 1, 1, 0.0); Childs_Num : Natural := 0; end record; type Wide_Set_Access is access all Wide_String_Set; type Element_Class(Tag : Element_Enum) is abstract tagged record Info : Element_Info(Tag); Childs : Element_Vectors.Vector; Definition : Attributs(10); case Tag is when None => null; when License => License : Wide_Set_Access; when others => Line : Wide_String_Access; end case; end record; procedure Print (Info : Element_Info; header : in Window_Type); procedure Print (Obj : in Element_Class; Header : in Window_Type; Win : in Window_Type) is abstract; procedure Write (O : in Element_Class;File : in W_Io.File_Type) is abstract; procedure Read (O : out Element_Class;File : in W_Io.File_Type) is abstract; procedure Print (Attr : in Attributs; Win : in Window_type); type None_Class is new Element_Class(None) with null record; procedure Print (Obj : in None_Class; Header : in Window_Type; Win : in Window_Type); procedure Write (O : in None_Class;File : in W_Io.File_Type); procedure Read (O : out None_Class;File : in W_Io.File_Type); type Program_Class is new Element_Class(Program) with null record; procedure Print (Obj : in Program_Class; Header : in Window_Type; Win : in Window_Type); procedure Write (O : in Program_Class;File : in W_Io.File_Type); procedure Read (O : out Program_Class;File : in W_Io.File_Type); type Description_Class is new Element_Class(Description) with null record; procedure Print (Obj : in Description_Class; Header : in Window_Type; Win : in Window_Type); procedure Write (O : in Description_Class;File : in W_Io.File_Type); procedure Read (O : out Description_Class;File : in W_Io.File_Type); type License_Class is new Element_Class(License) with null record; procedure Print (Obj : in License_Class; Header : in Window_Type; Win : in Window_Type); procedure Write (O : in License_Class;File : in W_Io.File_Type); procedure Read (O : out License_Class;File : in W_Io.File_Type); type Main_Class is new Element_Class(Main) with null record; procedure Print (Obj : in Main_Class; Header : in Window_Type; Win : in Window_Type); procedure Write (O : in Main_Class;File : in W_Io.File_Type); procedure Read (O : out Main_Class;File : in W_Io.File_Type); type Library_Class is new Element_Class(Library) with null record; procedure Print (Obj : in Library_Class; Header : in Window_Type; Win : in Window_Type); procedure Write (O : in Library_Class;File : in W_Io.File_Type); procedure Read (O : out Library_Class;File : in W_Io.File_Type); type Axiomatic_Class is new Element_Class(Axiomatic) with null record; procedure Print (Obj : in Axiomatic_Class; Header : in Window_Type; Win : in Window_Type); procedure Write (O : in Axiomatic_Class;File : in W_Io.File_Type); procedure Read (O : out Axiomatic_Class;File : in W_Io.File_Type); type Axiom_Class is new Element_Class(Axiom) with null record; procedure Print (Obj : in Axiom_Class; Header : in Window_Type; Win : in Window_Type); procedure Write (O : in Axiom_Class;File : in W_Io.File_Type); procedure Read (O : out Axiom_Class;File : in W_Io.File_Type); type Predicate_Class is new Element_Class(Predicate) with null record; procedure Print (Obj : in Predicate_Class; Header : in Window_Type; Win : in Window_Type); procedure Write (O : in Predicate_Class;File : in W_Io.File_Type); procedure Read (O : out Predicate_Class;File : in W_Io.File_Type); type Precondition_Class is new Element_Class(Precondition) with null record; procedure Print (Obj : in Precondition_Class; Header : in Window_Type; Win : in Window_Type); procedure Write (O : in Precondition_Class;File : in W_Io.File_Type); procedure Read (O : out Precondition_Class;File : in W_Io.File_Type); type Condition_Class is new Element_Class(Condition) with null record; procedure Print (Obj : in Condition_Class; Header : in Window_Type; Win : in Window_Type); procedure Write (O : in Condition_Class;File : in W_Io.File_Type); procedure Read (O : out Condition_Class;File : in W_Io.File_Type); type Component_Class is new Element_Class(Component) with null record; procedure Print (Obj : in Component_Class; Header : in Window_Type; Win : in Window_Type); procedure Write (O : in Component_Class;File : in W_Io.File_Type); procedure Read (O : out Component_Class;File : in W_Io.File_Type); type Action_Class is new Element_Class(Action) with null record; procedure Print (Obj : in Action_Class; Header : in Window_Type; Win : in Window_Type); procedure Write (O : in Action_Class;File : in W_Io.File_Type); procedure Read (O : out Action_Class;File : in W_Io.File_Type); type Class_Class is new Element_Class(Class) with null record; procedure Print (Obj : in Class_Class; Header : in Window_Type; Win : in Window_Type); procedure Write (O : in Class_Class;File : in W_Io.File_Type); procedure Read (O : out Class_Class;File : in W_Io.File_Type); type Machine_Class is new Element_Class(Class) with null record; procedure Print (Obj : in Machine_Class; Header : in Window_Type; Win : in Window_Type); procedure Write (O : in Machine_Class;File : in W_Io.File_Type); procedure Read (O : out Machine_Class;File : in W_Io.File_Type); type System_Class is new Element_Class(Class) with null record; procedure Print (Obj : in System_Class; Header : in Window_Type; Win : in Window_Type); procedure Write (O : in System_Class;File : in W_Io.File_Type); procedure Read (O : out System_Class;File : in W_Io.File_Type); end M.Engine ;