diff --git a/2024-07 audit proto-gg.html b/audit/2024-07-14
similarity index 100%
rename from 2024-07 audit proto-gg.html
rename to audit/2024-07-14
diff --git a/a_main.plt b/data/gnuplot/a_cmd.plt
similarity index 58%
rename from a_main.plt
rename to data/gnuplot/a_cmd.plt
index f15987f..11b4378 100644
--- a/a_main.plt
+++ b/data/gnuplot/a_cmd.plt
@@ -1,5 +1,5 @@
# Fichier de commande pour gnuplot
-# En ligne de commande : load "a_main.plt"
+# En ligne de commande : load "data/gnuplot/a_cmd.plt"
#
set zeroaxis
plot cos(x),\
diff --git a/list.txt b/data/gnuplot/sin
similarity index 73%
rename from list.txt
rename to data/gnuplot/sin
index 0da200a..adff780 100644
--- a/list.txt
+++ b/data/gnuplot/sin
@@ -1,3 +1,5 @@
+ -7.000 -0.657
+ -6.000 0.279
-5.000 0.959
-4.000 0.757
-3.000 -0.141
@@ -9,3 +11,5 @@
3.000 0.141
4.000 -0.757
5.000 -0.959
+ 6.000 -0.279
+ 7.000 0.657
diff --git a/include/fsm.h b/include/fsm.h
index 492da69..a8d6ea2 100644
--- a/include/fsm.h
+++ b/include/fsm.h
@@ -100,6 +100,9 @@ void fsm_tools_list_test(); // def: measure/manage; call: measure/manage;
void fsm_rule_trig_measure (int rule_id, int object_id, int measure_id);
+// --------------------------------------------------------------- WIP ------
+void fsm_engine_init();
+
// --------------------------------------------------------------- WIP ------
int fsm_journal_push (journal **jj, int v_value);
int fsm_journal_pop (journal **jj);
@@ -110,7 +113,13 @@ void fsm_journal_seek (journal *jj, int vv);
// --------------------------------------------------------------- WIP ------
-void fsm_data_new_insert (data_list d, int *p_data);
-void fsm_data_new_concat (data_list d, int *p_data, int *p_target);
-void *fsm_data_get(); // (data_list d, int from, int to);
-void fsm_data_erase (data_list d, int from, int to);
+void fsm_add_data (data_list d, int *p_data, int *p_target);
+int fsm_get_data (data_list d, int from, int to);
+void fsm_remove_data (data_list d, int *p_data);
+
+
+// --------------------------------------------------------------- WIP ------
+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);
+
diff --git a/include/heaviside.h b/include/heaviside.h
deleted file mode 100644
index e49f74a..0000000
--- a/include/heaviside.h
+++ /dev/null
@@ -1,8 +0,0 @@
-/* ------------------------------------ */
-double H(
-double x)
-{
- if(x>0.)return(1.);
- else return(0.);
-}
-/* ------------------------------------ */
diff --git a/include/xdef.h b/include/xdef.h
deleted file mode 100644
index 3ae00c1..0000000
--- a/include/xdef.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/* --------------------------------------------------------------- */
-/* gnuplot : xdef.h */
-/* https://fr.wikibooks.org/wiki/Mathc_gnuplot/Fichiers_h_:_xdef */
-/* --------------------------------------------------------------- */
-
-#ifndef PI
-#define PI 3.14159265359
-#endif
-
-/* ------------------------------------ */
-void clrscrn(void)
-{
- printf("\n\n\n\n\n\n\n\n\n\n\n"
- "\n\n\n\n\n\n\n\n\n\n\n"
- "\n\n\n\n\n\n\n\n\n\n\n");
-}
-/* ------------------------------------ */
-void Pause(void)
-{
-int i=300;
-int j;
-
- while(--i){j=600000;while(--j);}
-}
-/* ------------------------------------ */
-/* First file name : */
-/* */
-/* char fname[]= "a_paaa"; */
-/* ------------------------------------ */
-char *NewName(
-char *name
-)
-{
- if(name[5]<'z')
-
- ++name[5];
-
- else if(name[4]<'z')
- {
- name[5]='a';
- ++name[4];
- }
- else if(name[3]<'z')
- {
- name[5]='a';
- name[4]='a';
- ++name[3];
- }
-
- return(name);
-}
-
diff --git a/include/xfx_x.h b/include/xfx_x.h
deleted file mode 100644
index 92becb4..0000000
--- a/include/xfx_x.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* ------------------------------------------------------------------ */
-/* gnuplot : xfx_x.h */
-/* https://fr.wikibooks.org/wiki/Mathc_gnuplot/Fichiers_h_:_xfx_x */
-/* ------------------------------------------------------------------ */
-
-/* ------------------------------------
- f'(a) = f(a+h) - f(a-h)
- -------------
- 2h
- ---------------------------------- */
-double fx_x(
-double (*P_f)(double x),
-double a,
-double h
-)
-{
- return( ( ((*P_f)(a+h))-((*P_f)(a-h)) ) / (2.*h) );
-}
-/* ------------------------------------
- f''(a) = f(a+h) - 2 f(a) + f(a-h)
- ----------------------
- h**2
- ---------------------------------- */
-double fx_xx(
-double (*P_f)(double x),
-double a,
-double h
-)
-{
- return( (((*P_f)(a+h))-2*((*P_f)(a))+((*P_f)(a-h))) / (h*h) );
-}
-
diff --git a/include/xfxy_x.h b/include/xfxy_x.h
deleted file mode 100644
index c16e08e..0000000
--- a/include/xfxy_x.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* ------------------------------------------------------------------ */
-/* gnuplot : xfxy_x.h */
-/* https://fr.wikibooks.org/wiki/Mathc_gnuplot/Fichiers_h_:_xfxy_x */
-/* ------------------------------------------------------------------ */
-
-#include "xspv.h"
-
-double fxy_x(
-double (*P_f)(double x, double y),
-double h,
-point2d p
-)
-{
-double tplsh;
-double tmnsh;
-
- tplsh = ((*P_f)(p.x+h,p.y));
- tmnsh = ((*P_f)(p.x-h,p.y));
-
- return(( tplsh-tmnsh)/(2.*h) );
-}
-/* ------------------------------------ */
-double fxy_y(
-double (*P_f)(double x, double y),
-double h,
-point2d p
-)
-{
-double tplsh;
-double tmnsh;
-
- tplsh = ((*P_f)(p.x,p.y+h));
- tmnsh = ((*P_f)(p.x,p.y-h));
-
- return(( tplsh-tmnsh)/(2.*h) );
-}
-/* ------------------------------------ */
-double fxy_xx(
-double (*P_f)(double x, double y),
-double h,
-point2d p
-)
-{
-double t;
-double tplsh;
-double tmnsh;
-
- t = ((*P_f)(p.x , p.y));
- tplsh = ((*P_f)(p.x+h, p.y));
- tmnsh = ((*P_f)(p.x-h, p.y));
-
- return( (tplsh-2*t+tmnsh)/(h*h) );
-}
-/* ------------------------------------ */
-double fxy_yy(
-double (*P_f)(double x, double y),
-double h,
-point2d p
-)
-{
-double t;
-double tplsh;
-double tmnsh;
-
- t = ((*P_f)(p.x, p.y ));
- tplsh = ((*P_f)(p.x, p.y+h));
- tmnsh = ((*P_f)(p.x, p.y-h));
-
- return( (tplsh-2*t+tmnsh)/(h*h) );
-}
diff --git a/include/xfxyz_x.h b/include/xfxyz_x.h
deleted file mode 100644
index ee737bc..0000000
--- a/include/xfxyz_x.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/* ------------------------------------------------------------------ */
-/* gnuplot : xfxyz_x.h */
-/* https://fr.wikibooks.org/wiki/Mathc_gnuplot/Fichiers_h_:_xfxyz_x */
-/* ------------------------------------------------------------------ */
-
-#include "xspv.h"
-
-double fxyz_x(
-double (*P_f)(double x, double y, double z),
-double h,
-point3d p
-)
-{
-double tplsh;
-double tmnsh;
-
- tplsh = ((*P_f)(p.x+h,p.y,p.z));
- tmnsh = ((*P_f)(p.x-h,p.y,p.z));
-
- return(( tplsh-tmnsh)/(2.*h) );
-}
-/* ------------------------------------ */
-double fxyz_y(
-double (*P_f)(double x, double y, double z),
-double h,
-point3d p
-)
-{
-double tplsh;
-double tmnsh;
-
- tplsh = ((*P_f)(p.x,p.y+h,p.z));
- tmnsh = ((*P_f)(p.x,p.y-h,p.z));
-
- return(( tplsh-tmnsh)/(2.*h) );
-}
-/* ------------------------------------ */
-double fxyz_z(
-double (*P_f)(double x, double y, double z),
-double h,
-point3d p
-)
-{
-double tplsh;
-double tmnsh;
-
- tplsh = ((*P_f)(p.x,p.y,p.z+h));
- tmnsh = ((*P_f)(p.x,p.y,p.z-h));
-
- return(( tplsh-tmnsh)/(2.*h) );
-}
diff --git a/include/xplt.h b/include/xplt.h
deleted file mode 100644
index 0f322c2..0000000
--- a/include/xplt.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* --------------------------------------------------------------- */
-/* gnuplot : xplt.h */
-/* https://fr.wikibooks.org/wiki/Mathc_gnuplot/Fichiers_h_:_xplt */
-/* --------------------------------------------------------------- */
-
-typedef struct
-{
- double xmini; double xmaxi;
- double ymini; double ymaxi;
-
-}W_Ctrl, *PW_Ctrl;
-/* ------------------------------------ */
-W_Ctrl i_WGnuplot(
- double xmini, double xmaxi,
- double ymini, double ymaxi
-)
-{
-W_Ctrl w = {xmini,xmaxi,ymini,ymaxi};
-
-return (w);}
-/* ------------------------------------ */
-typedef struct
-{
- double xmini; double xmaxi;
- double ymini; double ymaxi;
- double zmini; double zmaxi;
-
-}Ws_Ctrl, *PWs_Ctrl;
-/* ------------------------------------ */
-Ws_Ctrl i_WsGnuplot(
- double xmini, double xmaxi,
- double ymini, double ymaxi,
- double zmini, double zmaxi
-)
-{
-Ws_Ctrl w = {xmini,xmaxi,ymini,ymaxi,zmini,zmaxi};
-
-return (w);}
-/* ------------------------------------ */
-typedef struct
-{
- double rot_x; double rot_z;
- double scale; double scale_z;
-
-}View_Ctrl, *PView_Ctrl;
-/* ------------------------------------ */
-View_Ctrl i_VGnuplot(
- double rot_x, double rot_z,
- double scale, double scale_z
-)
-{
-View_Ctrl V = {rot_x,rot_z,scale_z,scale_z};
-
-return (V);}
-/* ------------------------------------ */
-typedef struct
-{
- double mini; double maxi;
- double step;
-
-}t_Ctrl, *Pt_Ctrl;
-/* ------------------------------------ */
-t_Ctrl i_time(
- double mini, double maxi,
- double step
-)
-{
-t_Ctrl t = {mini,maxi,step};
-
-return (t);}
diff --git a/include/xspv.h b/include/xspv.h
deleted file mode 100644
index ae88360..0000000
--- a/include/xspv.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/* --------------------------------------------------------------- */
-/* gnuplot : xspv.h */
-/* https://fr.wikibooks.org/wiki/Mathc_gnuplot/Fichiers_h_:_xspv */
-/* --------------------------------------------------------------- */
-
-typedef struct
-{
- double x; double y;
-
-}point2d, *Ppoint2d;
-/* ------------------------------------ */
-point2d i_point2d(
- double x, double y
-)
-{
-point2d p = {x,y};
-
-return (p);}
-/* ------------------------------------ */
-typedef struct
-{
- double x; double y; double z;
-
-}point3d, *Ppoint3d;
-/* ------------------------------------ */
-point3d i_point3d(
-double x, double y, double z
-)
-{
-point3d p = {x,y,z};
-
-return (p);}
-/* ------------------------------------ */
-typedef struct
-{
- double i; double j;
-
-}vector2d, *Pvector2d;
-/* ------------------------------------ */
-vector2d i_vector2d(
- double i, double j
-)
-{
-vector2d v = {i,j};
-
-return (v);}
-/* ------------------------------------ */
-typedef struct
-{
- double i; double j; double k;
-
-}vector3d, *Pvector3d;
-/* ------------------------------------ */
-vector3d i_vector3d(
- double i, double j, double k
-)
-{
-vector3d v = {i,j,k};
-
-return (v);}
diff --git a/src/fsm/dispatch.c b/src/fsm/dispatch.c
index 685aedb..f69e58b 100644
--- a/src/fsm/dispatch.c
+++ b/src/fsm/dispatch.c
@@ -60,10 +60,13 @@
void fsm_init()
{
+ /*
fsm_measures_list_init();
fsm_results_list_init();
fsm_displayable_list_init();
fsm_preferences_init();
+ */
+ fsm_engine_init(); // pour avancer, en attendant... 😇️
}
diff --git a/src/fsm/engine.c b/src/fsm/engine.c
new file mode 100644
index 0000000..e24ab07
--- /dev/null
+++ b/src/fsm/engine.c
@@ -0,0 +1,92 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * *
+* *
+* Gem-graph client *
+* Finite State Machine Engine *
+* *
+* Copyright © 2024 Libre en Communs *
+* Copyright © 2024 Jean Sirmai *
+* *
+* 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 . *
+* *
+* * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include
+#include
+#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("x \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
+ printf("x \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
+ printf(" x \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
+ printf(" x \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
+ printf(" x \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
+ printf(" x \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
+ printf(" x \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
+ printf(" x \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
+ printf(" x \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
+ printf(" x \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
+ printf(" x \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
+ printf(" x \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
+ printf(" x \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
+ printf(" x \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
+ printf(" x \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
+ printf(" x \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
+ printf(" x \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
+ printf(" x \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
+ printf(" x \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
+ printf(" x \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
+ printf(" x \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
+ printf(" x \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
+ printf(" x \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
+ printf(" x \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
+ printf(" x \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
+ printf("x \n\x1b[1F\x1b[2K"); nanosleep(&req , &rem);
+ }
+}
diff --git a/src/fsm/engine.java b/src/fsm/engine.java
new file mode 100644
index 0000000..d810ab5
--- /dev/null
+++ b/src/fsm/engine.java
@@ -0,0 +1,156 @@
+package engine;
+
+import java.lang.System.out;
+import measures.MeasuresManager;
+import resources.P;
+import rule.FormulasManager;
+import rule.FormulasManagerAccess;
+import session.ViewControls;
+import state.StateManager;
+import state.StateManagerLocal;
+import views.MODEL;
+import views.ViewsManagerAccess;
+
+/* 2020-11 [prototype 0.0]
+ MonoThread executes a while(true) loop with two instructions:
+ (1) search a place where a transition can be done
+ (2) do the transition
+
+ while (true)
+ if (session.MainView.isStartStopButtonSelected())
+ {
+ state.StateManagerLocal.chooseLocalOrigin(false);
+ new SingleTransition(true);
+ }
+*/
+public class SingleTransition {
+
+ protected volatile boolean is_done = false;
+ protected volatile String elapsed;
+ public SingleTransition (boolean mono) {if (mono) perform_a_transition();}
+
+ private synchronized static final void perform_a_transition()
+ {
+ // if (step_by_step) StateManagerLocal.circlePresentState();
+ if(ViewControls.isDoSelected()) SingleTransition.execute_do (SingleTransition.prepare_do (false));
+ else if(ViewControls.isUndoSelected()) SingleTransition.execute_undo(SingleTransition.prepare_undo(false));
+ else if(ViewControls.isRedoSelected()) SingleTransition.execute_redo(SingleTransition.prepare_redo(false));
+ // if (ViewControls.undo_buffer < UNDO_STACK_SIZE) ViewControls.setTimeBufferBar(ViewControls.undo_buffer); MainView.addElapsedTime();
+ }
+ public static final int prepare_do (final boolean step_by_step)
+ {
+ // ThreadsManager.addCycle(); // {nb_cycles ++;} This cycle can be inefficient if no formula can be applied
+ selected_formula = FormulasManager.iterateToFindAFormula();
+ // if(selected_formula > -1) out.println(" prepare_do "+ state.StateManagerLocal.getInfoDebug());
+ return selected_formula;
+ }
+ public static final void execute_do (final int formula_key) { // formula.doActions(); out.print(" execute_do: formula key=" + formula_key +" ");
+ if (formula_key < 0) { if(StateManagerLocal.comment_origins) out.println("execute_do failure: formula key=" + formula_key); return;}
+
+ MeasuresManager.startMeasuringAFormulaEffect(formula_key); // out.println("execute_do formula name = "+ FormulasManager.formula.get(formula_key).name);
+ FormulasManager.getFormula().get (formula_key) .doActions(); // {for (i = 0; i < action.length; i++) action[i].doAction (); StateManagerLocal.endRule(action_swap, action_name);}
+ MeasuresManager.endMeasuringAFormulaEffect(formula_key);
+ writePresentState (formula_key);
+ present ++; if (present == UNDO_STACK_SIZE) present = 0; // MainView.setStartStopButtonSelected(false);// if (present == 1); {MainView.setStartStopButtonSelected(false); } //out.println("MonoThread.execute_do > stop ! (present == 1)");
+ ViewControls .execDo();
+ doRepaint();
+ if (DO_UNDO_REDO_comment) comment_do(formula_key); // if (MonoThreadTest.present == 12) MainView.setStartStopButtonSelected(false);
+ }
+ public static final int prepare_undo (final boolean step_by_step) { // MonoThreadTest.present --; return MonoThreadTest. f [MonoThreadTest.present];
+ if (ViewControls.isUndoBufferEmpty()) {out.println("prepare_undo stop !");} // undo_buffer is always >= 0
+ else {present --; if (present == -1) present = UNDO_STACK_SIZE -1; ViewControls.execUndo();}
+ final int formula_key = readPresentState(step_by_step);
+ // if (step_by_step) StateManagerLocal.circlePresentState();
+ return formula_key;
+ }
+ public static final void execute_undo (final int formula_key) { // formula.unDoActions(); {for (i = 0; i < action.length; i++) ...}
+ FormulasManager.getFormula().get (formula_key) .unDoActions(); // {for (i = 0; i < action.length; i++) action[i].doAction (); StateManagerLocal.endRule(action_swap, action_name);}
+ ViewControls.setRedoSelected();
+ // StateManagerLocal.circlePresentState();
+ // ThreadsManager.removeEfficientCycle(); // {nb_effective_cycles --;}
+ doRepaint();
+ if (DO_UNDO_REDO_comment) comment_undo();
+ }
+ public static final int prepare_redo (final boolean step_by_step) { // return MonoThreadTest. f [MonoThreadTest.present];
+ final int formula_key = readPresentState(step_by_step);
+ // ThreadsManager.addEfficientCycle(); // {nb_effective_cycles ++;}
+ // if (step_by_step) StateManagerLocal.circlePresentState();
+ return formula_key;
+ }
+ public static final void execute_redo (final int formula_key) { // formula.doActions(); {for (i = 0; i < action.length; i++) ...}
+ // the redo_buffer is always >= 0 (if the re_do buffer is empty, the re_do button is deactivated)
+ if (! ViewControls.isRedoBufferEmpty()) {
+ FormulasManager.getFormula().get (formula_key).doActions(); // {for (i = 0; i < action.length; i++) action[i].doAction (); StateManagerLocal.endRule(action_swap, action_name);}
+ present ++; if (present == UNDO_STACK_SIZE) present = 0;
+ ViewControls.execRedo();
+ }
+ ViewControls.setUndoSelected();
+ doRepaint();
+ if (DO_UNDO_REDO_comment) comment_redo();
+ }
+ public final static void writePresentState (final int formula_key) { // x [present] = StateManagerLocal.local_space_origin_X; ...
+
+ formula [present] = (short) formula_key;
+ o [present] = (byte) StateManagerLocal.getReferenceOrientation_1();
+ switch(StateManager.space_dimension) {
+ case THREE: z [present] = (byte) StateManagerLocal.local_space_origin_Z; // no break;
+ case TWO: y [present] = (byte) StateManagerLocal.local_space_origin_Y; // no break;
+ case ONE: x [present] = (byte) StateManagerLocal.local_space_origin_X; // no break;
+ default:;}
+ }
+ private final static int readPresentState (final boolean step_by_step) { // StateManagerLocal.local_space_origin_X = x [present]; ...
+
+ switch(StateManager.space_dimension) {
+ case THREE : StateManagerLocal.local_space_origin_Z = z [present]; // no break
+ case TWO : StateManagerLocal.local_space_origin_Y = y [present]; // no break
+ case ONE : StateManagerLocal.local_space_origin_X = x [present]; // no break;
+ default:;}
+ StateManagerLocal.setReferenceOrientation_1 (o [present]);
+ return formula[present];
+ }
+ private final static void doRepaint() {ViewsManagerAccess.getView(MODEL.SPACE, "MonoThread.execute_do_undo_redo()").repaint(); }
+ public static int selected_formula;
+ public static int present = 0;
+ public final static int UNDO_STACK_SIZE = 3000; // resources.Parameters.UNDO_STACK_SIZE; // This parameter is also used by ViewControls to display the BufferProgressBarValue
+ protected final static short[] formula = new short [UNDO_STACK_SIZE];
+ protected final static byte[] x = new byte [UNDO_STACK_SIZE];
+ protected final static byte[] y = new byte [UNDO_STACK_SIZE];
+ protected final static byte[] z = new byte [UNDO_STACK_SIZE];
+ protected final static byte[] o = new byte [UNDO_STACK_SIZE];
+ private final static byte s6 = 6, s2 = 2;
+ public final static boolean DO_UNDO_REDO_comment = false; // true false
+ protected final static void comment_do (int rank)
+ {
+ if (present == 0) present = UNDO_STACK_SIZE;
+ out.println(" do -----> "+
+ P.aa(present,s6) + " ("+ P.aa(ViewControls.undo_buffer - 1,s2) +"+1="+ P.aa(ViewControls.undo_buffer,s2) +" /"+
+ P.aa(ViewControls.redo_buffer,s2) +" -"+ P.aa(ViewControls.redo_buffer,s2) +") "+
+ P.aa("xyzo ("+ P.aa(x[present - 1],2) +","+ P.aa(y[present - 1],2) +","+ P.aa(z[present - 1],2) +")",12) +" "+ o[present - 1] +" " +
+ // "from:"+ P.aa(from[present - 1],4) +" to:"+ P.aa(to[present - 1],4) +
+ " f="+ formula[present - 1] +
+ "");
+ if (present == UNDO_STACK_SIZE) present = 0;
+ }
+ protected final static void comment_undo () {
+ // present ++; if (present == stack_size) present = 0; // This comment is triggered after present was decreased of one unit
+ out.println(" undo <--| "+
+ P.aa(present,s6) + " ("+ P.aa(ViewControls.undo_buffer + 1,s2) +"-1="+ P.aa(ViewControls.undo_buffer,s2) +" /"+
+ P.aa(ViewControls.redo_buffer - 1,s2) +"+1="+ P.aa(ViewControls.redo_buffer,s2) +") "+
+ P.aa("xyzo ("+ P.aa(x[present],2) +","+ P.aa(y[present],2) +","+ P.aa(z[present],2) +")",12) +" "+ o[present] +" " +
+ // "from:"+ P.aa(from[present],4) +" to:"+ P.aa(to[present],4) +
+ " f="+ formula[present] +
+ "");
+ }
+ protected final static void comment_redo () {
+ if (present == 0) present = UNDO_STACK_SIZE;
+ out.println(" redo |--> "+
+ P.aa(present,s6) + " ("+P.aa(ViewControls.undo_buffer - 1,s2) +"+1="+ P.aa(ViewControls.undo_buffer,s2) + " /"+
+ P.aa(ViewControls.redo_buffer + 1,s2) +"-1="+ P.aa(ViewControls.redo_buffer,s2) +") "+
+ P.aa("xyzo ("+ P.aa(x[present - 1],2) +","+ P.aa(y[present - 1],2) +","+ P.aa(z[present - 1],2) +")",12) +" "+ o[present - 1] +" " +
+ // "from:"+ P.aa(from[present - 1],4) +" to:"+ P.aa(to[present - 1],4) +
+ " f="+ formula[present - 1] +
+ "");
+ if (present == UNDO_STACK_SIZE) present = 0;
+ }
+}
+
diff --git a/src/fsm/measure/data_list.c b/src/fsm/measure/data_list.c
index 04c02a7..7b9dff4 100644
--- a/src/fsm/measure/data_list.c
+++ b/src/fsm/measure/data_list.c
@@ -42,43 +42,10 @@
/* ex : filter, concat, inverse, scale, correlate, etc. */
/******************************************************************************/
-void fsm_data_new_insert (data_list d, int *p_data) {}
-void fsm_data_new_concat (data_list d, int *p_data, int *p_target) {}
-void fsm_data_erase (data_list d, int from, int to) {}
-
-char heq[] = "sin(x)";
-char geq[] = "cos(x)";
-
-void *fsm_data_get () // (data_list d, int from, int to)
-{
- int v[10];
- for (int i = 0; i < 10; i++) {v[i] = rand() % 10; printf("%d ", v[i]);}
- printf("\n");
-
- FILE *fp;
- double a;
- fp = fopen("list.txt","w");
- for(a = -5.0; a <= 5.0; a++) fprintf(fp, " %6.3f %6.3f\n", a, sin(a));
- fclose(fp);
- printf("file list.txt opened\npress 'return' to continue.");
- getchar();
-
- fp = fopen("a_main.plt","w");
-
- fprintf(fp,"# Fichier de commande pour gnuplot \n"
- "# En ligne de commande : load \"a_main.plt\"\n"
- "#\n"
- " set zeroaxis\n"
- " plot %s,\\\n"
- " %s \n\n"
- " reset", geq, heq);
- fclose(fp);
-
- printf("\n\nload \"a_main.plt\" with gnuplot."
- "\n\npress return to continue. ");
- getchar();
-
-
- return v;
-}
+void fsm_add_data (data_list d, int *p_data, int *p_target) {}
+int fsm_get_data (data_list d, int from, int to) {return 0;}
+void fsm_remove_data (data_list d, int *p_data) {}
+// http://www.gnuplot.info/
+// https://fr.wikipedia.org/wiki/Gnuplot
+// https://fr.wikibooks.org/wiki/Mathc_gnuplot
diff --git a/src/fsm/measure/disp_list.c b/src/fsm/measure/disp_list.c
index 0a7dc8f..8518b41 100644
--- a/src/fsm/measure/disp_list.c
+++ b/src/fsm/measure/disp_list.c
@@ -33,11 +33,16 @@
/******************************************************************************/
-/* An editable list of displayed results is defined and maintained here */
+/* An editable list of displayable results is defined and maintained here */
/* (see : fsm/measure/manage.c) */
/* - - - */
/* NB some data may be displayed simultaneously in different pages */
/* ex : pages SYNTH & RESULTS */
/******************************************************************************/
+// "graph", "chart", "plot" and "diagram" are ambiguous terms, used interchangeably.
+
+void fsm_disp_add_chart (disp_list d, int *p_chart) {}
+int fsm_disp_get_chart (disp_list d, int from, int to) {return 0;}
+void fsm_disp_remove_chart (disp_list d, int *p_chart) {}
diff --git a/src/fsm/measure/manage.c b/src/fsm/measure/manage.c
index 6aef9b2..cb07600 100644
--- a/src/fsm/measure/manage.c
+++ b/src/fsm/measure/manage.c
@@ -79,10 +79,12 @@
-// use gnuplot ? gtkwave ? TODO check
+// use gnuplot ? gtkwave ? TODO check ---------------------
+
+
void fsm_add_measure (char *measure_name) {fsm_msg (2, 0, measure_name, 2);}
-void fsm_measures_list_init() {if (0) fsm_tools_list_test(); fsm_data_get();}
+void fsm_measures_list_init() {if (0) fsm_tools_list_test();}
void fsm_rule_trig_measure (int rule_id, int object_id, int measure_id) {}
diff --git a/src/fsm/measure/tool_list.c b/src/fsm/measure/tool_list.c
index fd62142..2130023 100644
--- a/src/fsm/measure/tool_list.c
+++ b/src/fsm/measure/tool_list.c
@@ -137,6 +137,9 @@ void fsm_tools_list_view (tool_list *ml)
}
+
+//------------------------------------------------------------------------------
+
void fsm_tools_list_test()
{
tool_list *ex_tool = NULL;
diff --git a/src/main.c b/src/main.c
index 31051e2..1015486 100644
--- a/src/main.c
+++ b/src/main.c
@@ -153,11 +153,11 @@ 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.c)
-
g_signal_connect (app, "activate", G_CALLBACK (on_windows_activation), NULL);
// on_windows_activation <> see : src/widget/dispatch
+ fsm_init (); // fsm = finite state machine (see : src/fsm/dispatch.c)
+
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 31f033c..3d959aa 100644
--- a/src/widget/dispatch.c
+++ b/src/widget/dispatch.c
@@ -61,13 +61,17 @@ 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));
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);
+ widget_design_text_window (main_window, text_window);*/
}
/******************************************************************************/
diff --git a/src/widget/rules/tree_tools/compare.c b/src/widget/rules/tree_tools/compare.c
index 2a9afa2..7e007ac 100644
--- a/src/widget/rules/tree_tools/compare.c
+++ b/src/widget/rules/tree_tools/compare.c
@@ -142,6 +142,10 @@ static GtkWidget *peek(Stack *stack)
// Serializes a GIcon into a GVariant. An equivalent GIcon can be retrieved back
// by calling g_icon_deserialize() on the returned value.
// Oui mais : comment obtenir une GIcon à partir d'une GtkImage ?
+//
+// 🤔️ voir aussi:
+// https://docs.gtk.org/gio/method.Icon.hash.html
+// A #guint containing a hash for the icon, suitable for use in a GHashTable...
static void *push_images_onto_stack (Stack stack_b);
static GtkWidget *do_rtfd (Stack stack_b);
diff --git a/src/widget/rules/tree_tools/dispatch.c b/src/widget/rules/tree_tools/dispatch.c
index 5b705af..bcd30c5 100644
--- a/src/widget/rules/tree_tools/dispatch.c
+++ b/src/widget/rules/tree_tools/dispatch.c
@@ -42,3 +42,11 @@ void *widget_get_rules_tree_tools_pane ()
}
+// GTK possède un espace mémoire où les widgets sont alloués/désalloués
+// Un widget ne conserve pas son pointeur. Son adresse peut donc changer.
+// Créer une stack de widget avec un outil hors GTK n'est pas faisable. Donc :
+// TODO (voir le détail dans : compare.c)
+// Pour obtenir une GIcon à partir d'une GtkImage, je peux la sérialiser :
+// https://docs.gtk.org/gio/method.Icon.serialize.html 🤔️
+// https://docs.gtk.org/gio/method.Icon.hash.html
+// A #guint containing a hash for the icon, suitable for use in a GHashTable...