comments (fsm.f) & https://learntutorials.net/fr/c/topic/560/listes-liees < ^c^v > fsm/measure.c
This commit is contained in:
parent
3d71b6e9c1
commit
2da17cc549
|
@ -47,35 +47,35 @@ enum fsm_choice_STORE_RESTORE_RESET { STORE, RESTORE, RESET }; // xor
|
||||||
#define n_objects 32 // arbitrary too,
|
#define n_objects 32 // arbitrary too,
|
||||||
#define n_situations 128 // and so on...
|
#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 ();
|
int fsm_get_exec_edit(); // def: fsm/dispatch; call: signal;
|
||||||
void fsm_results_list_init ();
|
// widget/state/dispatch;
|
||||||
void fsm_displayable_list_init ();
|
// widget/rules/selected/dispatch;
|
||||||
|
int fsm_get_state_rules_data(); // def: fsm/dispatch; call: signal;
|
||||||
|
|
||||||
int fsm_get_exec_edit ();
|
void fsm_set_exec_edit (int value);// def: fsm/dispatch; call: signal;
|
||||||
int fsm_get_state_rules_data ();
|
void fsm_set_state_rules_data (int value); // def: fsm/dispatch; call: signal;
|
||||||
int fsm_get_store_restore_reset ();
|
|
||||||
|
|
||||||
void fsm_set_exec_edit (int value);
|
void fsm_store_restore_reset (int choice, int value);// def: prefer; call: signal;
|
||||||
void fsm_set_state_rules_data (int value);
|
|
||||||
void fsm_set_store_restore_reset (int target, int value);
|
|
||||||
|
|
||||||
|
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_add_measure (char *measure_name); // def: fsm/measure; call: widget/measure/dispatch;
|
||||||
void fsm_set_preferences_state (bool value);
|
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_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_reset_all_situations_transparencies_at_value (int value); // provisoire...
|
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;
|
||||||
|
|
|
@ -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
|
switch (sub_automaton) { // sub_automaton 0 is EXEC_EDIT and
|
||||||
// sub_automaton 1 is STATE_RULES_DATA
|
// sub_automaton 1 is STATE_RULES_DATA
|
||||||
|
// sub_automaton 2 is MEASURE
|
||||||
case (0) : printf("switch %5s x %5s > %5s x %5s\n",
|
case (0) : printf("switch %5s x %5s > %5s x %5s\n",
|
||||||
tab_0 [choice_EXEC_EDIT],
|
tab_0 [choice_EXEC_EDIT],
|
||||||
tab_1 [choice_STATE_RULES_DATA],
|
tab_1 [choice_STATE_RULES_DATA],
|
||||||
tab_0 [choice],
|
tab_0 [choice],
|
||||||
tab_1 [choice_STATE_RULES_DATA]);
|
tab_1 [choice_STATE_RULES_DATA]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case (1) : printf("switch %5s x %5s > %5s x %5s\n",
|
case (1) : printf("switch %5s x %5s > %5s x %5s\n",
|
||||||
tab_0 [choice_EXEC_EDIT],
|
tab_0 [choice_EXEC_EDIT],
|
||||||
tab_1 [choice_STATE_RULES_DATA],
|
tab_1 [choice_STATE_RULES_DATA],
|
||||||
tab_0 [choice_EXEC_EDIT],
|
tab_0 [choice_EXEC_EDIT],
|
||||||
tab_1 [choice]);
|
tab_1 [choice]);
|
||||||
break;
|
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");
|
default : printf("default in fsm/dispatch.fsm_debug()\n");
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
* * * * * * * * * * * * * * * * * * * * * * * * * * */
|
* * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||||
|
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "../../include/fsm.h"
|
#include "../../include/fsm.h"
|
||||||
|
|
||||||
|
@ -67,7 +68,7 @@
|
||||||
// - the time (date) of the event,
|
// - the time (date) of the event,
|
||||||
// - the time elapsed between two events,
|
// - the time elapsed between two events,
|
||||||
// - the occurrence of events C between events A and B
|
// - 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
|
// When a list of measurements is established, it is possible to evaluate
|
||||||
// if the results of a measurement are correlated with some other results.
|
// 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 ?
|
// - 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;}
|
void fsm_add_measure (char *measure_name) {fsm_debug (2, 0, measure_name, 2);}
|
||||||
|
|
||||||
//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_measures_list_init ()
|
void fsm_measures_list_init ()
|
||||||
{
|
{
|
||||||
fsm_debug (0,0, "fsm_measures_list_init()", 2); // sub_automaton 2
|
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;
|
||||||
|
}
|
||||||
|
|
|
@ -50,13 +50,15 @@
|
||||||
// Les "symbolics" (les noms) des icônes devraient être déclarées une seule fois (ici))
|
// 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.
|
// de façon à ce qu'une seule variable soit utilisée pour les deux fonctions.
|
||||||
|
|
||||||
|
/* use this ?
|
||||||
static const char *icon_name [3] = {
|
static const char *icon_name [3] = {
|
||||||
"document-revert-rtl-symbolic",
|
"document-revert-rtl-symbolic",
|
||||||
"edit-undo-symbolic",
|
"edit-undo-symbolic",
|
||||||
"view-refresh-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];}
|
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;
|
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);
|
printf("fsm_add_displayable %p <<< %s (see prefer.c)\n",
|
||||||
return NULL;
|
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_preferences_init () {fsm_displayable_list_init ();}
|
||||||
void fsm_displayable_list_init ()
|
void fsm_displayable_list_init () { printf("src/fsm/prefer.c fsm_displayable_list_init()\n");}
|
||||||
{ printf("fsm prefer <> fsm_displayable_list_init() < in the fsm ? < TODO\n");}
|
|
||||||
|
|
|
@ -67,10 +67,9 @@
|
||||||
|
|
||||||
static void *list_results;
|
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);
|
printf("fsm_add_result %p <<< %s (see fsm.c)\n", list_results, result_name);
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void fsm_results_list_init ()
|
void fsm_results_list_init ()
|
||||||
|
|
|
@ -153,10 +153,10 @@ int main (int argc, char **argv)
|
||||||
|
|
||||||
app = gtk_application_new ("org.gem-graph", G_APPLICATION_DEFAULT_FLAGS);
|
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);
|
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);
|
status = g_application_run (G_APPLICATION (app), argc, argv);
|
||||||
g_object_unref (app);
|
g_object_unref (app);
|
||||||
|
|
|
@ -34,14 +34,14 @@
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
/* */
|
/* */
|
||||||
/* # # ### ##### ###### ######## ######## */
|
/* ## ## ### ##### ###### ######## ######## */
|
||||||
/* # # # # ## ## ## # # */
|
/* # # # # ## ## ## # # */
|
||||||
/* # # # # ## ## # # */
|
/* # # # # ## ## # # */
|
||||||
/* # # # # ## ## #### # */
|
/* # # # # ## ## #### # */
|
||||||
/* # # # # # # # # # */
|
/* # # # # # # # # # # */
|
||||||
/* # # # # # # ## ## #### # # */
|
/* # # # # # # ## ## #### # # */
|
||||||
/* ## ## # # ## ## ## # # */
|
/* ## ## # # ## ## ## # # */
|
||||||
/* ## ## ### ###### ####### ######## # */
|
/* ## ## ### ###### ####### ######## # */
|
||||||
/* */
|
/* */
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
|
@ -65,7 +65,7 @@ void on_windows_activation (GtkApplication *app)
|
||||||
dialog_window = GTK_WINDOW (gtk_application_window_new (app));
|
dialog_window = GTK_WINDOW (gtk_application_window_new (app));
|
||||||
text_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_dialog_window (main_window, dialog_window);
|
||||||
widget_design_text_window (main_window, text_window);
|
widget_design_text_window (main_window, text_window);
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,16 +46,6 @@ void widget_design_main_window (GtkWindow *main_window)
|
||||||
window_design_topbar_left (topbar);
|
window_design_topbar_left (topbar);
|
||||||
window_design_topbar_right (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));
|
gtk_window_present (GTK_WINDOW (main_window));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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_RULES));
|
||||||
gtk_header_bar_pack_start (GTK_HEADER_BAR (header_bar), GTK_WIDGET (btt_DATA));
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue