------------------------------------------------------------------------------ ------------------------------------------------------------------------------ -- 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-2023, Frank Singhoff, Alain Plantec, Jerome Legrand, -- Hai Nam Tran, Stephane Rubini -- -- The Cheddar project was started in 2002 by -- Frank Singhoff, Lab-STICC UMR 6285, 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 README.md -- -- 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: 3657 $ -- $Date: 2020-12-13 13:25:49 +0100 (dim., 13 déc. 2020) $ -- $Author: singhoff $ ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ with GNAT.OS_Lib; use GNAT.OS_Lib; 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.about; use graphical_editor.about; 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.feasibility_test_options; use graphical_editor.feasibility_test_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.file_selector; use graphical_editor.file_selector; with graphical_editor.draw_scheduling; use graphical_editor.draw_scheduling; with Gtk.Main; 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.Event; use Gdk.Event; with Gtk.Text_Iter; use Gtk.Text_Iter; with Gtk.Tooltip; use Gtk.Tooltip; with gtk.file_chooser_dialog; use gtk.file_chooser_dialog; with gtk.file_chooser; use gtk.file_chooser; 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 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 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_simulations_callbacks; use graphical_editor.scheduling_simulations_callbacks; with cache_set; use cache_set; with network_set; use network_set; use network_set.generic_network_set; with caches; use caches; with caches; use caches.cache_blocks_table_package; with cache_access_profile_set; use cache_access_profile_set; with cache_access_profile_set; use cache_access_profile_set.cache_access_profile_set; with io_tools; use io_tools; package body graphical_editor.cheddar_callbacks.tool_menu 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.draw_scheduling.clear_time_line; graphical_editor.event_tables .show_draw_time_line_from_event_table_widget; end draw_time_line_from_event_table; 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; if (Integer (get_number_of_elements (sys.caches)) = 0) then show_message_box (lb_define_caches_before (current_language)); return; end if; if (get_number_of_elements (sys.cache_access_profiles) <= 0) then show_message_box (lb_cache_access_profile_must_be_defined (current_language)); return; end if; if (Integer (get_number_of_elements (sys.cache_access_profiles)) < Integer (get_number_of_elements (sys.tasks))) then show_message_box (lb_cache_access_profile_must_be_defined_for_all_tasks (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; if (Integer (get_number_of_elements (sys.caches)) = 0) then show_message_box (lb_define_caches_before (current_language)); return; end if; if (get_number_of_elements (sys.cache_access_profiles) <= 0) then show_message_box (lb_cache_access_profile_must_be_defined (current_language)); return; end if; if (Integer (get_number_of_elements (sys.cache_access_profiles)) < Integer (get_number_of_elements (sys.tasks))) then show_message_box (lb_cache_access_profile_must_be_defined_for_all_tasks (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; if (Integer (get_number_of_elements (sys.caches)) = 0) then show_message_box (lb_define_caches_before (current_language)); return; end if; if (get_number_of_elements (sys.cache_access_profiles) <= 0) then show_message_box (lb_cache_access_profile_must_be_defined (current_language)); return; end if; if (Integer (get_number_of_elements (sys.cache_access_profiles)) < Integer (get_number_of_elements (sys.tasks))) then show_message_box (lb_cache_access_profile_must_be_defined_for_all_tasks (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 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); 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 feasibility_test_option (object : access gtkada_builder_record'Class) is begin graphical_editor.feasibility_test_options .show_feasibility_test_options_widget; end feasibility_test_option; 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; show_fileselector_widget (export_event_table); end export_event_table; 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; show_fileselector_widget (import_event_table); end import_event_table; 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 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 import_cfg (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_import_cfg; add (request_list, a_request); sequential_framework_request (sys, request_list, response_list); write_title_and_text (response_list); end import_cfg; 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; if (Integer (get_number_of_elements (sys.caches)) = 0) then show_message_box (lb_define_caches_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; show_fileselector_widget (export_arinc653_tsp); 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; procedure compute_mils_biba (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 := mils_compute_security_biba; add (request_list, a_request); sequential_framework_request (sys, request_list, response_list); write_title_and_text (response_list); end compute_mils_biba; procedure compute_mils_belllapadula (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 := mils_compute_security_bell_lapadula; add (request_list, a_request); sequential_framework_request (sys, request_list, response_list); write_title_and_text (response_list); end compute_mils_belllapadula; procedure compute_mils_chinesewall (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 := mils_compute_security_chinese_wall; add (request_list, a_request); sequential_framework_request (sys, request_list, response_list); write_title_and_text (response_list); end compute_mils_chinesewall; procedure compute_mils_warshall (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 := mils_compute_security_warshall; add (request_list, a_request); sequential_framework_request (sys, request_list, response_list); write_title_and_text (response_list); end compute_mils_warshall; procedure compute_noc_path_delay (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.networks) = 0) then show_message_box (lb_define_networks_before (current_language)); return; end if; initialize (response_list); initialize (request_list); initialize (a_request); a_request.statement := network_noc_compute_path_delay; add (request_list, a_request); sequential_framework_request (sys, request_list, response_list); write_title_and_text (response_list); end compute_noc_path_delay; procedure compute_noc_direct_delay (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.networks) = 0) then show_message_box (lb_define_networks_before (current_language)); return; end if; initialize (response_list); initialize (request_list); initialize (a_request); a_request.statement := network_noc_compute_direct_interference_delay; add (request_list, a_request); sequential_framework_request (sys, request_list, response_list); write_title_and_text (response_list); end compute_noc_direct_delay; procedure compute_noc_indirect_delay (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.networks) = 0) then show_message_box (lb_define_networks_before (current_language)); return; end if; initialize (response_list); initialize (request_list); initialize (a_request); a_request.statement := network_noc_compute_indirect_interference_delay; add (request_list, a_request); sequential_framework_request (sys, request_list, response_list); write_title_and_text (response_list); end compute_noc_indirect_delay; procedure compute_noc_communication_delay (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.networks) = 0) then show_message_box (lb_define_networks_before (current_language)); return; end if; initialize (response_list); initialize (request_list); initialize (a_request); a_request.statement := network_noc_compute_communication_delay; add (request_list, a_request); sequential_framework_request (sys, request_list, response_list); write_title_and_text (response_list); end compute_noc_communication_delay; procedure compute_scheduling_anomalies (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 := scheduling_compute_scheduling_anomalies; add (request_list, a_request); sequential_framework_request (sys, request_list, response_list); write_title_and_text (response_list); end compute_scheduling_anomalies; procedure compute_spacewire_scm_transformation (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.networks) = 0) then show_message_box (lb_define_networks_before (current_language)); return; end if; initialize (response_list); initialize (request_list); initialize (a_request); a_request.statement := network_compute_spacewire_transformation_scm; add (request_list, a_request); sequential_framework_request (sys, request_list, response_list); write_title_and_text (response_list); end compute_spacewire_scm_transformation; procedure compute_ectm_saf_transformation (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.networks) = 0) then show_message_box (lb_define_networks_before (current_language)); return; end if; initialize (response_list); initialize (request_list); initialize (a_request); a_request.statement := network_compute_noc_transformation_ectm_saf; add (request_list, a_request); sequential_framework_request (sys, request_list, response_list); write_title_and_text (response_list); end compute_ectm_saf_transformation; procedure compute_wcctm_saf_transformation (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.networks) = 0) then show_message_box (lb_define_networks_before (current_language)); return; end if; initialize (response_list); initialize (request_list); initialize (a_request); a_request.statement := network_compute_noc_transformation_wcctm_saf; add (request_list, a_request); sequential_framework_request (sys, request_list, response_list); write_title_and_text (response_list); end compute_wcctm_saf_transformation; procedure compute_ectm_wormhole_transformation (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.networks) = 0) then show_message_box (lb_define_networks_before (current_language)); return; end if; initialize (response_list); initialize (request_list); initialize (a_request); a_request.statement := network_compute_noc_transformation_ectm_wormhole; add (request_list, a_request); sequential_framework_request (sys, request_list, response_list); write_title_and_text (response_list); end compute_ectm_wormhole_transformation; procedure compute_wcctm_wormhole_transformation (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.networks) = 0) then show_message_box (lb_define_networks_before (current_language)); return; end if; initialize (response_list); initialize (request_list); initialize (a_request); a_request.statement := network_compute_noc_transformation_wcctm_wormhole; add (request_list, a_request); sequential_framework_request (sys, request_list, response_list); write_title_and_text (response_list); end compute_wcctm_wormhole_transformation; procedure set_spacewire_scm_transformation (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.networks) = 0) then show_message_box (lb_define_networks_before (current_language)); return; end if; initialize (response_list); initialize (request_list); initialize (a_request); a_request.statement := network_set_spacewire_transformation_scm; add (request_list, a_request); sequential_framework_request (sys, request_list, response_list); write_title_and_text (response_list); end set_spacewire_scm_transformation; procedure set_ectm_saf_transformation (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.networks) = 0) then show_message_box (lb_define_networks_before (current_language)); return; end if; initialize (response_list); initialize (request_list); initialize (a_request); a_request.statement := network_set_noc_transformation_ectm_saf; add (request_list, a_request); sequential_framework_request (sys, request_list, response_list); write_title_and_text (response_list); end set_ectm_saf_transformation; procedure set_wcctm_saf_transformation (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.networks) = 0) then show_message_box (lb_define_networks_before (current_language)); return; end if; initialize (response_list); initialize (request_list); initialize (a_request); a_request.statement := network_set_noc_transformation_wcctm_saf; add (request_list, a_request); sequential_framework_request (sys, request_list, response_list); write_title_and_text (response_list); end set_wcctm_saf_transformation; procedure set_ectm_wormhole_transformation (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.networks) = 0) then show_message_box (lb_define_networks_before (current_language)); return; end if; initialize (response_list); initialize (request_list); initialize (a_request); a_request.statement := network_set_noc_transformation_ectm_wormhole; add (request_list, a_request); sequential_framework_request (sys, request_list, response_list); write_title_and_text (response_list); end set_ectm_wormhole_transformation; procedure set_wcctm_wormhole_transformation (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.networks) = 0) then show_message_box (lb_define_networks_before (current_language)); return; end if; initialize (response_list); initialize (request_list); initialize (a_request); a_request.statement := network_set_noc_transformation_wcctm_wormhole; add (request_list, a_request); sequential_framework_request (sys, request_list, response_list); write_title_and_text (response_list); end set_wcctm_wormhole_transformation; end graphical_editor.cheddar_callbacks.tool_menu;