------------------------------------------------------------------------------ ------------------------------------------------------------------------------ -- 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-2020, 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 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$ -- $Date$ -- $Author: singhoff $ ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ with Ada.Text_IO; use Ada.Text_IO; with Ada.IO_Exceptions; use Ada.IO_Exceptions; with Ada.Strings.Unbounded; use Ada.Strings.Unbounded; with unbounded_strings; use unbounded_strings; with unbounded_strings; use unbounded_strings.unbounded_string_list_package; with Gtk; use Gtk; with Gtk.Menu_Item; use Gtk.Menu_Item; with Gtk.Main; use Gtk.Main; with Glib.Error; use Glib.Error; with Gtk.Text_Buffer; use Gtk.Text_Buffer; with Gtk.Text_Tag_Table; use Gtk.Text_Tag_Table; with Gtk.Widget; use Gtk.Widget; with Gtk.Window; use Gtk.Window; with Gtkada.Dialogs; use Gtkada.Dialogs; with Gtkada.Builder; use Gtkada.Builder; with GNAT.Command_Line; use GNAT.Command_Line; with GNAT.Current_Exception; use GNAT.Current_Exception; with GNAT.OS_Lib; use GNAT.OS_Lib; with framework; use framework; with initialize_framework; use initialize_framework; with framework_config; use framework_config; with framework_config.extended; use framework_config.extended; with editor_config; use editor_config; with call_framework; use call_framework; with call_scheduling_framework; use call_scheduling_framework; with io_tools; use io_tools; with translate; use translate; with version; use version; with xml_generic_parsers; use xml_generic_parsers; with xml_generic_parsers.architecture; use xml_generic_parsers.architecture; with aadl_parsers; use aadl_parsers; with systems; use systems; with debug; use debug; with processors; use processors; with cache_set; use cache_set; with cache_block_set; use cache_block_set; with cache_access_profile_set; use cache_access_profile_set; with task_group_set; use task_group_set; with message_set; use message_set; with network_set; use network_set; with event_analyzer_set; use event_analyzer_set; with deployment_set; use deployment_set; with cfg_set; use cfg_set; with cfg_node_set; use cfg_node_set; with cfg_edge_set; use cfg_edge_set; with processor_set; use processor_set; with buffer_set; use buffer_set; with resource_set; use resource_set; with address_space_set; use address_space_set; with scheduler_interface; use scheduler_interface; with task_set; use task_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 multiprocessor_services; use multiprocessor_services; with graphical_editor.messages; use graphical_editor.messages; with graphical_editor.cheddar_callbacks; use graphical_editor.cheddar_callbacks; with graphical_editor; use graphical_editor; with graphical_editor.message_text; use graphical_editor.message_text; with graphical_editor.scheduling_simulation_callbacks; use graphical_editor.scheduling_simulation_callbacks; with graphical_editor.scheduling_simulation_draw_callbacks; use graphical_editor.scheduling_simulation_draw_callbacks; with graphical_editor.draw_scheduling; use graphical_editor.draw_scheduling; with graphical_editor.colors; use graphical_editor.colors; procedure cheddar is procedure usage is begin Put_Line ("Cheddar is a free real-time scheduling analysis tool."); Put_Line ("This program provides services to automatically check temporal constraints of an architecture models composed of tasks/processors/cores/buffers/..."); New_Line; Put_Line ("Check Cheddar home page for details : http://beru.univ-brest.fr/~singhoff/cheddar"); New_Line; New_Line; Put_Line ("Usage : cheddar [switches] foo"); Put_Line (" where foo can be : "); Put_Line (" - an unique XML file "); Put_Line (" - one or several AADL files"); New_Line; Put_Line (" Switches can be :"); Put_Line (" -u get this help"); Put_Line (" -l select a language : ""fr"" for français; ""en"" for english ; default is english"); Put (" Default language is "); if (current_language = english) then Put ("English."); else Put ("Français."); end if; New_Line; Put (" -a the file names given to cheddar contain AADL descriptions instead of an XML file"); Put_Line (" Only one XML file can be provided to Cheddar but several AADL files can be sent to Cheddar."); Put_Line (" -I directory-name : gives an extra directory name where to look for XML or AADL files. By default, Cheddar only looks for project files into the Cheddar's current directory."); Put_Line (" -d activate Cheddar's debug mode "); Put_Line (" -i directory of glades files "); Put_Line (" -f font-name to select a new font to be used in the Cheddar editor"); Put_Line (" -c put the current Cheddar's configuration at the screen"); end usage; builder : gtkada_builder; error : Glib.Error.gerror; aadl_file : Boolean; a_dir_name : unbounded_string_ptr; project_file_name : unbounded_string_ptr; project_file_list : unbounded_string_list; begin -------------------------------------------------------- -- Initialize Cheddar -- Manage command lines -- Load files AADL/XML files -- Manage exception raised during AADL/XML files loading -------------------------------------------------------- copyright ("cheddar"); initialize_framework.set_initialize; initialize (sys); initialize (sched.all); initialize (project_file_list); event_table_file_name := empty_string; initialize (aadl_project_file_name); xml_event_table_file_name := To_Unbounded_String ("default_event_table.xml"); aadl_file := False; is_saved := False; is_new := True; begin loop case Getopt ("c d u l: a i I: f:") is when ASCII.NUL => exit; when 'c' => framework_config.extended.put; when 'a' => aadl_file := True; when 'd' => cheddar_debug := very_verbose; when 'f' => put_debug (" Selected font : " & Parameter); selected_font := To_Unbounded_String (Parameter); when 'i' => put_debug (" Install path : " & Parameter); install_path := To_Unbounded_String (Parameter); when 'I' => a_dir_name := new Unbounded_String; a_dir_name.all := To_Unbounded_String (Parameter); put_debug (" Project file directory : " & To_String (a_dir_name.all)); add (project_file_dir_list, a_dir_name); when 'u' => usage; OS_Exit (0); when 'l' => if (Parameter /= "fr") and (Parameter /= "en") then Put_Line ("cheddar.adb : invalid language parameter"); New_Line; usage; OS_Exit (0); else if Parameter = "fr" then current_language := francais; else current_language := english; end if; end if; when others => usage; OS_Exit (0); end case; end loop; loop project_file_name := new Unbounded_String; project_file_name.all := To_Unbounded_String (Get_Argument (Do_Expansion => True)); exit when project_file_name.all = empty_string; put_debug ("Project file to load : " & To_String (project_file_name.all)); add (project_file_list, project_file_name); end loop; if (get_number_of_elements (project_file_list) > 1) and (not aadl_file) then Put_Line ("cheddar.adb : can not load more than one XML file at the same time "); OS_Exit (0); end if; call_framework.initialize (aadl_file); glade_path := install_path & "glade_files/"; if (get_number_of_elements (project_file_list) > 0) then is_new := False; is_saved := True; if (aadl_file) then duplicate (project_file_list, aadl_project_file_name); systems.read_from_aadl_file (sys, project_file_dir_list, aadl_project_file_name); else project_file_name := get_head (project_file_list); xml_project_file_name := project_file_name.all; systems.read_from_xml_file (sys, project_file_dir_list, xml_project_file_name); end if; end if; exception when cache_not_found => Put_Line ("cheddar.adb : cache not found ; " & Exception_Message); OS_Exit (0); when address_space_not_found => Put_Line ("cheddar.adb : address space not found ; " & Exception_Message); OS_Exit (0); when buffer_not_found => Put_Line ("cheddar.adb : buffer not found ; " & Exception_Message); OS_Exit (0); when deployment_not_found => Put_Line ("cheddar.adb : deployment not found ; " & Exception_Message); OS_Exit (0); when processor_not_found => Put_Line ("cheddar.adb : processor not found ; " & Exception_Message); OS_Exit (0); when network_not_found => Put_Line ("cheddar.adb : network not found ; " & Exception_Message); OS_Exit (0); when event_analyzer_not_found => Put_Line ("cheddar.adb : event analyzer not found ; " & Exception_Message); OS_Exit (0); when message_not_found => Put_Line ("cheddar.adb : message not found ; " & Exception_Message); OS_Exit (0); when core_unit_not_found => Put_Line ("cheddar.adb : core unit not found ; " & Exception_Message); OS_Exit (0); when task_not_found => Put_Line ("cheddar.adb : task not found ; " & Exception_Message); OS_Exit (0); when resource_not_found => Put_Line ("cheddar.adb : resource not found ; " & Exception_Message); OS_Exit (0); when task_group_not_found => Put_Line ("cheddar.adb : task group not found ; " & Exception_Message); OS_Exit (0); when cfg_node_not_found => Put_Line ("cheddar.adb : cfg node not found ; " & Exception_Message); OS_Exit (0); when cfg_edge_not_found => Put_Line ("cheddar.adb : cfg edge not found ; " & Exception_Message); OS_Exit (0); when cfg_not_found => Put_Line ("cheddar.adb : cfg not found ; " & Exception_Message); OS_Exit (0); when cache_access_profile_not_found => Put_Line ("cheddar.adb : cache access profile not found ; " & Exception_Message); OS_Exit (0); when systems.invalid_parameter => Put_Line ("cheddar.adb : invalid system attribute ; " & Exception_Message); OS_Exit (0); when cache_set.invalid_parameter => Put_Line ("cheddar.adb : invalid cache attribute ; " & Exception_Message); OS_Exit (0); when task_group_set.invalid_parameter => Put_Line ("cheddar.adb : invalid task_group attribute ; " & Exception_Message); OS_Exit (0); when network_set.invalid_parameter => Put_Line ("cheddar.adb : invalid network attribute ; " & Exception_Message); OS_Exit (0); when message_set.invalid_parameter => Put_Line ("cheddar.adb : invalid message attribute ; " & Exception_Message); OS_Exit (0); when deployment_set.invalid_parameter => Put_Line ("cheddar.adb : invalid deployment attribute ; " & Exception_Message); OS_Exit (0); when event_analyzer_set.invalid_parameter => Put_Line ("cheddar.adb : invalid event_analyzer attribute ; " & Exception_Message); OS_Exit (0); when cfg_set.invalid_parameter => Put_Line ("cheddar.adb : invalid cfg attribute ; " & Exception_Message); OS_Exit (0); when cfg_node_set.invalid_parameter => Put_Line ("cheddar.adb : invalid cfg node attribute ; " & Exception_Message); OS_Exit (0); when cfg_edge_set.invalid_parameter => Put_Line ("cheddar.adb : invalid cfg edge attribute ; " & Exception_Message); OS_Exit (0); when task_set.invalid_parameter => if (aadl_file = True) then Put_Line ("Invalid thread component attribute ; " & Exception_Message); else Put_Line ("cheddar.adb : invalid task attribute ; " & Exception_Message); end if; OS_Exit (0); when address_space_set.invalid_parameter => if (aadl_file = True) then Put_Line ("Invalid process component attribute ; " & Exception_Message); else Put_Line ("cheddar.adb : invalid address space attribute ; " & Exception_Message); end if; OS_Exit (0); when processor_set.invalid_parameter => if (aadl_file = True) then Put_Line ("Invalid processor component attribute ; " & Exception_Message); else Put_Line ("cheddar.adb : invalid processor attribute ; " & Exception_Message); end if; OS_Exit (0); when buffer_set.invalid_parameter => if (aadl_file = True) then Put_Line ("Invalid event data port attribute ; " & Exception_Message); else Put_Line ("cheddar.adb : invalid buffer attribute ; " & Exception_Message); end if; OS_Exit (0); when resource_set.invalid_parameter => if (aadl_file = True) then Put_Line ("Invalid data component attribute ; " & Exception_Message); else Put_Line ("cheddar.adb : invalid resource attribute ; " & Exception_Message); end if; OS_Exit (0); when GNAT.Command_Line.Invalid_Switch => Put_Line ("cheddar.adb : invalid Switch ; " & Full_Switch); usage; OS_Exit (0); when GNAT.Command_Line.Invalid_Parameter => Put_Line ("cheddar.adb : missing parameter for switch ; " & Full_Switch); usage; OS_Exit (0); when xml_read_error => Put_Line ("cheddar.adb : Can not read project file ; Xml Fatal Error ; " & Exception_Message); OS_Exit (0); when aadl_read_error => Put_Line ("cheddar.adb : Can not read project files ; AADL parsing Error ; " & Exception_Message); OS_Exit (0); when Ada.IO_Exceptions.Name_Error => Put_Line ("cheddar.adb : Can not open project files, Name_Error"); OS_Exit (0); when Ada.IO_Exceptions.Status_Error => Put_Line ("cheddar.adb : Can not open project files, Status_Error"); OS_Exit (0); when Ada.IO_Exceptions.Mode_Error => Put_Line ("cheddar.adb : Can not open project files, Mode_Error"); OS_Exit (0); when Ada.IO_Exceptions.Use_Error => Put_Line ("cheddar.adb : Can not open project files, Use_Error"); OS_Exit (0); when Ada.IO_Exceptions.Device_Error => Put_Line ("cheddar.adb : Can not open project files, Device_Error"); OS_Exit (0); when Ada.IO_Exceptions.End_Error => Put_Line ("cheddar.adb : Can not open project files, End_Error"); OS_Exit (0); when Ada.IO_Exceptions.Data_Error => Put_Line ("cheddar.adb : Can not open project files, Data_Error"); OS_Exit (0); when Ada.IO_Exceptions.Layout_Error => Put_Line ("cheddar.adb : Can not open project files, Layout_Error"); OS_Exit (0); when others => Put_Line ("cheddar.adb : Can not load XML/AADL/SC file "); Put_Line ("Exception name : " & Exception_Name); Put_Line ("Exception message : " & Exception_Message); OS_Exit (0); end; -------------------------------------------------------- -- Initialize Machine man interface -- Manage exception raises during machine man interface use -------------------------------------------------------- Gtk.Main.Init; Gtk_New (builder); error := Add_From_File (builder, To_String (glade_path) & "cheddar.glade"); if error /= null then Ada.Text_IO.Put_Line ("Error : " & Get_Message (error)); Error_Free (error); return; end if; -- Initialize widgets of the main window -- build_color_array; buffer_editor_cheddar := gtk_text_buffer (Get_Object (builder, "textbuffer2")); drawing_area_cheddar := Get_Widget (builder, "drawingarea1"); window_cheddar := gtk_window (Get_Object (builder, "window1")); initialize_message_text_properties; starting_text; zoom_level_entry := gtk_text_buffer (Get_Object (builder, "textbuffer1")); Set_Text (zoom_level_entry, To_String (display_zoom)); model_file_name_entry := gtk_text_buffer (Get_Object (builder, "textbuffer3")); Set_Text (model_file_name_entry, To_String (simple_name (project_file_name.all))); -- Connect all event handlers -- Register_Handler (Builder => builder, Handler_Name => "on_menuitem14_activate", Handler => graphical_editor.cheddar_callbacks.cache'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem48_activate", Handler => graphical_editor.cheddar_callbacks.run_analysis_on_event_table'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem68_activate", Handler => graphical_editor.cheddar_callbacks.end_to_end_display_one_step'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem63_activate", Handler => graphical_editor.cheddar_callbacks.check_address_space'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem64_activate", Handler => graphical_editor.cheddar_callbacks.check_address_space_update'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem69_activate", Handler => graphical_editor.cheddar_callbacks.end_to_end_update_one_step'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem70_activate", Handler => graphical_editor.cheddar_callbacks.end_to_end_display_all_steps' access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem71_activate", Handler => graphical_editor.cheddar_callbacks.end_to_end_update_all_steps'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem72_activate", Handler => graphical_editor.cheddar_callbacks.deadline_display_chetto'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem73_activate", Handler => graphical_editor.cheddar_callbacks.deadline_update_chetto'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem74_activate", Handler => graphical_editor.cheddar_callbacks.priorities_display_chetto'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem75_activate", Handler => graphical_editor.cheddar_callbacks.priorities_update_chetto'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem11_activate", Handler => graphical_editor.cheddar_callbacks.deployment'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem79_activate", Handler => graphical_editor.cheddar_callbacks.resource_priority_inversion'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem80_activate", Handler => graphical_editor.cheddar_callbacks.resource_deadlock'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem93_activate", Handler => graphical_editor.cheddar_callbacks.ceiling_priority_display'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem94_activate", Handler => graphical_editor.cheddar_callbacks.ceiling_priority_update'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem81_activate", Handler => graphical_editor.cheddar_callbacks.bound_blocking_display'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem82_activate", Handler => graphical_editor.cheddar_callbacks.bound_blocking_update'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem24_activate", Handler => graphical_editor.cheddar_callbacks.event_analyzer'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem40_activate", Handler => graphical_editor.cheddar_callbacks.scheduling_simulation'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem41_activate", Handler => graphical_editor.cheddar_callbacks.scheduling_feasibility_widget' access); Register_Handler (Builder => builder, Handler_Name => "on_toolbutton11_clicked", Handler => graphical_editor.scheduling_simulation_callbacks .show_scheduling_simulation_duration_widget' access); Register_Handler (Builder => builder, Handler_Name => "on_toolbutton1_clicked", Handler => graphical_editor.scheduling_simulation_callbacks .show_scheduling_simulation_zoom_fit' access); Register_Handler (Builder => builder, Handler_Name => "on_toolbutton12_clicked", Handler => graphical_editor.scheduling_simulation_callbacks .show_scheduling_simulation_zoom_in' access); Register_Handler (Builder => builder, Handler_Name => "on_toolbutton13_clicked", Handler => graphical_editor.scheduling_simulation_callbacks .show_scheduling_simulation_zoom_out' access); Register_Handler (Builder => builder, Handler_Name => "on_toolbutton14_clicked", Handler => graphical_editor.scheduling_simulation_callbacks .show_scheduling_simulation_zoom_reset' access); Register_Handler (Builder => builder, Handler_Name => "on_toolbutton10_clicked", Handler => graphical_editor.cheddar_callbacks.scheduling_feasibility'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem15_activate", Handler => graphical_editor.cheddar_callbacks.core'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem21_activate", Handler => graphical_editor.cheddar_callbacks.buffer'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem16_activate", Handler => graphical_editor.cheddar_callbacks.processor'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem17_activate", Handler => graphical_editor.cheddar_callbacks.network'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem18_activate", Handler => graphical_editor.cheddar_callbacks.address_space'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem19_activate", Handler => graphical_editor.cheddar_callbacks.taskc'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem10_activate", Handler => graphical_editor.cheddar_callbacks.task_group'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem23_activate", Handler => graphical_editor.cheddar_callbacks.message'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem91_activate", Handler => graphical_editor.cheddar_callbacks.precedence_dependency'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem92_activate", Handler => graphical_editor.cheddar_callbacks.time_triggered_dependency'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem95_activate", Handler => graphical_editor.cheddar_callbacks.queueing_buffer_dependency'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem96_activate", Handler => graphical_editor.cheddar_callbacks.black_board_buffer_dependency' access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem97_activate", Handler => graphical_editor.cheddar_callbacks .asynchronous_communication_dependency' access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem98_activate", Handler => graphical_editor.cheddar_callbacks.resource_dependency'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem27_activate", Handler => graphical_editor.cheddar_callbacks.clear_workspace'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem20_activate", Handler => graphical_editor.cheddar_callbacks.resource'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem30_activate", Handler => graphical_editor.cheddar_callbacks.open_xml'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem50_activate", Handler => graphical_editor.cheddar_callbacks.import_event_table'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem34_activate", Handler => graphical_editor.cheddar_callbacks.import_aadl'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem35_activate", Handler => graphical_editor.cheddar_callbacks.export_aadl'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem38_activate", Handler => graphical_editor.cheddar_callbacks.aadl_option'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem6_activate", Handler => graphical_editor.cheddar_callbacks.set_priorities_audsley_opa'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem7_activate", Handler => graphical_editor.cheddar_callbacks.set_priorities_opa_crpd_pt'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem88_activate", Handler => graphical_editor.cheddar_callbacks .set_priorities_opa_crpd_pt_simplified' access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem87_activate", Handler => graphical_editor.cheddar_callbacks.set_priorities_opa_crpd_tree' access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem42_activate", Handler => graphical_editor.cheddar_callbacks.set_priorities_rm'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem43_activate", Handler => graphical_editor.cheddar_callbacks.set_priorities_dm'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem56_activate", Handler => graphical_editor.cheddar_callbacks.scheduling_option'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem90_activate", Handler => graphical_editor.cheddar_callbacks.feasibility_test_option'access); Register_Handler (Builder => builder, Handler_Name => "on_toolbutton2_clicked", Handler => graphical_editor.cheddar_callbacks.open_xml'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem31_activate", Handler => graphical_editor.cheddar_callbacks.save_xml'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem25_activate", Handler => graphical_editor.cheddar_callbacks.export_arinc653_tsp'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem49_activate", Handler => graphical_editor.cheddar_callbacks.export_event_table'access); Register_Handler (Builder => builder, Handler_Name => "on_toolbutton5_clicked", Handler => graphical_editor.cheddar_callbacks.save_xml'access); Register_Handler (Builder => builder, Handler_Name => "on_toolbutton8_clicked", Handler => graphical_editor.cheddar_callbacks.clear_workspace'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem36_activate", Handler => graphical_editor.cheddar_callbacks.export_cheddar_properties_set' access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem37_activate", Handler => graphical_editor.cheddar_callbacks.export_aadl_standard_properties_set' access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem32_activate", Handler => graphical_editor.cheddar_callbacks.save_as_xml'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem62_activate", Handler => graphical_editor.cheddar_callbacks.compute_response_time_density' access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem51_activate", Handler => graphical_editor.cheddar_callbacks.scheduling_partition_best_fit' access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem53_activate", Handler => graphical_editor.cheddar_callbacks.scheduling_partition_next_fit' access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem54_activate", Handler => graphical_editor.cheddar_callbacks.scheduling_partition_first_fit' access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem55_activate", Handler => graphical_editor.cheddar_callbacks.scheduling_partition_small_task' access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem52_activate", Handler => graphical_editor.cheddar_callbacks.scheduling_partition_general' access); Register_Handler (Builder => builder, Handler_Name => "on_toolbutton6_clicked", Handler => graphical_editor.cheddar_callbacks.save_as_xml'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem29_activate", Handler => graphical_editor.cheddar_callbacks.initialyse_system'access); Register_Handler (Builder => builder, Handler_Name => "on_toolbutton4_clicked", Handler => graphical_editor.cheddar_callbacks.initialyse_system'access); Register_Handler (Builder => builder, Handler_Name => "on_window1_destroy", Handler => graphical_editor.cheddar_callbacks.quit'access); Register_Handler (Builder => builder, Handler_Name => "on_imagemenuitem11_activate", Handler => graphical_editor.cheddar_callbacks.about'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem76_activate", Handler => graphical_editor.cheddar_callbacks.analysis_buffer_feasibility'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem77_activate", Handler => graphical_editor.cheddar_callbacks.analysis_buffer_simulation'access); Register_Handler (Builder => builder, Handler_Name => "on_Manual_activate", Handler => graphical_editor.cheddar_callbacks.manual'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem9_activate", Handler => graphical_editor.cheddar_callbacks.scheduling_ref'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem39_activate", Handler => graphical_editor.cheddar_callbacks.new_quit_proc'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem47_activate", Handler => graphical_editor.cheddar_callbacks.draw_time_line_from_event_table' access); Register_Handler (Builder => builder, Handler_Name => "on_toolbutton3_clicked", Handler => graphical_editor.cheddar_callbacks.new_quit_proc'access); Register_Handler (Builder => builder, Handler_Name => "gtk_main_quit", Handler => graphical_editor.cheddar_callbacks.new_quit'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem46_activate", Handler => graphical_editor.cheddar_callbacks.tindell_transaction_wcrt'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem84_activate", Handler => graphical_editor.cheddar_callbacks.audsley_transaction_wcrt'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem85_activate", Handler => graphical_editor.cheddar_callbacks.palencia_transaction_wcrt'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem86_activate", Handler => graphical_editor.cheddar_callbacks.wcdops_plus_transaction_wcrt' access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem83_activate", Handler => graphical_editor.cheddar_callbacks.wcdops_plus_nim_transaction_wcrt' access); Register_Handler (Builder => builder, Handler_Name => "on_menuitemImportCFG_activate", Handler => graphical_editor.cheddar_callbacks.import_cfg'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitemComputeCAP_activate", Handler => graphical_editor.cheddar_callbacks.compute_task_cache_access_profile' access); Register_Handler (Builder => builder, Handler_Name => "on_menuitem99_activate", Handler => graphical_editor.cheddar_callbacks.design_pattern_analysis'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitembiba", Handler => graphical_editor.cheddar_callbacks.compute_mils_biba'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitembelllapadula", Handler => graphical_editor.cheddar_callbacks.compute_mils_belllapadula'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitemchinisewall", Handler => graphical_editor.cheddar_callbacks.compute_mils_chinesewall'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitemwarshall", Handler => graphical_editor.cheddar_callbacks.compute_mils_warshall'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitemnocpath", Handler => graphical_editor.cheddar_callbacks.compute_noc_path_delay'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitemnocdirect", Handler => graphical_editor.cheddar_callbacks.compute_noc_direct_delay'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitemnocindirect", Handler => graphical_editor.cheddar_callbacks.compute_noc_indirect_delay'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitemnoccom", Handler => graphical_editor.cheddar_callbacks.compute_noc_communication_delay' access); Register_Handler (Builder => builder, Handler_Name => "on_menuitemschedulinganomaliesactivate", Handler => graphical_editor.cheddar_callbacks.compute_scheduling_anomalies' access); Register_Handler (Builder => builder, Handler_Name => "on_menuitemscm", Handler => graphical_editor.cheddar_callbacks .compute_spacewire_scm_transformation' access); Register_Handler (Builder => builder, Handler_Name => "on_menuitemectmsaf", Handler => graphical_editor.cheddar_callbacks.compute_ectm_saf_transformation' access); Register_Handler (Builder => builder, Handler_Name => "on_menuitemwcctmsaf", Handler => graphical_editor.cheddar_callbacks.compute_wcctm_saf_transformation' access); Register_Handler (Builder => builder, Handler_Name => "on_menuitemectmwormhole", Handler => graphical_editor.cheddar_callbacks .compute_ectm_wormhole_transformation' access); Register_Handler (Builder => builder, Handler_Name => "on_menuitemwcctmwormhole", Handler => graphical_editor.cheddar_callbacks .compute_wcctm_wormhole_transformation' access); Register_Handler (Builder => builder, Handler_Name => "on_menuitemsetscm", Handler => graphical_editor.cheddar_callbacks.set_spacewire_scm_transformation' access); Register_Handler (Builder => builder, Handler_Name => "on_menuitemsetectmsaf", Handler => graphical_editor.cheddar_callbacks.set_ectm_saf_transformation'access); Register_Handler (Builder => builder, Handler_Name => "on_menuitemsetwcctmsaf", Handler => graphical_editor.cheddar_callbacks.set_wcctm_saf_transformation' access); Register_Handler (Builder => builder, Handler_Name => "on_menuitemsetectmwormhole", Handler => graphical_editor.cheddar_callbacks.set_ectm_wormhole_transformation' access); Register_Handler (Builder => builder, Handler_Name => "on_menuitemsetwcctmwormhole", Handler => graphical_editor.cheddar_callbacks.set_wcctm_wormhole_transformation' access); Do_Connect (builder); Gtk.Widget.Show_All (Get_Widget (builder, "window1")); Gtk.Main.Main; exception when others => Put_Line ("This is an internal Cheddar bug ... sorry"); Put_Line ("WARNING : your project was saved in the file cheddar_bug.xml"); Put_Line ("Exception name : " & Exception_Name); Put_Line ("Exception message : " & Exception_Message); systems.write_to_xml_file (sys, To_Unbounded_String ("cheddar_bug.xml")); Put_Line ("Please, send a bug report to cheddar@listes.univ-brest.fr"); Put_Line ("Do not forget to join your AADL/XML/SC Cheddar project files with your bug report"); end cheddar;