include/fsm.h File Referenceinclude/fsm.hfsm (Finite State Machine) management header #include <stdbool.h>#include <stddef.h>#include <string.h>#include <gtk-4.0/gtk/gtk.h>Classes struct fsm_struct_journal_unitphantom documentation used to test the functioning of doxygen struct fsm_struct_journalphantom documentation used to test the functioning of doxygen struct fsm_struct_list_toolphantom documentation used to test the functioning of doxygen struct fsm_struct_list_dataphantom documentation used to test the functioning of doxygen struct fsm_struct_list_dispphantom documentation used to test the functioning of doxygen Macros #define JOURNAL_LOG_MAX_LENGTH 255#define n_rules 128#define n_objects 32#define n_situations 128Typedefs typedef struct fsm_struct_journal_unit fsm_struct_journal_unitphantom documentation used to test the functioning of doxygen typedef struct fsm_struct_list_tool fsm_struct_list_toolphantom documentation used to test the functioning of doxygen typedef struct fsm_struct_list_data fsm_struct_list_dataphantom documentation used to test the functioning of doxygen typedef struct fsm_struct_list_disp fsm_struct_list_dispphantom documentation used to test the functioning of doxygen Enumerations enum fsm_enum_journal_severity { CRITICAL
, ERROR
, WARNING
, INFO
, MESSAGE
, DEBUG
, SPEW
}enum fsm_enum_journal_source { SOURCE
, TARGET
, JOURNAL
, FSM
, PREFER
, MAIN
, APP
, WIDGETS
, SIGNAL
, MAIN_WINDOW
, DIALOG_WINDOW
, MODAL_WINDOW
, TEXT_WINDOW
, AUTO_NOTIFICATION
, TOPBAR
, TOPBAR_LEFT
, TOPBAR_RIGHT
, TOPBAR_CENTER
, SYNTH_PAGE
, STATE_PAGE
, RULES_PAGE
, MEASURES_PAGE
, RESULTS_PAGE
, SenumYNTH_GLAREA
, SYNTH_ALL_RESULTS
, SYNTH_TIME_DEP_RESULTS
, SYNTH_TIME_INDEP_RESULTS
, STATE_TOP
, STATE_BOTTOM
, STATE_GLAREA
, STATE_CAMERA
, RULE_GEOMETRY
, RULE_GLAREA
, RULE_CAMERA
, RULE_ALGEBRA
, RULE_CONDITION
, RULE_ASSIGN
, RULE_ID
, RULES_TREE
, RULES_COMPARE
, RULES_USE
, MEASURES_TOOLS
, MEASURES__ACTIVITY
, MEASURES__DISPLAY
, RESULTS
, TIME_DEP_RESULTS
, TIME_INDEP_RESULTS
, WIDGET
, BUTTON
, SCROLL
, GLAREA
, TEXT
, LABEL
, TREE
, SLIDER
, EXPANDER
, ENTRY
, SWITCH_STATE_RULES_DATA
, SLIDER_X
, SLIDER_Y
, SLIDER_Z
, SLIDER_A
, SLIDER_B
, SLIDER_C
}enum fsm_enum_exec_edit { EXEC
, EDIT
}enum fsm_enum_state_rules_data { SYNTH
, STATE
, RULES
, DATA
}enum fsm_enum_store_restore_reset { STORE
, RESTORE
, RESET
}enum fsm_enum_measure_type { DATE_RULE_EXEC
, RULE_EXEC_NB
, OBJECT_NB
, ELAPSED_TIME
}Functions void fsm_journal_publish (fsm_struct_journal jj)void fsm_journal_init (fsm_struct_journal *jj)2024-09-22 What types of events should be reported ? (fsm, widgets, ... ) For what purpose ? What information must be collected and transmitted ? How do you name and classify this information ? How do you present it ? void fsm_journal_push_front (fsm_struct_journal *jj, const char *file_source, const char *function_source, const char *string_value)void fsm_journal_clear (fsm_struct_journal *jj, const char *file_source, const char *function_source, const char *string_value)long fsm_journal_pop_back (fsm_struct_journal *jj, const char *file_source, const char *function_source, const char *string_value)int fsm_journal_length (fsm_struct_journal jj)void fsm_journal_seek (fsm_struct_journal jj, long usec, const char *file_source, const char *function_source, const char *string_value)void fsm_journal_publication_request ()The fsm_journal_publication_request() is called only once, by main(), just after closing the app and before ending the program. void fsm_journal_event (int severity, int source, const char *file_source, const char *function_source, const char *string_value)It is mandatory for any event to call this function to be published in the journal. void fsm_init (char *message)fsm init is the first function called by main.c It initiates the journal and the four lists: 'measures', 'results', 'displayables results' and 'preferences'. void fsm_list_init_preferences ()void fsm_list_init_measures ()void fsm_list_init_results ()void fsm_list_init_displayables ()int fsm_get_exec_edit ()some client pages (in particular "state" and "rules") will be displayed and behave differently depending on whether the fsm is in edit or run state. int fsm_get_state_rules_data ()The value of the static int choice_STATE_RULES_DATA can be one of the enum include/fsm enum fsm_enum_state_rules_data. void fsm_set_exec_edit (int value)setter for the static value: 'choice_STATE_RULES_DATA' (in this file) void fsm_set_state_rules_data (int value)setter for the static value: 'choice_STATE_RULES_DATA' (in this file) void fsm_set_store_restore_reset (int choice, int value)bool fsm_get_preferences_state ()getter for the static boolean: 'preferences_have_been_modified' void fsm_set_preferences_modified (bool value)setter for the static boolean: 'preferences_have_been_modified' void fsm_add_measure (char *measure_name)void fsm_add_result (char *result_name)void fsm_add_displayable (char *displayable_name)void fsm_reset_all_situations_values (int value)void fsm_list_tools_insert (fsm_struct_list_tool **tl, int value)int fsm_list_tools_pop (fsm_struct_list_tool **tl)int fsm_list_tools_length (fsm_struct_list_tool *tl)void fsm_list_tools_clear (fsm_struct_list_tool **tl)void fsm_list_tools_view (fsm_struct_list_tool *tl)void fsm_list_tools_test ()void fsm_rule_trig_measure (int rule_id, int object_id, int measure_id)void fsm_add_data (fsm_struct_list_data d, int *p_data, int *p_target)int fsm_get_data (fsm_struct_list_data d, int from, int to)void fsm_remove_data (fsm_struct_list_data d, int *p_data)Detailed Descriptionfsm (Finite State Machine) management header This file is part of Gem-graph. Enumeration Type Documentationfsm_enum_journal_severityfsm_enum_journal_severityfsm.hfsm.hfsm_enum_journal_severityenum fsm_enum_journal_severity* * * - J O U R N A L M E T A R U L E S - * * * *ref: sudo cat /var/log/messagesstructure d'un log:daterang (n° d'ordre)fichierfonctionvaleur, paramètre, descriptif, contexte,... (tout ce qui peut contribuer à améliorer la compréhension du journal) any value that can qualify the event and provides useful information when reading the log.Un seul fsm_journal_event() par fonction ? sauf si cette fonction génère plusieurs autres fonctions d'intérêt ?S'il y a deux fsm_journal_event() (begin / end) dans une fonction, ils doivent avoir la même étiquette (les mêmes valeurs) : SEVERITY & SOURCE* * * - J O U R N A L M E T A R U L E S - * * * Function Documentationfsm_add_displayable()fsm_add_displayablefsm.hfsm.hfsm_add_displayablevoid fsm_add_displayable (char * displayable_name)DateAuthorSee also
Parameters
fsm_get_exec_edit()fsm_get_exec_editfsm.hfsm.hfsm_get_exec_editint fsm_get_exec_edit ( )some client pages (in particular "state" and "rules") will be displayed and behave differently depending on whether the fsm is in edit or run state. Any function which modifies the appearance or behavior of these pages must use this getter to access the choice_EXEC_EDIT value.see include/fsm enum fsm_enum_exec_edit { EXEC, EDIT } The current int may be replaced by a boolean . TODOSince2024-06See alsosrc/widget/one_rule/dispatch src/widget/state/dispatch * 2 src/signalchoice_EXEC_EDIT and include/fsm/enum fsm_enum_exec_edit {}Returnschoice_EXEC_EDIT fsm_get_preferences_state()fsm_get_preferences_statefsm.hfsm.hfsm_get_preferences_statebool fsm_get_preferences_state ( )getter for the static boolean: 'preferences_have_been_modified' Since2024-08See alsoTODO A function must obtain this boolean when it stores the current state of the fsm (including preferences) before closing the current session.Returnspreferences_have_been_modified fsm_get_state_rules_data()fsm_get_state_rules_datafsm.hfsm.hfsm_get_state_rules_dataint fsm_get_state_rules_data ( )The value of the static int choice_STATE_RULES_DATA can be one of the enum include/fsm enum fsm_enum_state_rules_data. To each value is associated a different page and different possible behaviors. Any function that modifies the client window must get this value.see include/fsm enum fsm_enum_state_rules_data { SYNTH, STATE, RULES, DATA }Since2024-06See alsosrc/widget/topbar/left src/signalReturnschoice_STATE_RULES_DATA fsm_init()fsm_initfsm.hfsm.hfsm_initvoid fsm_init (char * initial_message_from_main)fsm init is the first function called by main.c It initiates the journal and the four lists: 'measures', 'results', 'displayables results' and 'preferences'. The items selected in these lists define the current state of the fsm.Since2024-08See alsosrc/main/main()src/journal/fsm_journal_init() src/fsm/dispatch/fsm_journal_event() src/fsm/measures/manager/fsm_list_init_measures() src/fsm/results/manager/fsm_list_init_results() src/fsm/preferences/manager/fsm_list_init_displayables() src/fsm/preferences/manager/fsm_list_init_preferences()
Parameters
return fsm_journal_event()fsm_journal_eventfsm.hfsm.hfsm_journal_eventvoid fsm_journal_event (int severity, int source, const char * file_source, const char * function_source, const char * string_value)It is mandatory for any event to call this function to be published in the journal. Before publication, a filter can be applied here (and only here) to select only some events of interest (during debugging, for example).If there are too many events, a filter can be applied here to select a few interesting events for publication in the log.This filter can operate on any the following five parameters: severity, source, *file_source, *function_source, *string_value. See alsobelow (params)
Simple filters (on a single parameter) can be combined using the logical operators 'and' and 'or' and parentheses.Use: $ grep -r "fsm_journal_event" to confirm the callergraph calls.Since2024-08See alsosrc/journal.c/fsm_journal_push_front()src/main/main() src/widget/topbar/modal.c src/widget/topbar/right.c src/widget/topbar/dialog.c src/widget/topbar/left.c src/widget/topbar/dispatch.c * 3 src/widget/one_rule/dispatch.c src/widget/one_rule/algebra/conditions.c * 2 src/widget/measure/dispatch.c src/widget/dispatch.c * 3 src/widget/all_rules/dispatch.c src/fsm/preferences/manager.c * 8 src/fsm/measures/manager.c * 2 src/fsm/measures/tools_list.c * 4 src/fsm/dispatch.c * 10 src/fsm/results/manager.c src/util/tree.c src/signal.c * 38
Parameters
severity<>
See alsoenum fsm_enum_journal_severity in include/fsm.h 'severity' is a pre-defined value that must be associated to each event. It ranges from zero to six : CRITICAL ERROR WARNING INFO MESSAGE DEBUG SPEW 0 1 2 3 4 5 6
Parameters
source<>
See alsoenum fsm_enum_journal_source in include/fsm.h 'source' is a pre-defined value that can be associated to each event. It is not mandatory. It can be set to 'NULL'.
Parameters
*file_source<> the name of the file that emits the event. *function_source<> the function that emits the event. *string_value<> any value that can qualify the event and provides useful information when reading the log.
fsm_journal_init()fsm_journal_initfsm.hfsm.hfsm_journal_initvoid fsm_journal_init (fsm_struct_journal * jj)2024-09-22 What types of events should be reported ? (fsm, widgets, ... ) For what purpose ? What information must be collected and transmitted ? How do you name and classify this information ? How do you present it ? date clé (rank) fichier source fonction source +/- valeur time_t current_time = time(NULL);
Check if the time retrieval was successful if (current_time == ((time_t)-1)) printf("Error getting current time.\n"); Convert to local time format and print printf(" Current timestamp: %ld %s\n", current_time, message); printf(" Current time: %s", ctime(¤t_time));DateAuthorSee also
Parameters
return fsm_journal_length()fsm_journal_lengthfsm.hfsm.hfsm_journal_lengthint fsm_journal_length (fsm_struct_journal jj)DateAuthorSee also
Parameters
return fsm_journal_publication_request()fsm_journal_publication_requestfsm.hfsm.hfsm_journal_publication_requestvoid fsm_journal_publication_request ( )The fsm_journal_publication_request() is called only once, by main(), just after closing the app and before ending the program. This is to guarantee the chronological order of the events in the journal.The log is modified for each event but events can be send asynchronously. This is why the journal is only published once, before the end of "main()", Its chronological order is therefore guaranteed.src/journal.c/fsm_journal_publish() (called here) is the last function of the program to be executed.The fsm_struct_journal (gg_logs) is a static instance in this file. Therefore, all the functions that read or write it are in this file. This is to avoid uncontrolled operations on it.Since2024-08See alsosrc/main/main()src/journal/fsm_journal_publish() fsm_journal_publish()fsm_journal_publishfsm.hfsm.hfsm_journal_publishvoid fsm_journal_publish (fsm_struct_journal jj)DateAuthorSee also
Parameters
fsm_rule_trig_measure()fsm_rule_trig_measurefsm.hfsm.hfsm_rule_trig_measurevoid fsm_rule_trig_measure (int rule_id, int object_id, int measure_id)Since2024-09
Parameters
rule_idobject_idmeasure_id
fsm_set_exec_edit()fsm_set_exec_editfsm.hfsm.hfsm_set_exec_editvoid fsm_set_exec_edit (int choice)setter for the static value: 'choice_STATE_RULES_DATA' (in this file) see include/fsm enum fsm_enum_exec_edit { EXEC, EDIT }Since2024-08See alsosrc/signal * 2
Parameters
choice< a boolean value which can be "EXEC" or "EDIT"
fsm_set_preferences_modified()fsm_set_preferences_modifiedfsm.hfsm.hfsm_set_preferences_modifiedvoid fsm_set_preferences_modified (bool value)setter for the static boolean: 'preferences_have_been_modified' Since2024-08See alsoTODO To be used by any function that modifies the current user preferencesfsm_journal_event()
Parameters
value= TRUE if preferences_have_been_modified.
fsm_set_state_rules_data()fsm_set_state_rules_datafsm.hfsm.hfsm_set_state_rules_datavoid fsm_set_state_rules_data (int choice)setter for the static value: 'choice_STATE_RULES_DATA' (in this file) see include/fsm enum fsm_enum_state_rules_data { SYNTH, STATE, RULES, DATA } Today (2024-10) the initial page is set to 'SYNTH'. See alsoline 292 choice_STATE_RULES_DATA = SYNTH; NB This choice can be temporarily modified for debugging purpose: end of the function: fsm/dispatch.c window_design_topbar_left()Since2024-08See alsosrc/signal * 4
Parameters
choice
fsm_set_store_restore_reset()fsm_set_store_restore_resetfsm.hfsm.hfsm_set_store_restore_resetvoid fsm_set_store_restore_reset (int choice, int value)DateAuthorSee also
Parameters