un petit détour par la console... (taper 'entrée' pour ouvrir le fenêtre et... patientez un peu)

This commit is contained in:
Jean Sirmai 2024-09-02 17:34:28 +02:00
parent 16bfcdd4df
commit cbb8495783
Signed by: jean
GPG Key ID: FB3115C340E057E3
9 changed files with 310 additions and 123 deletions

View File

@ -54,7 +54,9 @@ typedef struct disp_list {int value; struct disp_list *suiv;} disp_list ;
typedef struct journal {int value; struct journal *prev;} journal;
// ref: sudo cat /var/log/messages
void fsm_init(); // def: fsm/dispatch; call: main;
GtkApplication *fsf_get_app(); // def: main call: fsm/engine/engine;
void fsm_init(bool mode_console); // def: fsm/dispatch; call: main;
void fsm_preferences_init(); // def: fsm/prefer; call: fsm/dispatch;
void fsm_measures_list_init(); // def: fsm/measure/manage.c; call: fsm/dispatch;
void fsm_results_list_init(); // def: fsm/results; call: fsm/dispatch;
@ -103,6 +105,7 @@ void fsm_rule_trig_measure (int rule_id, int object_id, int measure_id);
// --------------------------------------------------------------- WIP ------
void fsm_engine_init();
void fsm_poetic_engine();
// --------------------------------------------------------------- WIP ------
int fsm_journal_push (journal **jj, int v_value);
@ -124,3 +127,4 @@ void fsm_disp_add_chart (disp_list d, int *p_chart);
int fsm_disp_get_chart (disp_list d, int from, int to);
void fsm_disp_remove_chart (disp_list d, int *p_chart);
void fsm_another_proto_engine ();

View File

@ -17,7 +17,7 @@
"libxml2"
"glu"
"glew"
"glfw"
;; "glfw"
"cglm"
"libepoxy"
"pango@1.90.0"

View File

@ -58,15 +58,18 @@
/* F S M I N I T */
/******************************************************************************/
void fsm_init()
void fsm_init(bool mode_console)
{
fsm_measures_list_init();
fsm_results_list_init();
fsm_displayable_list_init();
fsm_preferences_init();
// fsm_engine_init(); // pour avancer, en attendant... 😇️
if (mode_console) fsm_engine_init(); // pour avancer, en attendant... 😇️
else {
fsm_measures_list_init();
fsm_results_list_init();
fsm_displayable_list_init();
fsm_preferences_init();
printf("exemple de format de journal : 2024-08-31 [%s()] %s\
< NB ce printf() se trouve dans 'fsm/dispatch.c'\n", __func__, "message"); // logging TODO TODO
// un exemple : $ sudo cat /var/log/messages
}
}

View File

