------------------------------------------------------------------------------ ------------------------------------------------------------------------------ -- Cheddar is a GNU GPL real-time scheduling analysis tool. -- This program provides services to automatically check schedulability and -- other performance criteria of real-time architecture models. -- -- Copyright (C) 2002-2016, Frank Singhoff, Alain Plantec, Jerome Legrand -- -- The Cheddar project was started in 2002 by -- Frank Singhoff, Lab-STICC UMR 6285 laboratory, Université de Bretagne Occidentale -- -- Cheddar has been published in the "Agence de Protection des Programmes/France" in 2008. -- Since 2008, Ellidiss technologies also contributes to the development of -- Cheddar and provides industrial support. -- -- The full list of contributors and sponsors can be found in AUTHORS.txt and SPONSORS.txt -- -- 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 -- -- -- Contact : cheddar@listes.univ-brest.fr -- ------------------------------------------------------------------------------ -- Last update : -- $Rev: 1249 $ -- $Date: 2014-08-28 07:02:15 +0200 (Fri, 28 Aug 2014) $ -- $Author: singhoff $ ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ with Gtk.Main; with Gtk.Tooltip; with Ada.Direct_IO; with Ada.Exceptions; use Ada.Exceptions; with Ada.Text_IO; use Ada.Text_IO; with Ada.Text_IO.Text_Streams; use Ada.Text_IO.Text_Streams; with graphical_editor.scheduling_refs; use graphical_editor.scheduling_refs; with graphical_editor.manuals; use graphical_editor.manuals; with graphical_editor.caches; use graphical_editor.caches; with graphical_editor.cores; use graphical_editor.cores; with graphical_editor.address_spaces; use graphical_editor.address_spaces; with graphical_editor.processors; use graphical_editor.processors; with graphical_editor.networks; use graphical_editor.networks; with graphical_editor.aadl_options; use graphical_editor.aadl_options; with graphical_editor.tasks; use graphical_editor.tasks; with graphical_editor.task_groups; use graphical_editor.task_groups; with graphical_editor.messages; use graphical_editor.messages; with graphical_editor.precedence_dependency; use graphical_editor.precedence_dependency; with graphical_editor.queueing_buffer_dependency; use graphical_editor.queueing_buffer_dependency; with graphical_editor.black_board_buffer_dependency; use graphical_editor.black_board_buffer_dependency; with graphical_editor.resource_dependency; use graphical_editor.resource_dependency; with graphical_editor.asynchronous_communication_dependency; use graphical_editor.asynchronous_communication_dependency; with graphical_editor.time_triggered_communication_dependency; use graphical_editor.time_triggered_communication_dependency; with graphical_editor.resources; use graphical_editor.resources; with graphical_editor.buffers; use graphical_editor.buffers; with graphical_editor.event_tables; use graphical_editor.event_tables; with graphical_editor.event_analyzers; use graphical_editor.event_analyzers; with graphical_editor.analysis_on_event_table; use graphical_editor.analysis_on_event_table; with graphical_editor.scheduling_simulations; use graphical_editor.scheduling_simulations; with graphical_editor.scheduling_options; use graphical_editor.scheduling_options; with graphical_editor.priorities; use graphical_editor.priorities; with graphical_editor.scheduling_feasibility_widgets; use graphical_editor.scheduling_feasibility_widgets; with graphical_editor.message_text; use graphical_editor.message_text; with graphical_editor.deployments; use graphical_editor.deployments; with graphical_editor.file_selector; use graphical_editor.file_selector; with Glib; use Glib; with Glib.Object; use Glib.Object; with Gtk.Widget; use Gtk.Widget; with Gdk.Window; use Gdk.Window; with Gdk.Color; use Gdk.Color; with Gdk.GC; use Gdk.GC; with graphical_editor.Draw_Scheduling; use graphical_editor.Draw_Scheduling; with Gdk.Drawable; use Gdk.Drawable; with Call_Framework; use Call_Framework; with Call_Framework_Interface; use Call_Framework_Interface; use Call_Framework_Interface.Framework_Request_Package; use Call_Framework_Interface.Framework_Response_Package; with Call_Scheduling_Framework; use Call_Scheduling_Framework; with Tasks; use Tasks; with Task_Set; use Task_Set; use Task_Set.Generic_Task_Set; with Buffers; use Buffers; with Buffer_Set; use Buffer_Set; use Buffer_Set.Generic_Buffer_Set; with Address_Spaces; use Address_Spaces; with Address_Space_Set; use Address_Space_Set; use Address_Space_Set.Generic_Address_Space_Set; with Resources; use Resources; with Resource_Set; use Resource_Set; use Resource_Set.Generic_Resource_Set; with messages; use messages; with message_Set; use message_Set; use message_Set.Generic_message_Set; with Processors; use Processors; with Processors; use Processors; with Processor_Set; use Processor_Set; use Processor_Set.Generic_Processor_Set; use Processor_Set.Generic_core_unit_Set; with task_group_Set; use task_group_Set; use task_group_Set.Generic_Task_Group_Set; with Multiprocessor_Services; use Multiprocessor_Services; with Multiprocessor_Services_Interface; use Multiprocessor_Services_Interface; use Multiprocessor_Services_Interface.Scheduling_Result_Per_Processor_Package; with graphical_editor.user_message; use graphical_editor.user_message; with Translate; use Translate; with Framework_Config; use Framework_Config; with Gtk.Text_Iter; use Gtk.Text_Iter; with time_unit_events; use time_unit_events; with Call_Memory_Framework; use Call_Memory_Framework; use Call_Memory_Framework.Buffer_Result_Package; with graphical_editor.scheduling_simulation_draw_callbacks; use graphical_editor.scheduling_simulation_draw_callbacks; package body graphical_editor.cheddar_callbacks is line_Number : integer := 0; procedure draw_time_line_from_event_table (Object : access Gtkada_Builder_Record'Class) is begin if (get_number_of_elements (Sys.Tasks) = 0) then Show_Message_Box (Lb_Define_Tasks_Before (Current_Language)); return; end if; if Framework.Sched.nb_entries = 0 then Show_Message_Box (Lb_Schedule_Before (Current_Language)); return; end if; graphical_editor.event_tables.show_draw_time_line_from_event_table_widget; end draw_time_line_from_event_table; procedure initialyse_system (Object : access Gtkada_Builder_Record'Class) is begin clear_workspace; Do_New; end initialyse_system; function new_quit (Object : access Gtkada_Builder_Record'Class) return Boolean is begin Do_Exit; return True; end new_quit; procedure new_Quit_proc (Object : access Gtkada_Builder_Record'Class) is begin Do_Exit; end new_quit_proc; procedure Quit (Object : access Gtkada_Builder_Record'Class) is begin Gtk.Main.Gtk_Exit (0); end Quit; function QuitAboutDialog (Object : access Gtkada_Builder_Record'Class) return boolean is begin Gtk.Main.Main_quit; return false; end QuitAboutDialog; procedure about (Object : access Gtkada_Builder_Record'Class) is begin Show_Message_Box (Lb_About_Text (Current_Language)); end about; procedure clear_workspace is begin Set_Text(buffer_editor_cheddar, ""); Gdk.Window.Clear (get_window(my_area)); if graphical_editor.scheduling_simulation_draw_callbacks.Draw_Scheduling/=null then graphical_editor.scheduling_simulation_draw_callbacks.Draw_Scheduling.Period := 0; graphical_editor.scheduling_simulation_draw_callbacks.Draw_Scheduling.Start_Draw := 0; if graphical_editor.scheduling_simulation_draw_callbacks.Draw_Scheduling.Sched/= null then initialize(graphical_editor.scheduling_simulation_draw_callbacks.Draw_Scheduling.Sched.all); end if; end if; end clear_workspace; procedure clear_workspace (Object : access Gtkada_Builder_Record'Class) is begin clear_workspace; end clear_workspace; procedure manual (Object : access Gtkada_Builder_Record'Class) is begin graphical_editor.manuals.Show_Manual_Widget; end manual; procedure cache (Object : access Gtkada_Builder_Record'Class) is begin graphical_editor.caches.Show_Cache_Widget; end cache; procedure deployment (Object : access Gtkada_Builder_Record'Class) is begin if (get_number_of_elements (Sys.Tasks) = 0) then Show_Message_Box (Lb_Define_Tasks_Before (Current_Language)); return; else graphical_editor.deployments.Show_Deployment_Widget; end if; end deployment; procedure set_priorities_rm (Object : access Gtkada_Builder_Record'Class) is begin if (get_number_of_elements (Sys.Tasks) = 0) then Show_Message_Box (Lb_Define_Tasks_Before (Current_Language)); return; end if; graphical_editor.priorities.Show_Priorities_Rm_Widget; end set_priorities_rm; procedure set_priorities_audsley_opa (Object : access Gtkada_Builder_Record'Class) is begin if (get_number_of_elements (Sys.Tasks) = 0) then Show_Message_Box (Lb_Define_Tasks_Before (Current_Language)); return; end if; graphical_editor.priorities.Show_Priorities_Audsley_OPA_Widget; end set_priorities_audsley_opa; procedure set_priorities_opa_crpd_pt (Object : access Gtkada_Builder_Record'Class) is begin if (get_number_of_elements (Sys.Tasks) = 0) then Show_Message_Box (Lb_Define_Tasks_Before (Current_Language)); return; end if; graphical_editor.priorities.Show_Priorities_OPA_CRPD_PT_Widget; end set_priorities_opa_crpd_pt; procedure set_priorities_opa_crpd_pt_simplified (Object : access Gtkada_Builder_Record'Class) is begin if (get_number_of_elements (Sys.Tasks) = 0) then Show_Message_Box (Lb_Define_Tasks_Before (Current_Language)); return; end if; graphical_editor.priorities.Show_Priorities_OPA_CRPD_PT_Simplified_Widget; end set_priorities_opa_crpd_pt_simplified; procedure set_priorities_opa_crpd_tree (Object : access Gtkada_Builder_Record'Class) is begin if (get_number_of_elements (Sys.Tasks) = 0) then Show_Message_Box (Lb_Define_Tasks_Before (Current_Language)); return; end if; graphical_editor.priorities.Show_Priorities_OPA_CRPD_Tree_Widget; end set_priorities_opa_crpd_tree; procedure set_priorities_dm (Object : access Gtkada_Builder_Record'Class) is begin if (get_number_of_elements (Sys.Tasks) = 0) then Show_Message_Box (Lb_Define_Tasks_Before (Current_Language)); return; end if; graphical_editor.priorities.Show_Priorities_Dm_Widget; end set_priorities_dm; procedure buffer (Object : access Gtkada_Builder_Record'Class) is begin graphical_editor.buffers.Show_Buffer_Widget; end buffer; procedure export_cheddar_properties_set (Object : access Gtkada_Builder_Record'Class) is begin Write_Cheddar_Property_Sets_To_File (Sys); end export_cheddar_properties_set; procedure export_aadl_standard_properties_set (Object : access Gtkada_Builder_Record'Class) is begin Write_Aadl_Standard_Properties_Set_To_File (Sys); end export_aadl_standard_properties_set; procedure scheduling_partition_best_fit (Object : access Gtkada_Builder_Record'Class) is Response_List : Framework_Response_Table; Request_List : Framework_Request_Table; A_Request : Framework_Request; begin if (get_number_of_elements (Sys.Tasks) = 0) then Show_Message_Box (Lb_Define_Tasks_Before (Current_Language)); return; end if; if (get_number_of_elements (Sys.Processors) = 0) then Show_Message_Box (Lb_Define_Processors_Before (Current_Language)); return; end if; Initialize (A_Request); A_Request.statement := Scheduling_Feasibility_Best_Fit; add (Request_List, A_Request); Sequential_Framework_Request (Sys, Request_List, Response_List); Write_Title_And_Text (Response_List); end scheduling_partition_best_fit; procedure scheduling_partition_first_fit (Object : access Gtkada_Builder_Record'Class) is Response_List : Framework_Response_Table; Request_List : Framework_Request_Table; A_Request : Framework_Request; begin if (get_number_of_elements (Sys.Processors) = 0) then Show_Message_Box (Lb_Define_Processors_Before (Current_Language)); return; end if; if (get_number_of_elements (Sys.Tasks) = 0) then Show_Message_Box (Lb_Define_Tasks_Before (Current_Language)); return; end if; Initialize (A_Request); A_Request.statement := Scheduling_Feasibility_First_Fit; add (Request_List, A_Request); Sequential_Framework_Request (Sys, Request_List, Response_List); Write_Title_And_Text (Response_List); end scheduling_partition_first_fit; procedure priorities_display_chetto (Object : access Gtkada_Builder_Record'Class) is Response_List : Framework_Response_Table; Request_List : Framework_Request_Table; A_Request : Framework_Request; begin if (get_number_of_elements (Sys.Tasks) = 0) then Show_Message_Box (Lb_Define_Tasks_Before (Current_Language)); return; else Initialize (A_Request); A_Request.statement := Dependency_Compute_Chetto_Blazewicz_Priority; add (Request_List, A_Request); Sequential_Framework_Request (Sys, Request_List, Response_List); Write_Title_And_Text (Response_List); end if; end priorities_display_chetto; procedure deadline_display_chetto (Object : access Gtkada_Builder_Record'Class) is Response_List : Framework_Response_Table; Request_List : Framework_Request_Table; A_Request : Framework_Request; begin if (get_number_of_elements (Sys.Tasks) = 0) then Show_Message_Box (Lb_Define_Tasks_Before (Current_Language)); return; else Initialize (A_Request); A_Request.statement := Dependency_Compute_Chetto_Blazewicz_Deadline; add (Request_List, A_Request); Sequential_Framework_Request (Sys, Request_List, Response_List); Write_Title_And_Text (Response_List); end if; end deadline_display_chetto; procedure deadline_update_chetto (Object : access Gtkada_Builder_Record'Class) is Response_List : Framework_Response_Table; Request_List : Framework_Request_Table; A_Request : Framework_Request; begin if (get_number_of_elements (Sys.Tasks) = 0) then Show_Message_Box (Lb_Define_Tasks_Before (Current_Language)); return; else Initialize (A_Request); A_Request.statement := Dependency_Set_Chetto_Blazewicz_Deadline; add (Request_List, A_Request); Sequential_Framework_Request (Sys, Request_List, Response_List); Write_Title_And_Text (Response_List); -- Do not forget to save project -- since tasks are modified !! -- Is_New := False; Is_Saved := False; end if; end deadline_update_chetto; procedure end_to_end_display_one_step (Object : access Gtkada_Builder_Record'Class) is Response_List : Framework_Response_Table; Request_List : Framework_Request_Table; A_Request : Framework_Request; begin if (get_number_of_elements (Sys.Tasks) = 0) then Show_Message_Box (Lb_Define_Tasks_Before (Current_Language)); return; else Initialize (A_Request); A_Request.statement := Dependency_Compute_End_To_End_Response_Time_One_Step; add (Request_List, A_Request); Sequential_Framework_Request (Sys, Request_List, Response_List); Write_Title_And_Text (Response_List); end if; end end_to_end_display_one_step; procedure end_to_end_update_one_step (Object : access Gtkada_Builder_Record'Class) is Response_List : Framework_Response_Table; Request_List : Framework_Request_Table; A_Request : Framework_Request; begin if (get_number_of_elements (Sys.Tasks) = 0) then Show_Message_Box (Lb_Define_Tasks_Before (Current_Language)); return; else Initialize (A_Request); A_Request.statement := Dependency_Set_End_To_End_Response_Time_One_Step; add (Request_List, A_Request); Sequential_Framework_Request (Sys, Request_List, Response_List); Write_Title_And_Text (Response_List); -- Do not forget to save project -- since tasks are modified !! -- Is_New := False; Is_Saved := False; end if; end end_to_end_update_one_step; procedure end_to_end_display_all_steps (Object : access Gtkada_Builder_Record'Class) is Response_List : Framework_Response_Table; Request_List : Framework_Request_Table; A_Request : Framework_Request; begin if (get_number_of_elements (Sys.Tasks) = 0) then Show_Message_Box (Lb_Define_Tasks_Before (Current_Language)); return; else Initialize (A_Request); A_Request.statement := Dependency_Compute_End_To_End_Response_Time_All_Steps; add (Request_List, A_Request); Sequential_Framework_Request (Sys, Request_List, Response_List); Write_Title_And_Text (Response_List); end if; end end_to_end_display_all_steps; procedure end_to_end_update_all_steps (Object : access Gtkada_Builder_Record'Class) is Response_List : Framework_Response_Table; Request_List : Framework_Request_Table; A_Request : Framework_Request; begin if (get_number_of_elements (Sys.Tasks) = 0) then Show_Message_Box (Lb_Define_Tasks_Before (Current_Language)); return; else Initialize (A_Request); A_Request.statement := Dependency_Set_End_To_End_Response_Time_All_Steps; add (Request_List, A_Request); Sequential_Framework_Request (Sys, Request_List, Response_List); Write_Title_And_Text (Response_List); Is_New := False; Is_Saved := False; end if; end end_to_end_update_all_steps; procedure priorities_update_chetto (Object : access Gtkada_Builder_Record'Class) is Response_List : Framework_Response_Table; Request_List : Framework_Request_Table; A_Request : Framework_Request; begin if (get_number_of_elements (Sys.Tasks) = 0) then Show_Message_Box (Lb_Define_Tasks_Before (Current_Language)); return; else Initialize (A_Request); A_Request.statement := Dependency_Set_Chetto_Blazewicz_Priority; add (Request_List, A_Request); Sequential_Framework_Request (Sys, Request_List, Response_List); Write_Title_And_Text (Response_List); -- Do not forget to save project -- since tasks are modified !! -- Is_New := False; Is_Saved := False; end if; end priorities_update_chetto; procedure scheduling_partition_small_task (Object : access Gtkada_Builder_Record'Class) is Response_List : Framework_Response_Table; Request_List : Framework_Request_Table; A_Request : Framework_Request; begin if (get_number_of_elements (Sys.Processors) = 0) then Show_Message_Box (Lb_Define_Processors_Before (Current_Language)); return; end if; if (get_number_of_elements (Sys.Tasks) = 0) then Show_Message_Box (Lb_Define_Tasks_Before (Current_Language)); return; end if; Initialize (A_Request); A_Request.statement := Scheduling_Feasibility_Small_Task; add (Request_List, A_Request); Sequential_Framework_Request (Sys, Request_List, Response_List); Write_Title_And_Text (Response_List); end scheduling_partition_small_task; procedure scheduling_partition_next_fit (Object : access Gtkada_Builder_Record'Class) is Response_List : Framework_Response_Table; Request_List : Framework_Request_Table; A_Request : Framework_Request; begin if (get_number_of_elements (Sys.Processors) = 0) then Show_Message_Box (Lb_Define_Processors_Before (Current_Language)); return; end if; if (get_number_of_elements (Sys.Tasks) = 0) then Show_Message_Box (Lb_Define_Tasks_Before (Current_Language)); return; end if; Initialize (A_Request); A_Request.statement := Scheduling_Feasibility_Next_Fit; add (Request_List, A_Request); Sequential_Framework_Request (Sys, Request_List, Response_List); Write_Title_And_Text (Response_List); end scheduling_partition_next_fit; procedure compute_response_time_density (Object : access Gtkada_Builder_Record'Class) is Response_List : Framework_Response_Table; Request_List : Framework_Request_Table; A_Request : Framework_Request; begin if (get_number_of_elements (Sys.Tasks) = 0) then Show_Message_Box (Lb_Define_Tasks_Before (Current_Language)); return; end if; if Framework.Sched.nb_entries = 0 then Show_Message_Box (Lb_Schedule_Before (Current_Language)); return; end if; Initialize (A_Request); A_Request.statement := Random_Response_Time_Density; add (Request_List, A_Request); Sequential_Framework_Request (Sys, Request_List, Response_List); Write_Title_And_Text (Response_List); end compute_response_time_density; procedure scheduling_partition_general (Object : access Gtkada_Builder_Record'Class) is Response_List : Framework_Response_Table; Request_List : Framework_Request_Table; A_Request : Framework_Request; begin if (get_number_of_elements (Sys.Processors) = 0) then Show_Message_Box (Lb_Define_Processors_Before (Current_Language)); return; end if; if (get_number_of_elements (Sys.Tasks) = 0) then Show_Message_Box (Lb_Define_Tasks_Before (Current_Language)); return; end if; Initialize (A_Request); A_Request.statement := Scheduling_Feasibility_General_Task; add (Request_List, A_Request); Sequential_Framework_Request (Sys, Request_List, Response_List); Write_Title_And_Text (Response_List); end scheduling_partition_general; procedure analysis_buffer_feasibility (Object : access Gtkada_Builder_Record'Class) is Response_List : Framework_Response_Table; Request_List : Framework_Request_Table; A_Request : Framework_Request; begin if (get_number_of_elements (Sys.Buffers) = 0) then Show_Message_Box (Lb_Define_Buffers_Before (Current_Language)); return; end if; Initialize (A_Request); A_Request.statement := Buffer_Feasibility_Tests; add (Request_List, A_Request); Sequential_Framework_Request (Sys, Request_List, Response_List); Write_Title_And_Text(Response_List); end analysis_buffer_feasibility; procedure analysis_buffer_simulation (Object : access Gtkada_Builder_Record'Class) is Response_List : Framework_Response_Table; Request_List : Framework_Request_Table; A_Request : Framework_Request; begin if (get_number_of_elements (Sys.Buffers) = 0) then Show_Message_Box (Lb_Define_Buffers_Before (Current_Language)); return; else -- Check if scheduling is computed or not -- if Framework.Sched.nb_entries = 0 then Show_Message_Box (Lb_Schedule_Before (Current_Language)); return; end if; -- For each buffer, compute and draw its size from -- 0 to the base period -- Initialize (A_Request); A_Request.statement := Buffer_Scheduling_Simulation; add (Request_List, A_Request); Sequential_Framework_Request (Sys, Request_List, Response_List); Write_Title_And_Text (Response_List); -- Now, draw the result on buffer utilization -- graphical_editor.buffers.show_widget_buffer_utilization (Object); end if; end analysis_buffer_simulation; procedure scheduling_feasibility (Object : access Gtkada_Builder_Record'Class) is Response_List : Framework_Response_Table; Request_List : Framework_Request_Table; A_Request : Framework_Request; begin if (get_number_of_elements (Sys.Tasks) = 0) then Show_Message_Box (Lb_Define_Tasks_Before (Current_Language)); return; end if; Initialize (A_Request); A_Request.statement := Scheduling_Feasibility_Basics; A_Request.target := To_Unbounded_String (""); add (Request_List, A_Request); Sequential_Framework_Request (Sys, Request_List, Response_List); Write_Title_And_Text(Response_List); end scheduling_feasibility; procedure scheduling_simulation (Object : access Gtkada_Builder_Record'Class) is begin if (get_number_of_elements (Sys.tasks) = 0) then Show_Message_Box (Lb_Define_tasks_Before (Current_Language)); return; end if; graphical_editor.scheduling_simulations.Show_scheduling_customization_Widget; end scheduling_simulation; procedure scheduling_option (Object : access Gtkada_Builder_Record'Class) is begin graphical_editor.scheduling_options.show_scheduling_options_widget; end scheduling_option; procedure run_analysis_on_event_table (Object : access Gtkada_Builder_Record'Class) is begin if Framework.Sched.nb_entries = 0 then Show_Message_Box (Lb_Schedule_Before (Current_Language)); return; end if; graphical_editor.analysis_on_event_table.Show_scheduling_options_Widget; end run_analysis_on_event_table; procedure scheduling_feasibility_widget (Object : access Gtkada_Builder_Record'Class) is begin if (get_number_of_elements (Sys.Tasks) = 0) then Show_Message_Box (Lb_Define_Tasks_Before (Current_Language)); return; end if; graphical_editor.scheduling_feasibility_widgets.Show_scheduling_feasibility_widget; end scheduling_feasibility_widget; procedure core (Object : access Gtkada_Builder_Record'Class) is begin graphical_editor.cores.Show_Core_Widget; end core; procedure event_analyzer (Object : access Gtkada_Builder_Record'Class) is begin graphical_editor.event_analyzers.Show_Event_Analyzer_Widget; end event_analyzer; procedure message (Object : access Gtkada_Builder_Record'Class) is begin graphical_editor.messages.Show_Message_Widget; end message; procedure precedence_dependency (Object : access Gtkada_Builder_Record'Class) is begin if (get_number_of_elements (Sys.Tasks) = 0) then Show_Message_Box (Lb_Define_Tasks_Before (Current_Language)); return; else graphical_editor.precedence_dependency.show_precedency_widget; end if; end precedence_dependency; procedure resource_dependency (Object : access Gtkada_Builder_Record'Class) is begin if (get_number_of_elements (Sys.resources) = 0) then Show_Message_Box (Lb_Define_resources_Before (Current_Language)); return; else graphical_editor.resource_dependency.show_resource_widget; end if; end resource_dependency; procedure black_board_buffer_dependency(Object : access Gtkada_Builder_Record'Class) is begin if (get_number_of_elements (Sys.Tasks) = 0) then Show_Message_Box (Lb_Define_Tasks_Before (Current_Language)); return; else graphical_editor.black_board_buffer_dependency.show_black_board_buffer_widget; end if; end black_board_buffer_dependency; procedure queueing_buffer_dependency (Object : access Gtkada_Builder_Record'Class) is begin if (get_number_of_elements (Sys.buffers) = 0) then Show_Message_Box (Lb_Define_buffers_Before (Current_Language)); return; else graphical_editor.queueing_buffer_dependency.show_queueing_buffer_widget; end if; end queueing_buffer_dependency; procedure asynchronous_communication_dependency(Object : access Gtkada_Builder_Record'Class) is begin if (get_number_of_elements (Sys.messages) = 0) then Show_Message_Box (Lb_Define_messages_Before (Current_Language)); return; else graphical_editor.asynchronous_communication_dependency.show_asynchronous_communication_widget; end if; end asynchronous_communication_dependency; procedure time_triggered_dependency(Object : access Gtkada_Builder_Record'Class) is begin if (get_number_of_elements (Sys.Tasks) = 0) then Show_Message_Box (Lb_Define_Tasks_Before (Current_Language)); return; else graphical_editor.time_triggered_communication_dependency.show_time_triggered_widget; end if; end time_triggered_dependency; procedure resource (Object : access Gtkada_Builder_Record'Class) is begin if (get_number_of_elements (Sys.Tasks) = 0) then Show_Message_Box (Lb_Define_Tasks_Before (Current_Language)); return; else graphical_editor.resources.Show_Resource_Widget; end if; end resource; procedure address_space (Object : access Gtkada_Builder_Record'Class) is begin if (get_number_of_elements (Sys.processors) = 0) then Show_Message_Box (Lb_Define_processors_Before (Current_Language)); return; else graphical_editor.address_spaces.Show_Address_space_Widget; end if; end address_space; procedure task_group (Object : access Gtkada_Builder_Record'Class) is begin if (get_number_of_elements (Sys.tasks) = 0) then Show_Message_Box (Lb_Define_tasks_Before (Current_Language)); return; else graphical_editor.task_groups.Show_Task_group_Widget; end if; end task_group; procedure taskc (Object : access Gtkada_Builder_Record'Class) is begin if (get_number_of_elements (Sys.address_spaces) = 0) then Show_Message_Box (Lb_Define_address_spaces_Before (Current_Language)); return; else graphical_editor.tasks.Show_Task_Widget; end if; end taskc; procedure processor (Object : access Gtkada_Builder_Record'Class) is begin if (get_number_of_elements (Sys.core_units) = 0) then Show_Message_Box (Lb_Define_core_units_Before (Current_Language)); return; else graphical_editor.processors.Show_Processor_Widget; end if; end processor; procedure network (Object : access Gtkada_Builder_Record'Class) is begin if (get_number_of_elements (Sys.processors) = 0) then Show_Message_Box (Lb_Define_processors_Before (Current_Language)); return; else graphical_editor.networks.Show_Network_Widget; end if; end network; procedure open_xml (Object : access Gtkada_Builder_Record'Class) is begin clear_workspace; Gtk_New (File_Selector_widget); initialize_open_xml_file(file_selector_widget); Show_All (File_Selector_widget); end open_xml; procedure import_event_table (Object : access Gtkada_Builder_Record'Class) is begin if (get_number_of_elements (Sys.Tasks) = 0) then Show_Message_Box (Lb_Define_Tasks_Before (Current_Language)); return; end if; Gtk_New (File_Selector_widget); initialize_import_event_table(file_selector_widget); Show_All (File_Selector_widget); end import_event_table; procedure import_aadl (Object : access Gtkada_Builder_Record'Class) is begin Gtk_New (File_Selector_widget); initialize_aadl_import(file_selector_widget); Show_All (File_Selector_widget); end import_aadl; procedure export_aadl (Object : access Gtkada_Builder_Record'Class) is begin Gtk_New (File_Selector_widget); initialize_aadl_export(file_selector_widget); Show_All (File_Selector_widget); end export_aadl; procedure aadl_option (Object : access Gtkada_Builder_Record'Class) is begin graphical_editor.aadl_options.Show_aadl_option_widget; end aadl_option; procedure save_xml (Object : access Gtkada_Builder_Record'Class) is begin if (Xml_Project_File_Name /= To_Unbounded_String ("")) then Systems.Write_To_Xml_File (Sys, Xml_Project_File_Name); Is_Saved := True; else Gtk_New (File_Selector_widget); initialize_saveas_xml_file(file_selector_widget); Show_All (File_Selector_widget); end if; end save_xml; procedure save_as_xml (Object : access Gtkada_Builder_Record'Class) is begin Gtk_New (File_Selector_widget); initialize_saveas_xml_file(file_selector_widget); Show_All (File_Selector_widget); end save_as_xml; procedure export_event_table (Object : access Gtkada_Builder_Record'Class) is begin if Framework.Sched.nb_entries = 0 then Show_Message_Box (Lb_Schedule_Before (Current_Language)); return; end if; Gtk_New (File_Selector_widget); initialize_export_event_table(file_selector_widget); Show_All (File_Selector_widget); end export_event_table; procedure scheduling_ref (Object : access Gtkada_Builder_Record'Class) is begin graphical_editor.scheduling_refs.Show_Sched_Reference_Widget; end scheduling_ref; procedure resource_deadlock (Object : access Gtkada_Builder_Record'Class) is Response_List : Framework_Response_Table; Request_List : Framework_Request_Table; A_Request : Framework_Request; begin if (get_number_of_elements (Sys.Resources) = 0) then Show_Message_Box (Lb_Define_Resources_Before (Current_Language)); return; end if; -- Check if scheduling is computed or not -- if Framework.Sched.nb_entries = 0 then Show_Message_Box (Lb_Schedule_Before (Current_Language)); return; end if; Initialize (A_Request); A_Request.statement := Scheduling_Simulation_Deadlock; add (Request_List, A_Request); Sequential_Framework_Request (Sys, Request_List, Response_List); Write_Title_And_Text (Response_List); end resource_deadlock; procedure resource_priority_inversion (Object : access Gtkada_Builder_Record'Class) is Response_List : Framework_Response_Table; Request_List : Framework_Request_Table; A_Request : Framework_Request; begin -- check if there are resources -- if (get_number_of_elements (Sys.Resources) = 0) then Show_Message_Box (Lb_Define_Resources_Before (Current_Language)); return; end if; if Framework.Sched.nb_entries = 0 then Show_Message_Box (Lb_Schedule_Before (Current_Language)); return; end if; Initialize (A_Request); A_Request.statement := Scheduling_Simulation_Priority_Inversion; add (Request_List, A_Request); Sequential_Framework_Request (Sys, Request_List, Response_List); Write_Title_And_Text (Response_List); end resource_priority_inversion; procedure ceiling_priority_display (Object : access Gtkada_Builder_Record'Class) is Response_List : Framework_Response_Table; Request_List : Framework_Request_Table; A_Request : Framework_Request; begin if (get_number_of_elements (Sys.Resources) = 0) then Show_Message_Box (Lb_Define_Resources_Before (Current_Language)); return; else Initialize (A_Request); A_Request.statement := Scheduling_Feasibility_Compute_Resource_Ceiling_Priority; add (Request_List, A_Request); Sequential_Framework_Request (Sys, Request_List, Response_List); Write_Title_And_Text (Response_List); end if; end ceiling_priority_display; procedure ceiling_priority_update (Object : access Gtkada_Builder_Record'Class) is Response_List : Framework_Response_Table; Request_List : Framework_Request_Table; A_Request : Framework_Request; begin if (get_number_of_elements (Sys.Resources) = 0) then Show_Message_Box (Lb_Define_Resources_Before (Current_Language)); return; else Initialize (A_Request); A_Request.statement := Scheduling_Feasibility_Compute_And_Set_Resource_Ceiling_Priority; add (Request_List, A_Request); Sequential_Framework_Request (Sys, Request_List, Response_List); Write_Title_And_Text (Response_List); -- Do not forget to save project -- since tasks are modified !! -- Is_New := False; Is_Saved := False; end if; end ceiling_priority_update; procedure bound_blocking_display (Object : access Gtkada_Builder_Record'Class) is Response_List : Framework_Response_Table; Request_List : Framework_Request_Table; A_Request : Framework_Request; begin if (get_number_of_elements (Sys.Resources) = 0) then Show_Message_Box (Lb_Define_Resources_Before (Current_Language)); return; else Initialize (A_Request); A_Request.statement := Scheduling_Feasibility_Compute_worst_case_Blocking_Time; add (Request_List, A_Request); Sequential_Framework_Request (Sys, Request_List, Response_List); Write_Title_And_Text (Response_List); end if; end bound_blocking_display; procedure bound_blocking_update (Object : access Gtkada_Builder_Record'Class) is Response_List : Framework_Response_Table; Request_List : Framework_Request_Table; A_Request : Framework_Request; begin if (get_number_of_elements (Sys.Resources) = 0) then Show_Message_Box (Lb_Define_Resources_Before (Current_Language)); return; else Initialize (A_Request); A_Request.statement := Scheduling_Feasibility_Compute_And_Set_worst_case_Blocking_Time; add (Request_List, A_Request); Sequential_Framework_Request (Sys, Request_List, Response_List); Write_Title_And_Text (Response_List); -- Do not forget to save project -- since tasks are modified !! -- Is_New := False; Is_Saved := False; end if; end bound_blocking_update; procedure check_address_space_update (Object : access Gtkada_Builder_Record'Class) is Response_List : Framework_Response_Table; Request_List : Framework_Request_Table; A_Request : Framework_Request; begin if (get_number_of_elements (Sys.Tasks) = 0) then Show_Message_Box (Lb_Define_Tasks_Before (Current_Language)); return; end if; Initialize (A_Request); A_Request.statement := Memory_Set_footprint_Analysis; add (Request_List, A_Request); Sequential_Framework_Request (Sys, Request_List, Response_List); Write_Title_And_Text (Response_List); -- Do not forget to save project -- since tasks are modified !! -- Is_New := False; Is_Saved := False; end check_address_space_update; procedure check_address_space (Object : access Gtkada_Builder_Record'Class) is Response_List : Framework_Response_Table; Request_List : Framework_Request_Table; A_Request : Framework_Request; begin if (get_number_of_elements (Sys.Tasks) = 0) then Show_Message_Box (Lb_Define_Tasks_Before (Current_Language)); return; end if; Initialize (A_Request); A_Request.statement := Memory_Compute_footprint_Analysis; add (Request_List, A_Request); Sequential_Framework_Request (Sys, Request_List, Response_List); Write_Title_And_Text (Response_List); end check_address_space; procedure tindell_transaction_wcrt (Object : access Gtkada_Builder_Record'Class) is Response_List : Framework_Response_Table; Request_List : Framework_Request_Table; A_Request : Framework_Request; begin if (get_number_of_elements (Sys.Task_groups) = 0) then Show_Message_Box (Lb_Define_Task_groups_Before (Current_Language)); return; end if; Initialize (A_Request); A_Request.statement := Scheduling_Feasibility_Transaction_Worst_Case_Response_Time_Tindell; add (Request_List, A_Request); Sequential_Framework_Request (Sys, Request_List, Response_List); Write_Title_And_Text (Response_List); end tindell_transaction_wcrt; procedure audsley_transaction_wcrt (Object : access Gtkada_Builder_Record'Class) is Response_List : Framework_Response_Table; Request_List : Framework_Request_Table; A_Request : Framework_Request; begin if (get_number_of_elements (Sys.Task_groups) = 0) then Show_Message_Box (Lb_Define_Task_groups_Before (Current_Language)); return; end if; Initialize (A_Request); A_Request.statement := Scheduling_Feasibility_Transaction_Worst_Case_Response_Time_Audsley; add (Request_List, A_Request); Sequential_Framework_Request (Sys, Request_List, Response_List); Write_Title_And_Text (Response_List); end audsley_transaction_wcrt; procedure palencia_transaction_wcrt (Object : access Gtkada_Builder_Record'Class) is Response_List : Framework_Response_Table; Request_List : Framework_Request_Table; A_Request : Framework_Request; begin if (get_number_of_elements (Sys.Task_groups) = 0) then Show_Message_Box (Lb_Define_Task_groups_Before (Current_Language)); return; end if; Initialize (A_Request); A_Request.statement := Scheduling_Feasibility_Transaction_Worst_Case_Response_Time_Palencia; add (Request_List, A_Request); Sequential_Framework_Request (Sys, Request_List, Response_List); Write_Title_And_Text (Response_List); end palencia_transaction_wcrt; procedure wcdops_plus_transaction_wcrt (Object : access Gtkada_Builder_Record'Class) is Response_List : Framework_Response_Table; Request_List : Framework_Request_Table; A_Request : Framework_Request; begin if (get_number_of_elements (Sys.Task_groups) = 0) then Show_Message_Box (Lb_Define_Task_groups_Before (Current_Language)); return; end if; Initialize (A_Request); A_Request.statement := Scheduling_Feasibility_Transaction_Worst_Case_Response_Time_WCDOPS_Plus; add (Request_List, A_Request); Sequential_Framework_Request (Sys, Request_List, Response_List); Write_Title_And_Text (Response_List); end wcdops_plus_transaction_wcrt; procedure wcdops_plus_nim_transaction_wcrt (Object : access Gtkada_Builder_Record'Class) is Response_List : Framework_Response_Table; Request_List : Framework_Request_Table; A_Request : Framework_Request; begin if (get_number_of_elements (Sys.Task_groups) = 0) then Show_Message_Box (Lb_Define_Task_groups_Before (Current_Language)); return; end if; Initialize (A_Request); A_Request.statement := Scheduling_Feasibility_Transaction_Worst_Case_Response_Time_WCDOPS_Plus_NIM; add (Request_List, A_Request); Sequential_Framework_Request (Sys, Request_List, Response_List); Write_Title_And_Text (Response_List); end wcdops_plus_nim_transaction_wcrt; procedure compute_task_cache_access_profile(Object : access Gtkada_Builder_Record'Class) is Response_List : Framework_Response_Table; Request_List : Framework_Request_Table; A_Request : Framework_Request; begin if (get_number_of_elements (Sys.Tasks) = 0) then Show_Message_Box (Lb_Define_Tasks_Before (Current_Language)); return; end if; Initialize (A_Request); A_Request.statement := Cache_Analysis_Compute_Cache_Access_Profile; add (Request_List, A_Request); Sequential_Framework_Request (Sys, Request_List, Response_List); Write_Title_And_Text (Response_List); end compute_task_cache_access_profile; procedure export_arinc653_tsp (Object : access Gtkada_Builder_Record'Class) is begin if (get_number_of_elements (Sys.Tasks) = 0) then Show_Message_Box (Lb_Define_Tasks_Before (Current_Language)); return; end if; if Framework.Sched.nb_entries = 0 then Show_Message_Box (Lb_Schedule_Before (Current_Language)); return; end if; Gtk_New (File_Selector_widget); Initialize_export_arinc653_tsp(file_selector_widget); Show_All (File_Selector_widget); end export_arinc653_tsp; procedure design_pattern_analysis(Object : access Gtkada_Builder_Record'Class) is Response_List : Framework_Response_Table; Request_List : Framework_Request_Table; A_Request : Framework_Request; begin if (get_number_of_elements (Sys.Tasks) = 0) then Show_Message_Box (Lb_Define_Tasks_Before (Current_Language)); return; end if; Initialize (Response_List); Initialize (Request_List); Initialize (A_Request); A_Request.statement := Select_Feasibility_Tests_Simple; Add (Request_List, A_Request); Sequential_Framework_Request (Sys, Request_List, Response_List); Write_Title_And_Text (Response_List); end design_pattern_analysis; end graphical_editor.cheddar_callbacks;