include/fsm.h File Referenceinclude/fsm.hFSM (Finite State Machine) header. #include <stdbool.h>#include <stddef.h>#include <string.h>#include <gtk-4.0/gtk/gtk.h>Include dependency graph for fsm.h:
This graph shows which files directly or indirectly include this file:Classes struct fsm_log_struct_unitstructure of a log element struct fsm_log_structrequired to initialise a double-chained list struct fsm_struct_list_toolphantom documentation struct fsm_struct_list_dataphantom documentation struct fsm_struct_list_dispphantom documentation Macros #define LOG_MAX_LENGTH 255arbitrary #define n_rules 128arbitrary #define n_objects 32arbitrary too, #define n_situations 128and so on... Typedefs typedef struct fsm_log_struct_unit fsm_log_struct_unitstructure of a log element typedef struct fsm_struct_list_tool fsm_struct_list_toolphantom documentation typedef struct fsm_struct_list_data fsm_struct_list_dataphantom documentation typedef struct fsm_struct_list_disp fsm_struct_list_dispphantom documentation Enumerations enum fsm_enum_log_severity { FATAL
, ERROR
, WARN
, INFO
, DEBUG
, TRACE
}Conforms to canonical log levels: FATAL, ERROR, WARN, INFO, DEBUG, TRACE. enum fsm_enum_log_source { SOURCE
, TARGET
, LOG
, FSM
, PREFER
, MAIN
, APP
, WIDGETS
, SIGNAL
, WINDOW
, DIALOG_WINDOW
, MODAL_WINDOW
, TEXT_WINDOW
, AUTO_NOTIFICATION
, TOPBAR
, TOPBAR_LEFT
, TOPBAR_CENTER
, TOPBAR_RIGHT
, PAGE
, SYNTH_PAGE
, STATE_PAGE
, RULES_PAGE
, MEASURES_PAGE
, RESULTS_PAGE
, SYNTH_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
, ON_SWITCH_STATE_RULES_DATA
, SLIDER_X
, SLIDER_Y
, SLIDER_Z
, SLIDER_A
, SLIDER_B
, SLIDER_C
}arbitrary values that can help the logging filter work more efficiently enum fsm_enum_exec_edit { EXEC
, EDIT
}phantom documentation enum fsm_enum_state_rules_data { SYNTH
, STATE
, RULES
, DATA
}phantom documentation enum fsm_enum_store_restore_reset { STORE
, RESTORE
, RESET
}phantom documentation enum fsm_enum_measure_type { DATE_RULE_EXEC
, RULE_EXEC_NB
, OBJECT_NB
, ELAPSED_TIME
}phantom documentation Functions void fsm_publish_log (fsm_log_struct jj)publish all the logs today just print in the console TODO > in a file void fsm_init_log (fsm_log_struct *jj)init the journal void fsm_add_log_event (fsm_log_struct *jj, const char *file_source, const char *function_source, const char *string_value)add an event void fsm_clear_log (fsm_log_struct *jj, const char *file_source, const char *function_source, const char *string_value)usefulness ? (systematic ^c) long fsm_pop_back_log (fsm_log_struct *jj, const char *file_source, const char *function_source, const char *string_value)remove an event int fsm_get_log_length (fsm_log_struct jj)get journal_length void fsm_seek_log (fsm_log_struct jj, long usec, const char *file_source, const char *function_source, const char *string_value)seek for an event void fsm_log_publication_request ()This request is called only once, by main(), just after closing the app and before ending the program. void fsm_add_log (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_tools_list_insert (fsm_struct_list_tool **tl, int value)int fsm_tools_list_pop (fsm_struct_list_tool **tl)int fsm_tools_list_length (fsm_struct_list_tool *tl)void fsm_tools_list_clear (fsm_struct_list_tool **tl)void fsm_tools_list_view (fsm_struct_list_tool *tl)void fsm_tools_list_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)phantom documentation int fsm_get_data (fsm_struct_list_data d, int from, int to)phantom documentation void fsm_remove_data (fsm_struct_list_data d, int *p_data)phantom documentation Detailed DescriptionFSM (Finite State Machine) header. This file is part of Gem-graph. Typedef Documentationfsm_log_struct_unitfsm_log_struct_unitfsm.hfsm.hfsm_log_struct_unittypedef struct fsm_log_struct_unit fsm_log_struct_unitstructure of a log element See alsofsm_add_log() fsm_add_log_event() Enumeration Type Documentationfsm_enum_log_severityfsm_enum_log_severityfsm.hfsm.hfsm_enum_log_severityenum fsm_enum_log_severityConforms to canonical log levels: FATAL, ERROR, WARN, INFO, DEBUG, TRACE. J O U R N A L - M E T A - R U L E Sref: sudo cat /var/log/messageslog structure:daterankfilefunctionvalue, parameter, description, context,... (any value that can qualify the event and provides useful information when reading the log)Un seul fsm_add_log() par fonction ? sauf si cette fonction génère plusieurs autres fonctions d'intérêt ?S'il y a deux fsm_add_log() (begin / end) dans une fonction, ils doivent avoir la même étiquette (les mêmes valeurs) : SEVERITY & SOURCEhttps://betterstack.com/community/guides/logging/logging-best-practices/ https://en.wikipedia.org/wiki/SyslogSee alsofsm_add_log()) EnumeratorFATALfsm.hfsm.hFATALFATAL(or CRITICAL) an unrecoverable failure that prevents the whole application from doing any further useful work ERRORfsm.hfsm.hERRORERRORa condition that hinders the execution of a specific operation within an application and is unrecoverable WARNfsm.hfsm.hWARNWARNsomething unexpected has occurred, but the application can continue to function normally for the time being INFOfsm.hfsm.hINFOINFO(or MESSAGE) a significant event occurs while the system is operating normally DEBUGfsm.hfsm.hDEBUGDEBUGa description of system states in sufficient detail to give developers clues as to the cause of an error TRACEfsm.hfsm.hTRACETRACEprovides a systematic overview of code execution but comes at a cost in terms of performance fsm_enum_log_sourcefsm_enum_log_sourcefsm.hfsm.hfsm_enum_log_sourceenum fsm_enum_log_sourcearbitrary values that can help the logging filter work more efficiently See alsofsm_add_log()) EnumeratorSOURCEfsm.hfsm.hSOURCESOURCEmust each element of this enumeration be commented (enhanced) ? TARGETfsm.hfsm.hTARGETTARGETlet's observe first how the enumeration structures and evolves on usage WINDOWfsm.hfsm.hWINDOWWINDOWMAIN_WINDOW || DIALOG_WINDOW || MODAL_WINDOW || TEXT_WINDOW TOPBARfsm.hfsm.hTOPBARTOPBARLEFT || CENTER || RIGHT. PAGEfsm.hfsm.hPAGEPAGESYNTH_PAGE || STATE_PAGE || RULES_PAGE || MEASURES_PAGE || RESULTS_PAGE RULES_PAGE == USER TREE versus SELECTED (vertical separation) Function Documentationfsm_add_data()fsm_add_datafsm.hfsm.hfsm_add_datavoid fsm_add_data (fsm_struct_list_data d, int * p_data, int * p_target)phantom documentation
Parameters
d*p_data*p_target
fsm_add_displayable()fsm_add_displayablefsm.hfsm.hfsm_add_displayablevoid fsm_add_displayable (char * displayable_name)DateAuthorSee also
Parameters
displayable_name
Here is the call graph for this function:fsm_add_log()fsm_add_logfsm.hfsm.hfsm_add_logvoid fsm_add_log (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_add_log" 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 INFO DEBUG TRACE 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.
Here is the call graph for this function:
Here is the caller graph for this function:fsm_add_log_event()fsm_add_log_eventfsm.hfsm.hfsm_add_log_eventvoid fsm_add_log_event (fsm_log_struct * jj, const char * file_source, const char * function_source, const char * string_value)add an event Since2024-09
Parameters
*jj*file_source*function_source*string_value
Here is the caller graph for this function:fsm_add_measure()fsm_add_measurefsm.hfsm.hfsm_add_measurevoid fsm_add_measure (char * measure_name)Since2024-09See alsosrc/widget/measure/dispatch/widget_measure_event_occurences_nb() src/widget/measure/dispatch/widget_measure_event_occurences_dates() src/widget/measure/dispatch/widget_measure_event_occurences_situations() src/widget/measure/dispatch/widget_measure_time_elapsed_between_two_events() src/widget/measure/dispatch/widget_measure_third_event_occurences_in_between()src/fsm/dispatch/fsm_add_log()
Parameters
*measure_name
Here is the call graph for this function:
Here is the caller graph for this function:fsm_add_result()fsm_add_resultfsm.hfsm.hfsm_add_resultvoid fsm_add_result (char * result_name)See alsoutil_concat()fsm_init()
Here is the call graph for this function:
Here is the caller graph for this function:fsm_clear_log()fsm_clear_logfsm.hfsm.hfsm_clear_logvoid fsm_clear_log (fsm_log_struct * jj, const char * file_source, const char * function_source, const char * string_value)usefulness ? (systematic ^c) Since2024-09
Parameters
*jj*file_source*function_source*string_value
fsm_get_data()fsm_get_datafsm.hfsm.hfsm_get_dataint fsm_get_data (fsm_struct_list_data d, int from, int to)phantom documentation
Parameters
dfromto
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
Here is the caller graph for this function:fsm_get_log_length()fsm_get_log_lengthfsm.hfsm.hfsm_get_log_lengthint fsm_get_log_length (fsm_log_struct jj)get journal_length Since2024-09
Parameters
*jj
Returnsjournal length 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
Here is the caller graph for this function:fsm_init()fsm_initfsm.hfsm.hfsm_initvoid fsm_init (char * initial_INFO_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_init_log() src/fsm/dispatch/fsm_add_log() 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
*initial_INFO_from_main
Here is the call graph for this function:
Here is the caller graph for this function:fsm_init_log()fsm_init_logfsm.hfsm.hfsm_init_logvoid fsm_init_log (fsm_log_struct * jj)init the journal Since2024-09
Parameters
*jj
Here is the caller graph for this function:fsm_list_init_displayables()fsm_list_init_displayablesfsm.hfsm.hfsm_list_init_displayablesvoid fsm_list_init_displayables ( )DateAuthorSee also
Here is the call graph for this function:
Here is the caller graph for this function:fsm_list_init_measures()fsm_list_init_measuresfsm.hfsm.hfsm_list_init_measuresvoid fsm_list_init_measures ( )Since2024-09See alsosrc/fsm/dispatch/fsm_init()
Here is the call graph for this function:
Here is the caller graph for this function:fsm_list_init_preferences()fsm_list_init_preferencesfsm.hfsm.hfsm_list_init_preferencesvoid fsm_list_init_preferences ( )DateAuthorSee also
Here is the call graph for this function:
Here is the caller graph for this function:fsm_list_init_results()fsm_list_init_resultsfsm.hfsm.hfsm_list_init_resultsvoid fsm_list_init_results ( )See alsofsm_init()fsm_add_result() fsm_add_log()
Here is the call graph for this function:
Here is the caller graph for this function:fsm_log_publication_request()fsm_log_publication_requestfsm.hfsm.hfsm_log_publication_requestvoid fsm_log_publication_request ( )This 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.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_publish_log() (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 alsomain()fsm_publish_log()
Here is the call graph for this function:
Here is the caller graph for this function:fsm_pop_back_log()fsm_pop_back_logfsm.hfsm.hfsm_pop_back_loglong fsm_pop_back_log (fsm_log_struct * jj, const char * file_source, const char * function_source, const char * string_value)remove an event Since2024-09
Parameters
*jj*file_source*function_source*string_value
fsm_publish_log()fsm_publish_logfsm.hfsm.hfsm_publish_logvoid fsm_publish_log (fsm_log_struct jj)publish all the logs today just print in the console TODO > in a file Since2024-09
Parameters
*jj
Here is the caller graph for this function:fsm_remove_data()fsm_remove_datafsm.hfsm.hfsm_remove_datavoid fsm_remove_data (fsm_struct_list_data d, int * p_data)phantom documentation
Parameters
d*p_data
fsm_reset_all_situations_values()fsm_reset_all_situations_valuesfsm.hfsm.hfsm_reset_all_situations_valuesvoid fsm_reset_all_situations_values (int value)DateAuthorSee also
Parameters
value
Here is the call graph for this function:
Here is the caller graph for this function: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_seek_log()fsm_seek_logfsm.hfsm.hfsm_seek_logvoid fsm_seek_log (fsm_log_struct jj, long usec, const char * file_source, const char * function_source, const char * string_value)seek for an event Since2024-09
Parameters
*jjusec*file_source*function_source*string_value
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"
Here is the call graph for this function:
Here is the caller graph for this function: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_add_log()
Parameters
value= TRUE if preferences_have_been_modified.
Here is the call graph for this function:
Here is the caller graph for this function: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
Here is the call graph for this function:
Here is the caller graph for this function: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
choicevalue
Here is the call graph for this function:
Here is the caller graph for this function:fsm_tools_list_clear()fsm_tools_list_clearfsm.hfsm.hfsm_tools_list_clearvoid fsm_tools_list_clear (fsm_struct_list_tool ** ml)
Parameters
**ml
See alsofsm_tools_list_test()
Here is the caller graph for this function:fsm_tools_list_insert()fsm_tools_list_insertfsm.hfsm.hfsm_tools_list_insertvoid fsm_tools_list_insert (fsm_struct_list_tool ** ml, int value)
Parameters
**mlvalue
See alsofsm_tools_list_test()
Here is the caller graph for this function:fsm_tools_list_length()fsm_tools_list_lengthfsm.hfsm.hfsm_tools_list_lengthint fsm_tools_list_length (fsm_struct_list_tool * ml)
Parameters
**ml
See alsofsm_tools_list_test()
Here is the caller graph for this function:fsm_tools_list_pop()fsm_tools_list_popfsm.hfsm.hfsm_tools_list_popint fsm_tools_list_pop (fsm_struct_list_tool ** ml)
Parameters
**ml
See alsofsm_tools_list_test()
Here is the caller graph for this function:fsm_tools_list_test()fsm_tools_list_testfsm.hfsm.hfsm_tools_list_testvoid fsm_tools_list_test ( )See alsofsm_list_init_measures()()fsm_add_log() fsm_tools_list_insert() fsm_tools_list_pop() fsm_tools_list_view() fsm_tools_list_clear()
Here is the call graph for this function:
Here is the caller graph for this function:fsm_tools_list_view()fsm_tools_list_viewfsm.hfsm.hfsm_tools_list_viewvoid fsm_tools_list_view (fsm_struct_list_tool * ml)
Parameters
**ml
See alsofsm_tools_list_test()
Here is the call graph for this function:
Here is the caller graph for this function: