From 2da17cc54961fa30393e65292732fc98eea97c8b Mon Sep 17 00:00:00 2001 From: Jean Sirmai Date: Wed, 21 Aug 2024 23:19:27 +0200 Subject: [PATCH] comments (fsm.f) & https://learntutorials.net/fr/c/topic/560/listes-liees < ^c^v > fsm/measure.c --- include/fsm.h | 46 ++++++------ src/fsm/dispatch.c | 11 ++- src/fsm/measure.c | 141 ++++++++++++++++++++++++++++------- src/fsm/prefer.c | 17 +++-- src/fsm/result.c | 3 +- src/main.c | 4 +- src/widget/dispatch.c | 18 ++--- src/widget/topbar/dispatch.c | 10 --- src/widget/topbar/left.c | 17 +++++ 9 files changed, 188 insertions(+), 79 deletions(-) diff --git a/include/fsm.h b/include/fsm.h index bffd802..8e8157f 100644 --- a/include/fsm.h +++ b/include/fsm.h @@ -47,35 +47,35 @@ enum fsm_choice_STORE_RESTORE_RESET { STORE, RESTORE, RESET }; // xor #define n_objects 32 // arbitrary too, #define n_situations 128 // and so on... -bool fsm_init (); +bool fsm_init(); // def: fsm/dispatch; call: main; +void fsm_measures_list_init(); // def: fsm/measure; call: fsm/dispatch; +void fsm_results_list_init(); // def: fsm/results; call: fsm/dispatch; +void fsm_preferences_init(); // def: fsm/prefer; call: fsm/dispatch; +void fsm_displayable_list_init(); // def: fsm/prefer; call: fsm/dispatch; -void fsm_measures_list_init (); -void fsm_results_list_init (); -void fsm_displayable_list_init (); +int fsm_get_exec_edit(); // def: fsm/dispatch; call: signal; + // widget/state/dispatch; + // widget/rules/selected/dispatch; +int fsm_get_state_rules_data(); // def: fsm/dispatch; call: signal; -int fsm_get_exec_edit (); -int fsm_get_state_rules_data (); -int fsm_get_store_restore_reset (); +void fsm_set_exec_edit (int value);// def: fsm/dispatch; call: signal; +void fsm_set_state_rules_data (int value); // def: fsm/dispatch; call: signal; -void fsm_set_exec_edit (int value); -void fsm_set_state_rules_data (int value); -void fsm_set_store_restore_reset (int target, int value); +void fsm_store_restore_reset (int choice, int value);// def: prefer; call: signal; +bool fsm_get_preferences_state(); // def: fsm/dispatch; call: - - - +void fsm_set_preferences_state (bool value); // def: fsm/dispatch; call: signal; + // fsm/prefer; -bool fsm_get_preferences_state (); -void fsm_set_preferences_state (bool value); - -void *fsm_add_measure (char *measure_name); -void *fsm_add_result (char *result_name); - -void fsm_debug (int choice, int value, char *string, int sub_automaton); - -void fsm_store_restore_reset (int choice, int value); -const char *fsm_get_button_icon_name (int n); +void fsm_add_measure (char *measure_name); // def: fsm/measure; call: widget/measure/dispatch; +void fsm_add_result (char *result_name); // def: fsm/result; call: - - - +void fsm_add_displayable (char *displayable_name);// def: fsm/prefer; call: fsm/prefer; void fsm_reset_all_situations_transparencies_at_value (int value); // provisoire... + // def: fsm/prefer; call: signal; -void *fsm_add_displayable (char *displayable_name); - -void fsm_preferences_init (); +void fsm_debug (int choice, int value, char *string, int sub_automaton); + // def: fsm/dispatch; call: fsm/dispatch; + // fsm/measure; + // fsm/result; diff --git a/src/fsm/dispatch.c b/src/fsm/dispatch.c index eb9ba86..2aaadf4 100644 --- a/src/fsm/dispatch.c +++ b/src/fsm/dispatch.c @@ -122,20 +122,27 @@ void fsm_debug (int choice, int value, char *string, int sub_automaton) { switch (sub_automaton) { // sub_automaton 0 is EXEC_EDIT and // sub_automaton 1 is STATE_RULES_DATA + // sub_automaton 2 is MEASURE case (0) : printf("switch %5s x %5s > %5s x %5s\n", tab_0 [choice_EXEC_EDIT], tab_1 [choice_STATE_RULES_DATA], tab_0 [choice], tab_1 [choice_STATE_RULES_DATA]); break; + case (1) : printf("switch %5s x %5s > %5s x %5s\n", tab_0 [choice_EXEC_EDIT], tab_1 [choice_STATE_RULES_DATA], tab_0 [choice_EXEC_EDIT], tab_1 [choice]); break; - case (2) : printf("fsm <> %s\n", string); break; - case (3) : printf("FSM debug <> choice = %2d\n", choice); break; + + case (2) : printf("fsm <> %s\n", string); + break; + + case (3) : printf("fsm debug <> %2d\n", choice); + break; + default : printf("default in fsm/dispatch.fsm_debug()\n"); } diff --git a/src/fsm/measure.c b/src/fsm/measure.c index 82f6dee..20204d1 100644 --- a/src/fsm/measure.c +++ b/src/fsm/measure.c @@ -28,6 +28,7 @@ * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include +#include #include #include "../../include/fsm.h" @@ -67,7 +68,7 @@ // - the time (date) of the event, // - the time elapsed between two events, // - the occurrence of events C between events A and B -// - (non limitative, may be) +// - (non limitative, maybe) < pattern recognition tools ? // When a list of measurements is established, it is possible to evaluate // if the results of a measurement are correlated with some other results. @@ -95,33 +96,123 @@ // - pointeur vers des données, des représentations de données ? -void *fsm_add_measure (char *measure_name) {fsm_debug (2, 0, measure_name, 2); return NULL;} - -//static void *list_measures; -typedef struct s_List List; -struct s_List -{ - List *next; /* pointeur sur le reste de la liste */ -// void *data; /* pointeur sur une donnée générique */ -}; - -List *list = NULL; - -List *list_create (void *data) -{ - List *list = malloc(sizeof(list)); /* allocation (en vert sur le diagramme) - * et affectation à la variable list (en bleu) */ - if (list) /* si l'allocation a réussi */ - { -// list->data = data; /* affectation du champ data (en rouge) */ - list->next = NULL; /* affectation du champ next à la liste vide */ - } - return list; /* retour de la liste - * (correctement allouée et affectée ou NULL) */ -} +void fsm_add_measure (char *measure_name) {fsm_debug (2, 0, measure_name, 2);} void fsm_measures_list_init () { fsm_debug (0,0, "fsm_measures_list_init()", 2); // sub_automaton 2 } + + + + + + + + + + +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +//------------------------------------------------------------------------------ +// https://learntutorials.net/fr/c/topic/560/listes-liees < ^c^v vvv + + + + + + + + +struct doubly_node +{ + struct doubly_node * prev; + struct doubly_node * next; +}; + +void doubly_node_bind (struct doubly_node * prev, struct doubly_node * next) +{ + prev->next = next; + next->prev = prev; +} + +void doubly_node_make_empty_circularly_list (struct doubly_node * head) +{ + doubly_node_bind (head, head); +} + +void doubly_node_insert_between +(struct doubly_node * prev, struct doubly_node * next, struct doubly_node * insertion) +{ + doubly_node_bind (prev, insertion); + doubly_node_bind (insertion, next); +} + +void doubly_node_insert_before +(struct doubly_node * tail, struct doubly_node * insertion) +{ + doubly_node_insert_between (tail->prev, tail, insertion); +} + +void doubly_node_insert_after +(struct doubly_node * head, struct doubly_node * insertion) +{ + doubly_node_insert_between (head, head->next, insertion); +} + +struct Node { + int data; + struct Node *next; +}; + + +void insert_node (struct Node **head, int nodeValue); +void print_list (struct Node *head); + +int any () { + struct Node* headNode; + headNode = NULL; /* Initialize our first node pointer to be NULL. */ + size_t listSize, i; + do { + printf("How many numbers would you like to input?\n"); + } while(1 != scanf("%zu", &listSize)); + + for (i = 0; i < listSize; i++) { + int numToAdd; + do { + printf("Enter a number:\n"); + } while (1 != scanf("%d", &numToAdd)); + + insert_node (&headNode, numToAdd); + printf("Current list after your inserted node: \n"); + print_list(headNode); + } + + return 0; +} + +void print_list (struct Node *head) { + struct Node* currentNode = head; + + /* Iterate through each link. */ + while (currentNode != NULL) { + printf("Value: %d\n", currentNode->data); + currentNode = currentNode -> next; + } +} + +void insert_node (struct Node **head, int nodeValue) { + struct Node *currentNode = malloc(sizeof *currentNode); + currentNode->data = nodeValue; + currentNode->next = (*head); + + *head = currentNode; +} diff --git a/src/fsm/prefer.c b/src/fsm/prefer.c index e2d3b28..870f119 100644 --- a/src/fsm/prefer.c +++ b/src/fsm/prefer.c @@ -50,13 +50,15 @@ // Les "symbolics" (les noms) des icônes devraient être déclarées une seule fois (ici)) // de façon à ce qu'une seule variable soit utilisée pour les deux fonctions. +/* use this ? static const char *icon_name [3] = { "document-revert-rtl-symbolic", "edit-undo-symbolic", "view-refresh-symbolic" }; -// transtypage vers un pointeur depuis un entier de taille différente vvv TODO + const char *fsm_get_button_icon_name (int n) {return (const char*) icon_name [n];} +*/ /******************************************************************************/ @@ -119,13 +121,16 @@ void fsm_reset_all_situations_transparencies_at_value (int value) static void *list_displayables; -void *fsm_add_displayable (char *displayable_name) +void fsm_add_displayable (char *displayable_name) { - printf("fsm_add_displayable %p <<< %s (see prefer.c)\n", list_displayables, displayable_name); - return NULL; + printf("fsm_add_displayable %p <<< %s (see prefer.c)\n", + list_displayables, displayable_name); } +/******************************************************************************/ +/* P R E F E R E N C E S */ +/******************************************************************************/ + void fsm_preferences_init () {fsm_displayable_list_init ();} -void fsm_displayable_list_init () -{ printf("fsm prefer <> fsm_displayable_list_init() < in the fsm ? < TODO\n");} +void fsm_displayable_list_init () { printf("src/fsm/prefer.c fsm_displayable_list_init()\n");} diff --git a/src/fsm/result.c b/src/fsm/result.c index 8f30961..2d86e21 100644 --- a/src/fsm/result.c +++ b/src/fsm/result.c @@ -67,10 +67,9 @@ static void *list_results; -void *fsm_add_result (char *result_name) +void fsm_add_result (char *result_name) { printf("fsm_add_result %p <<< %s (see fsm.c)\n", list_results, result_name); - return NULL; } void fsm_results_list_init () diff --git a/src/main.c b/src/main.c index 55900c2..31051e2 100644 --- a/src/main.c +++ b/src/main.c @@ -153,10 +153,10 @@ int main (int argc, char **argv) app = gtk_application_new ("org.gem-graph", G_APPLICATION_DEFAULT_FLAGS); - fsm_init (); // fsm = finite state machine (see src/fsm/dispatch) + fsm_init (); // fsm = finite state machine (see : src/fsm/dispatch.c) g_signal_connect (app, "activate", G_CALLBACK (on_windows_activation), NULL); - // on_windows_activation <> is in src/widget/dispatch + // on_windows_activation <> see : src/widget/dispatch status = g_application_run (G_APPLICATION (app), argc, argv); g_object_unref (app); diff --git a/src/widget/dispatch.c b/src/widget/dispatch.c index ef4ea64..4fd97b7 100644 --- a/src/widget/dispatch.c +++ b/src/widget/dispatch.c @@ -34,14 +34,14 @@ /******************************************************************************/ /* */ -/* # # ### ##### ###### ######## ######## */ -/* # # # # ## ## ## # # */ -/* # # # # ## ## # # */ -/* # # # # ## ## #### # */ -/* # # # # # # # # # */ -/* # # # # # # ## ## #### # # */ -/* ## ## # # ## ## ## # # */ -/* ## ## ### ###### ####### ######## # */ +/* ## ## ### ##### ###### ######## ######## */ +/* # # # # ## ## ## # # */ +/* # # # # ## ## # # */ +/* # # # # ## ## #### # */ +/* # # # # # # # # # # */ +/* # # # # # # ## ## #### # # */ +/* ## ## # # ## ## ## # # */ +/* ## ## ### ###### ####### ######## # */ /* */ /******************************************************************************/ @@ -65,7 +65,7 @@ void on_windows_activation (GtkApplication *app) dialog_window = GTK_WINDOW (gtk_application_window_new (app)); text_window = GTK_WINDOW (gtk_application_window_new (app)); - widget_design_main_window (main_window); + widget_design_main_window (main_window); // def: widget/topbar/dispatch widget_design_dialog_window (main_window, dialog_window); widget_design_text_window (main_window, text_window); } diff --git a/src/widget/topbar/dispatch.c b/src/widget/topbar/dispatch.c index 288d5b7..5c18fd4 100644 --- a/src/widget/topbar/dispatch.c +++ b/src/widget/topbar/dispatch.c @@ -46,16 +46,6 @@ void widget_design_main_window (GtkWindow *main_window) window_design_topbar_left (topbar); window_design_topbar_right (topbar); - // use the next lineS to select the page that will be presented first - // it triggers <=> signal.on_toggle_state_rule_data (a btt_NAME) - - gtk_check_button_set_active (GTK_CHECK_BUTTON (widget_get_btt_rules()), TRUE); - gtk_check_button_set_active (GTK_CHECK_BUTTON (widget_get_btt_state()), TRUE); - gtk_check_button_set_active (GTK_CHECK_BUTTON (widget_get_btt_synth()), TRUE); - gtk_check_button_set_active (GTK_CHECK_BUTTON (widget_get_btt_data()), TRUE); - - // THE LAST ONE IS THE WINNER (AND THE WINNER TAKES IT ALL !...) - gtk_window_present (GTK_WINDOW (main_window)); } diff --git a/src/widget/topbar/left.c b/src/widget/topbar/left.c index 0cb81fa..4b67287 100644 --- a/src/widget/topbar/left.c +++ b/src/widget/topbar/left.c @@ -81,6 +81,23 @@ void window_design_topbar_left (GtkWidget *header_bar) gtk_header_bar_pack_start (GTK_HEADER_BAR (header_bar), GTK_WIDGET (btt_RULES)); gtk_header_bar_pack_start (GTK_HEADER_BAR (header_bar), GTK_WIDGET (btt_DATA)); + + + + + +/******************************************************************************/ +/* use the next lineS to select the page that will be presented first */ +/* it triggers <=> signal.on_toggle_state_rule_data (a btt_NAME) */ +/* and remember: */ +/* the last one is the winner (and the winner takes it all !...) */ +/* THE LAST ONE IS THE WINNER (AND THE WINNER TAKES IT ALL !...) */ +/******************************************************************************/ + + gtk_check_button_set_active (GTK_CHECK_BUTTON (widget_get_btt_rules()), TRUE); + gtk_check_button_set_active (GTK_CHECK_BUTTON (widget_get_btt_state()), TRUE); + gtk_check_button_set_active (GTK_CHECK_BUTTON (widget_get_btt_data()), TRUE); + gtk_check_button_set_active (GTK_CHECK_BUTTON (widget_get_btt_synth()), TRUE); }