This commit is contained in:
Jean Sirmai 2024-08-21 23:19:27 +02:00
parent 3d71b6e9c1
commit 2da17cc549
Signed by: jean
GPG Key ID: FB3115C340E057E3
9 changed files with 188 additions and 79 deletions

View File

@ -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;

View File

@ -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");
}

View File

@ -28,6 +28,7 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * */
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#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;
}

View File

@ -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");}

View File

@ -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 ()

View File

@ -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);

View File

@ -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);
}

View File

@ -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));
}

View File

@ -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);
}