@ -1,101 +0,0 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* Gem-graph client *
* Finite State Machine Engine *
* *
* Copyright © 2024 Libre en Communs <contact@a-lec.org> *
* Copyright © 2024 Jean Sirmai <jean@a-lec.org> *
* *
* This file is part of Gem-graph. *
* *
* This program is free software: you can redistribute it and/or modify it *
* under the terms of the GNU Affero General Public License *
* as published by the Free Software Foundation, *
* either version 3 of the License, *
* or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; *
* without even the implied warranty of MERCHANTABILITY *
* or FITNESS FOR A PARTICULAR PURPOSE. *
* See the GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * */
#include <stdbool.h>
#include <time.h>
#include "../../include/fsm.h"
#include "../../include/signal.h"
#include "../../include/widget.h"
/******************************************************************************/
/* */
/* OOOOOOOOOOO OOOOO OOO OOO */
/* OO OO OO OOOO OOOO */
/* OO OO OO OO OO OO */
/* OOOOOO OO OO OO OO OO */
/* OO OO OO OOO OO */
/* OO OO OO OO */
/* OO OO OOO OO OO */
/* OO OOOOOO OO OO */
/* */
/******************************************************************************/
static void proto_proto_proto_engine();
void fsm_engine_init()
{
if (0) printf ("src/fsm/engine.c | src/fsm/engine.c fsm_engine_init()\n");
proto_proto_proto_engine();
// \x1b[1F \x1b[2K == move to the beginning of previous line and clear it
}
static void proto_proto_proto_engine()
{
int milliseconds = 200;
struct timespec rem;
struct timespec req= {
(int)(milliseconds / 1000), /* secs (Must be Non-Negative) */
(milliseconds % 1000) * 1000000 /* nano (Must be in range of 0 to 999999999) */
};
while (true) {
printf("O . \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf("O . \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf("-O . \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf("---O . \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf("--- -O . \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf("- - - O . \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" - - O . \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf("- O . \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" O . \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" O . \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" O . \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" O. \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" .O \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" . O \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" . O \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" . O \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" . O \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" . O \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" . O \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" . O \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" . O \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" O \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" O . \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf("- O . \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" -O . \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf("-O . \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf("O . \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf("O . \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf("O . \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf("O . \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf("-O . \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf("O . \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf("O . \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf("O . \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
}
}

105
src/fsm/engine/engine.c Normal file
View File

@ -0,0 +1,105 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* Gem-graph client *
* Finite State Machine Engine *
* *
* Copyright © 2024 Libre en Communs <contact@a-lec.org> *
* Copyright © 2024 Jean Sirmai <jean@a-lec.org> *
* *
* This file is part of Gem-graph. *
* *
* This program is free software: you can redistribute it and/or modify it *
* under the terms of the GNU Affero General Public License *
* as published by the Free Software Foundation, *
* either version 3 of the License, *
* or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; *
* without even the implied warranty of MERCHANTABILITY *
* or FITNESS FOR A PARTICULAR PURPOSE. *
* See the GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * */
#include <stdbool.h>
#include <time.h>
#include "../../../include/fsm.h"
#include "../../../include/widget.h"
/******************************************************************************/
/* */
/* OOOOOOOOOOO OOOOO OOO OOO */
/* OO OO OO OOOO OOOO */
/* OO OO OO OO OO OO */
/* OOOOOO OO OO OO OO OO */
/* OO OO OO OOO OO */
/* OO OO OO OO */
/* OO OO OOO OO OO */
/* OO OOOOOO OO OO */
/* */
/******************************************************************************/
static void fsm_strange_engine()
{
int milliseconds = 100;
struct timespec rem;
struct timespec req= {
(int)(milliseconds / 1000), /* secs (Must be Non-Negative) */
(milliseconds % 1000) * 1000000 /* nano (Must be in range of 0 to 999999999) */
};
int stop = 0;
while (! stop) {
printf(" | M . |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | W . |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | MO * |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | W=-O * |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | D=-- -O * |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | =- - - O * |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | -- O * |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | - O (*) |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | O (*) |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | O (*) |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | O (*) |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | O*) |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | (*O |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | (*) O |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | (*) O |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | (*) O |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | * O |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | * O |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | * O |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | * O |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | * O |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | O |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | O * |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | O . |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | O . |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | O . .|\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | O . .|\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | D . . |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | M- . . |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | W =- . . |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | M = --- . . |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | W =-- . . |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | M=- . .|\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | W- . .|\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
if (getchar() == '\n') stop = 1;
}
// if (stop) g_object_unref (fsf_get_app()); // widget_design_main_window (NULL); // widget_get_main_window());
}
void fsm_engine_init()
{
if (1) printf ("src/fsm/engine.c | src/fsm/engine.c fsm_engine_init()\n");
fsm_strange_engine();
// \x1b[1F \x1b[2K == move to the beginning of previous line and clear it
//fsm_another_proto_engine();
}

90
src/fsm/engine/poetry.c Normal file
View File

@ -0,0 +1,90 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* Gem-graph client *
* Finite State Machine Engine *
* ... a little touch of poetry ... *
* *
* Copyright © 2024 Jean Sirmai <jean@a-lec.org> *
* *
* This file is part of Gem-graph and of the dreams it may reveal. *
* *
* This program is free software: you can redistribute it and/or modify it *
* under the terms of the GNU Affero General Public License *
* as published by the Free Software Foundation, *
* either version 3 of the License, *
* or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; *
* without even the implied warranty of MERCHANTABILITY *
* or FITNESS FOR A PARTICULAR PURPOSE. *
* See the GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * */
#include <stdbool.h>
#include <time.h>
#include "../../../include/fsm.h"
/******************************************************************************/
/* */
/* OOOOOOOOOOO OOOOO OOO OOO */
/* OO OO OO OOOO OOOO */
/* OO OO OO OO OO OO */
/* OOOOOO OO OO OO OO OO */
/* OO OO OO OOO OO */
/* OO OO OO OO */
/* OO OO OOO OO OO */
/* OO OOOOOO OO OO */
/* */
/******************************************************************************/
void fsm_poetic_engine() // 2024-08-31
{
int milliseconds = 100;
struct timespec rem;
struct timespec req= {
(int)(milliseconds / 1000), /* secs (Must be Non-Negative) */
(milliseconds % 1000) * 1000000 /* nano (Must be in range of 0 to 999999999) */
};
while (true) {
printf(" | O . |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | O . |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | DO * |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | D=-O * |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | D=-- -O * |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | =- - - O * |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | -- O * |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | - O (*) |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | O (*) |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | O (*) |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | O (*) |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | O*) |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | (*O |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | (*) O |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | (*) O |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | (*) O |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | * O |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | * O |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | * O |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | * O |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | * O |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | O |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | O * |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | O . |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | O . |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | O . .|\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | O . .|\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | D . . |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | D- . . |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | D =- . . |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | D = --- . . |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | D =-- . . |\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | D=- . .|\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
printf(" | D- . .|\n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
}
}

78
src/fsm/engine/to_name.c Normal file
View File

@ -0,0 +1,78 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* Gem-graph client *
* Finite State Machine Engine *
* *
* Copyright © 2024 Libre en Communs <contact@a-lec.org> *
* Copyright © 2024 Jean Sirmai <jean@a-lec.org> *
* *
* This file is part of Gem-graph. *
* *
* This program is free software: you can redistribute it and/or modify it *
* under the terms of the GNU Affero General Public License *
* as published by the Free Software Foundation, *
* either version 3 of the License, *
* or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; *
* without even the implied warranty of MERCHANTABILITY *
* or FITNESS FOR A PARTICULAR PURPOSE. *
* See the GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * */
#include <stdbool.h>
#include <time.h>
#include "../../../include/fsm.h"
/******************************************************************************/
/* */
/* OOOOOOOOOOO OOOOO OOO OOO */
/* OO OO OO OOOO OOOO */
/* OO OO OO OO OO OO */
/* OOOOOO OO OO OO OO OO */
/* OO OO OO OOO OO */
/* OO OO OO OO */
/* OO OO OOO OO OO */
/* OO OOOOOO OO OO */
/* */
/******************************************************************************/
static int l = 196;
static char t[200]; // = {'|',' ','-',' ','|',' ','-',' ','|',' ','-',' ','|',' ','-',' ','|'};
static void init()
{
for (int i = 0; i < l; i++) {
if (i % 4 == 0) t[i] = 'O';
if (i % 4 == 1) t[i] = ' ';
if (i % 4 == 2) t[i] = '-';
if (i % 4 == 3) t[i] = ' ';
}
}
static void console()
{
int milliseconds = 100;
struct timespec rem;
struct timespec req= {
(int)(milliseconds / 1000), /* secs (Must be Non-Negative) */
(milliseconds % 1000) * 1000000 /* nano (Must be in range of 0 to 999999999) */
};
printf("\n> ");
for (int i = 0; i < l; i++) printf("%c", t[i]);
printf("<\n\x1b[1F\x1b[2K");
nanosleep(&req , &rem);
}
void fsm_another_proto_engine ()
{
init();
console();
}

View File

@ -133,22 +133,20 @@
#include "../include/signal.h"
#include "../include/fsm.h"
GtkApplication *app;
GtkApplication *fsf_get_app() {return app;}
int main (int argc, char **argv)
{
GtkApplication *app;
int status;
printf("exemple de format de journal : 2024-08-31 [%s()] %s\
< NB ce printf() se trouve dans 'main'\n", __func__, "message"); // logging TODO TODO
// un exemple : $ sudo cat /var/log/messages
app = gtk_application_new ("org.gem-graph", G_APPLICATION_DEFAULT_FLAGS);
fsm_init (); // fsm = finite state machine (see : src/fsm/dispatch.c)
bool mode_console = FALSE; // TRUE FALSE
fsm_init (mode_console); // fsm = finite state machine (see : src/fsm/dispatch.c)
g_signal_connect (app, "activate", G_CALLBACK (on_windows_activation), NULL);
// on_windows_activation <> see : src/widget/dispatch
// on_windows_activation <> see : src/widget/dispatch.c
status = g_application_run (G_APPLICATION (app), argc, argv);
g_object_unref (app);

View File

@ -30,6 +30,7 @@
#include "../../include/widget.h"
#include "../../include/fsm.h"
/******************************************************************************/
@ -60,16 +61,25 @@ void on_windows_activation (GtkApplication *app)
{
// g_application_activate (G_APPLICATION (app)); < how ? > in main.c is
// g_signal_connect (app, "activate", G_CALLBACK (on_windows_activation), NULL);
/*
printf(" We apologise for the temporary interruption to the window. 😇️\n\
Please, ask 'src/widget/dispatch.c on_windows_activation (GtkApplication *app)'\n\
to call: widget_design_main_window (main_window)\n");
*/
main_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));
//-----------------------------------------------------------------------------------//
//-----------------------------------------------------------------------------------//
printf("mode_console 😇️\
(see@ 'src/widget/dispatch.c on_windows_activation() < POUR RÉACTIVER GTK4)\n");
// S I P A S M O D E - C O N S O L E
widget_design_main_window (main_window); // def: widget/topbar/dispatch
// S I P A S M O D E - C O N S O L E
fsm_engine_init();
//-----------------------------------------------------------------------------------//
//-----------------------------------------------------------------------------------//
widget_design_dialog_window (main_window, dialog_window);
widget_design_text_window (main_window, text_window);
}