WIP: cleaning (systematic verifications III)

This commit is contained in:
Jean Sirmai 2024-07-01 07:26:16 +02:00
parent 71d7a2e3d5
commit a4a80c63fe
Signed by: jean
GPG Key ID: FB3115C340E057E3
12 changed files with 126 additions and 174 deletions

View File

@ -18,9 +18,9 @@
* or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; *
* but WITHOUT ANY WARRANTY; *
* without even the implied warranty of MERCHANTABILITY *
* or FITNESS FOR A PARTICULAR PURPOSE. *
* 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 *
@ -42,6 +42,7 @@
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <glib-2.0/glib.h>
#include <gtk-4.0/gtk/gtk.h>
@ -74,8 +75,8 @@ struct arrow_t { uint load; uint site; uint x; uint y; uint z; };
/*
If I'm standing on Earth (or any spinning spheroid),
looking towards its North pole.
If I'm standing on Earth (or any spinning spheroid),
looking towards its North pole.
Then :

View File

@ -17,9 +17,9 @@
* or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; *
* but WITHOUT ANY WARRANTY; *
* without even the implied warranty of MERCHANTABILITY *
* or FITNESS FOR A PARTICULAR PURPOSE. *
* 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 *
@ -37,6 +37,7 @@ void on_main_window_activation (GtkApplication *app, gpointer user_data);
void on_dialog_window_activation (GtkApplication *app, gpointer user_data);
void on_toggle_EXEC_EDIT (GtkWidget *btt_XOR_EXEC_EDIT, gpointer user_data);
void on_toggle_STATE_RULES_DATA (GtkWidget *btt, gpointer user_data);
void on_toggle_MODEL_RUN_STOP (GtkWidget *btt_MODEL_RUN_STOP, gpointer data);
void on_open_STATE (GtkWidget *btt_open_STATE, gpointer data);
@ -46,7 +47,6 @@ void on_open_DATA (GtkWidget *btt_open_DATA, gpointer data);
void on_SAVE_CURRENT_MODEL_BEFORE_EDITING (GtkWidget *btt_SAVE_CURRENT_MODEL, gpointer data);
void on_DISCARD_CURRENT_MODEL_AND_START_EDITING (GtkWidget *btt_SAVE_CURRENT_MODEL, gpointer data);
void on_WRITE_CURRENT_MODEL (GtkWidget *btt_WRITE_CURRENT_MODEL, gpointer data);
void on_toggle_STATE_RULES_DATA (GtkWidget *btt, gpointer user_data);
void on_user_tree_expander_toggled (GtkExpander *expander, gpointer user_data);
void on_setup_user_tree_factory (GtkSignalListItemFactory *factory,

View File

@ -18,9 +18,9 @@
* or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; *
* but WITHOUT ANY WARRANTY; *
* without even the implied warranty of MERCHANTABILITY *
* or FITNESS FOR A PARTICULAR PURPOSE. *
* 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 *
@ -268,64 +268,6 @@ static inline void print_stack(int stack_id)
}
void graphics_model_setup (const int stack_id);
int draw_one_arrow_vertex (const int stack_id,
int space_X,
int space_Y,
int space_Z,
int weight,
int site,
int x,
int y,
int z);
int draw_one_arrow_line(const int stack_id,
int offset_vertex);
/*
* Writes grid ridges to vertex and color buffers
*
* @param coords long (x,y,z), step_x, step_y, step_z
*
* @return void
*/
int draw_space_ridges_vertex (const int stack_id,
long offset_vertex,
long x,
long y,
long z);
int draw_space_ridges_lines (const int stack_id);
/*
* Writes grid lines on space faces
*
* @param coords long (x,y,z)
*
* @return void
*/
long draw_grids_on_space_faces_vertex (const int stack_id,
long x,
long y,
long z);
long draw_grids_on_space_faces_lines (const int stack_id,
long offset_vertex,
long x,
long y,
long z);
int set_arrow (int stack_id,
int arrows_nb,
int space_X,
int space_Y,
int space_Z,
int requested_weight,
int site,
int arrow_x,
int arrow_y,
int arrow_z);
/*
* Initializes a gl_area
*

View File

@ -17,9 +17,9 @@
* or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; *
* but WITHOUT ANY WARRANTY; *
* without even the implied warranty of MERCHANTABILITY *
* or FITNESS FOR A PARTICULAR PURPOSE. *
* 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 *

View File

@ -17,9 +17,9 @@
* or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; *
* but WITHOUT ANY WARRANTY; *
* without even the implied warranty of MERCHANTABILITY *
* or FITNESS FOR A PARTICULAR PURPOSE. *
* 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 *
@ -39,26 +39,23 @@
#define H_IMAGE_LOCAL H / 16
void main_window_design (GtkWindow *main_window);
void dialog_window_design (GtkWindow *main_window, GtkWindow *dialog_window);
GtkButton *get_GtkButton (char *btt_name);
GtkFrame *get_frame_with_label();
GtkWidget *get_selected_rules_vpaned_new();
GtkWidget *get_rules_tree_hpaned_new();
GtkWidget *get_TIME_EXEC_controls_box();
GtkWidget *get_SPACE_EDIT_controls_box();
GtkWidget *get_OBJECTS_and_SITUATIONS();
void dialog_window_design (GtkWindow *main_window,
GtkWindow *dialog_window);
GtkWidget *get_window_child_STATE();
GtkWidget *get_window_child_RULES();
GtkWidget *get_window_child_DATA();
GtkWidget *get_text_view();
GtkWidget *get_selected_rules_vpaned_new();
GtkWidget *get_rules_tree_hpaned_new();
GtkWidget *get_rules_page_new();
GtkWidget *get_TIME_EXEC_controls_box();
GtkWidget *get_SPACE_EDIT_controls_box();
GtkWidget *get_OBJECTS_and_SITUATIONS();
GtkWidget *get_text_view();
GtkWidget *get_image_ALL_SPACE();
GtkWidget *get_image_GLUTAMATE();
GtkWidget *get_image_GLUTAMINE();
@ -69,6 +66,10 @@ GtkWidget *get_image_DOPAMINE();
GtkWidget *get_image_ATP();
GtkWidget *get_image_AMP();
GtkButton *get_GtkButton (char *btt_name);
GtkFrame *get_frame_with_label();
GtkProgressBar *get_ELAPSED_TIME_ProgressBar();
GtkBox *get_RUN_STOP_box();
@ -78,6 +79,10 @@ GtkBox *get_XYZ_box();
GtkBox *get_rules_user_tree_new();
GtkBox *get_ELAPSED_TIME_box();
struct TreeNode_t {gchar *text; struct TreeNode_t *child, *next;};
void add_child_node (struct TreeNode_t *parent, struct TreeNode_t *child);
struct TreeNode_t *create_user_tree_node (const gchar* text);
void let_us_create_a_complex_useless_and_expensive_tree (struct TreeNode_t *tree_root);
GtkScrolledWindow *get_user_rules_tree ();
void icons_for_fun (GtkHeaderBar *header_bar);

View File

@ -26,7 +26,7 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * */
#include "../include/callback.h"
#include "../include/callbacks.h"
#include "../include/widgets.h"
#include "../include/graphics.h"
@ -37,16 +37,11 @@
static GtkWindow *main_window, *dialog_window;
void on_main_window_activation (GtkApplication *app,
gpointer no_user_data)
{
main_window = GTK_WINDOW (gtk_application_window_new (app));
main_window_design (main_window);
g_signal_connect (app,
"activate",
G_CALLBACK (on_dialog_window_activation),
main_window);
}
@ -56,6 +51,8 @@ void on_dialog_window_activation (GtkApplication *app,
dialog_window = GTK_WINDOW (gtk_application_window_new (app));
dialog_window_design (main_window,
dialog_window);
gtk_window_present (GTK_WINDOW (dialog_window));
}
@ -119,6 +116,13 @@ void on_bind_user_tree_factory (GtkSignalListItemFactory *factory,
gtk_tree_list_row_get_depth(row) * 20);
}
void on_setup_user_tree_factory (GtkSignalListItemFactory *factory,
GObject* object, gpointer user_data){
GtkWidget* expander = gtk_expander_new (NULL);
gtk_list_item_set_child (GTK_LIST_ITEM (object), expander);
if (0) printf("[on_setup_user_tree_factory] here is an expander\n");
}
/******************************************************************************/
/* G L A R E A */
@ -286,18 +290,18 @@ void on_SAVE_CURRENT_MODEL_BEFORE_EDITING (GtkWidget *btt_SAVE_CURRENT_MODEL,
gpointer data) {
gtk_widget_set_sensitive (GTK_WIDGET (data),
TRUE);
printf ("callback.c (line 294) - SAVE_CURRENT_MODEL_BEFORE_EDITING\n");
printf ("callback.c (line 286) - SAVE_CURRENT_MODEL_BEFORE_EDITING\n");
}
void on_DISCARD_CURRENT_MODEL_AND_START_EDITING (GtkWidget *btt_SAVE_CURRENT_MODEL,
gpointer data) {
gtk_window_close (GTK_WINDOW (data));
printf ("callback.c (line 300) - DISCARD_CURRENT_MODEL_AND_START_EDITING\n");
printf ("callback.c (line 292) - DISCARD_CURRENT_MODEL_AND_START_EDITING\n");
}
void on_WRITE_CURRENT_MODEL (GtkWidget *btt_WRITE_CURRENT_MODEL,
gpointer data) {
gtk_window_close (GTK_WINDOW (data));
printf ("callback.c (line 306) - WRITE_CURRENT_MODEL\n");
printf ("callback.c (line 300) - WRITE_CURRENT_MODEL\n");
}

View File

@ -25,7 +25,7 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * */
#include "../include/callback.h"
#include "../include/callbacks.h"
void dialog_window_design (GtkWindow *main_window, GtkWindow *dialog_window){
char *title = " Save the current model before modifying it? ";

View File

@ -26,7 +26,7 @@
#include "../include/graphics.h"
#include "../include/callback.h"
#include "../include/callbacks.h"
struct stack_index_t {
long stack_id;

View File

@ -18,9 +18,9 @@
* or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; *
* but WITHOUT ANY WARRANTY; *
* without even the implied warranty of MERCHANTABILITY *
* or FITNESS FOR A PARTICULAR PURPOSE. *
* 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 *
@ -29,21 +29,19 @@
* * * * * * * * * * * * * * * * * * * * * * * * * * */
#include "../include/callback.h"
#include "../include/callbacks.h"
int main (int argc, char **argv)
{
GtkApplication *app;
int status;
app = gtk_application_new ("org.jean.GG_hack", G_APPLICATION_DEFAULT_FLAGS);
app = gtk_application_new ("org.jean.gg_hack", G_APPLICATION_DEFAULT_FLAGS);
g_signal_connect (app, "activate", G_CALLBACK (on_main_window_activation), NULL);
g_signal_connect (app, "activate", G_CALLBACK (on_dialog_window_activation), NULL);
status = g_application_run (G_APPLICATION (app), argc, argv);
g_object_unref (app);
printf("\nTODO (2024-06-30) OpenGL see : widgets.get_SPACE_VIEW_box()\
\nline 138 > ui_setup_glarea (0, GTK_WIDGET (middle_box));\n\n");
return status;
}

View File

@ -2,40 +2,42 @@
* *
* Gem-graph client *
* *
* GTK4 Tree list *
* Widgets header *
* *
* Copyright © 2021 Libre en Communs <contact@a-lec.org> *
* Copyright © 2023 Adrien Bourmault <neox@a-lec.org> *
* Copyright © 2024 Jean Sirmai <jean@a-lec.org> *
* Copyright © 2021 Libre en Communs <contact@a-lec.org> *
* Copyright © 2021 Adrien Bourmault <neox@a-lec.org> *
* Copyright © 2021 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 publishedby the Free Software Foundation, *
* either version 3 of the License, or (at your option) any later version. *
* 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. *
* 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/>. *
* 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 "../include/callback.h"
#include "../include/callbacks.h"
#include "../include/widgets.h"
// https://docs.gtk.org/gtk4/visual_index.html < widgets gallery
// https://docs.gtk.org/gtk4/section-text-widget.html
// https://docs.gtk.org/gtk4/class.Widget.html#height-for-width-geometry-management
// GTK_ORIENTATION_VERTICAL GTK_ORIENTATION_HORIZONTAL
struct TreeNode_t {gchar *text; struct TreeNode_t *child, *next;};
static void add_child_node (struct TreeNode_t *parent, struct TreeNode_t *child){
void add_child_node (struct TreeNode_t *parent, struct TreeNode_t *child){
if (parent->child) {
struct TreeNode_t *cur = parent->child;
while (cur && cur->next) {cur = cur->next;}
@ -43,52 +45,13 @@ static void add_child_node (struct TreeNode_t *parent, struct TreeNode_t *child)
} else parent->child = child;
}
static struct TreeNode_t *create_user_tree_node (const gchar* text){
struct TreeNode_t *create_user_tree_node (const gchar* text){
struct TreeNode_t *node = g_malloc0 (sizeof(struct TreeNode_t));
node->text = g_strdup (text);
node->child = NULL; // if (0) printf("create_user_tree_node %s\n", text);
return node;
}
static void let_us_create_a_complex_useless_and_expensive_tree (struct TreeNode_t *tree_root) {
struct TreeNode_t *a = create_user_tree_node("We, the people");add_child_node(tree_root, a);
struct TreeNode_t *b = create_user_tree_node("in Order to"); add_child_node(tree_root, b);
struct TreeNode_t *c = create_user_tree_node("do establish"); add_child_node(tree_root, c);
struct TreeNode_t *aa = create_user_tree_node("aware of"); add_child_node(a, aa);
struct TreeNode_t *aaa = create_user_tree_node("our rights"); add_child_node(aa, aaa);
struct TreeNode_t *aab = create_user_tree_node("our duties"); add_child_node(aa, aab);
struct TreeNode_t *aaaa = create_user_tree_node("read"); add_child_node(aaa, aaaa);
struct TreeNode_t *aaab = create_user_tree_node("write"); add_child_node(aaa, aaab);
struct TreeNode_t *aaac = create_user_tree_node("copy"); add_child_node(aaa, aaac);
struct TreeNode_t *aaad = create_user_tree_node("edit"); add_child_node(aaa, aaad);
struct TreeNode_t *aaaba= create_user_tree_node("code"); add_child_node(aaab, aaaba);
struct TreeNode_t *aaabb= create_user_tree_node("language"); add_child_node(aaab, aaabb);
struct TreeNode_t *aaabc= create_user_tree_node("any art..."); add_child_node(aaab, aaabc);
struct TreeNode_t *aaadb= create_user_tree_node("publish"); add_child_node(aaac, aaadb);
struct TreeNode_t *aaada= create_user_tree_node("create"); add_child_node(aaad, aaada);
struct TreeNode_t *aaba = create_user_tree_node("learn"); add_child_node(aab, aaba);
struct TreeNode_t *aabb = create_user_tree_node("help"); add_child_node(aab, aabb);
struct TreeNode_t *ba = create_user_tree_node("promote"); add_child_node(b, ba);
struct TreeNode_t *bb = create_user_tree_node("individual"); add_child_node(b, bb);
struct TreeNode_t *bc = create_user_tree_node("and common"); add_child_node(b, bc);
struct TreeNode_t *bca = create_user_tree_node("education"); add_child_node(bc, bca);
struct TreeNode_t *bcb = create_user_tree_node("mutual"); add_child_node(bc, bcb);
struct TreeNode_t *bcc = create_user_tree_node("support"); add_child_node(bc, bcc);
struct TreeNode_t *bcd = create_user_tree_node("health"); add_child_node(bc, bcd);
struct TreeNode_t *bcda = create_user_tree_node("mental"); add_child_node(bcd, bcda);
struct TreeNode_t *bcdb = create_user_tree_node("physical"); add_child_node(bcd, bcdb);
struct TreeNode_t *ca = create_user_tree_node("free"); add_child_node(c, ca);
struct TreeNode_t *cb = create_user_tree_node("code"); add_child_node(c, cb);
struct TreeNode_t *cc = create_user_tree_node("access"); add_child_node(c, cc);
}
void on_setup_user_tree_factory (GtkSignalListItemFactory *factory,
GObject* object, gpointer user_data){
GtkWidget* expander = gtk_expander_new (NULL);
gtk_list_item_set_child (GTK_LIST_ITEM (object), expander);
if (0) printf("[on_setup_user_tree_factory] here is an expander\n");
}
static GListModel* get_user_tree_model_child (struct TreeNode_t *parent){
GtkStringList *list = NULL;
if (parent) {
@ -154,3 +117,4 @@ GtkScrolledWindow *get_user_rules_tree ()
return scrolled_window;
}

View File

@ -27,7 +27,7 @@
#include "../include/base.h"
#include "../include/callback.h"
#include "../include/callbacks.h"
#include "../include/widgets.h"
// https://blog.gtk.org/2020/09/08/on-list-models/ < TODO
@ -156,6 +156,9 @@ GtkWidget *get_SPACE_VIEW_box(){
gtk_box_append (right_box, GTK_WIDGET (get_ZOOM_box()));
GtkBox *middle_box = GTK_BOX (gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 2));
printf("\nwidgets.get_SPACE_VIEW_box()\
TODO ui_setup_glarea (0, GTK_WIDGET (middle_box));\n\n"); // TODO
gtk_box_append (middle_box, GTK_WIDGET (get_image_ALL_SPACE()));
// ui_setup_glarea (0, GTK_WIDGET (middle_box));

View File

@ -2,25 +2,27 @@
* *
* Gem-graph client *
* *
* Widgets *
* Widgets header *
* *
* Copyright © 2021 Libre en Communs <contact@a-lec.org> *
* Copyright © 2023 Jean Sirmai <jean@a-lec.org> *
* Copyright © 2021 Libre en Communs <contact@a-lec.org> *
* Copyright © 2021 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 publishedby the Free Software Foundation, *
* either version 3 of the License, or (at your option) any later version. *
* 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. *
* 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/>. *
* 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/>. *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * */
@ -419,3 +421,36 @@ void icons_for_fun (GtkHeaderBar *header_bar) // https://iconduck.com/sets/a
gtk_header_bar_pack_end (header_bar, GTK_WIDGET (power_low));
}
void let_us_create_a_complex_useless_and_expensive_tree (struct TreeNode_t *tree_root) {
struct TreeNode_t *a = create_user_tree_node("We, the people");add_child_node(tree_root, a);
struct TreeNode_t *b = create_user_tree_node("in Order to"); add_child_node(tree_root, b);
struct TreeNode_t *c = create_user_tree_node("do establish"); add_child_node(tree_root, c);
struct TreeNode_t *aa = create_user_tree_node("aware of"); add_child_node(a, aa);
struct TreeNode_t *aaa = create_user_tree_node("our rights"); add_child_node(aa, aaa);
struct TreeNode_t *aab = create_user_tree_node("our duties"); add_child_node(aa, aab);
struct TreeNode_t *aaaa = create_user_tree_node("read"); add_child_node(aaa, aaaa);
struct TreeNode_t *aaab = create_user_tree_node("write"); add_child_node(aaa, aaab);
struct TreeNode_t *aaac = create_user_tree_node("copy"); add_child_node(aaa, aaac);
struct TreeNode_t *aaad = create_user_tree_node("edit"); add_child_node(aaa, aaad);
struct TreeNode_t *aaaba= create_user_tree_node("code"); add_child_node(aaab, aaaba);
struct TreeNode_t *aaabb= create_user_tree_node("language"); add_child_node(aaab, aaabb);
struct TreeNode_t *aaabc= create_user_tree_node("any art..."); add_child_node(aaab, aaabc);
struct TreeNode_t *aaadb= create_user_tree_node("publish"); add_child_node(aaac, aaadb);
struct TreeNode_t *aaada= create_user_tree_node("create"); add_child_node(aaad, aaada);
struct TreeNode_t *aaba = create_user_tree_node("learn"); add_child_node(aab, aaba);
struct TreeNode_t *aabb = create_user_tree_node("help"); add_child_node(aab, aabb);
struct TreeNode_t *ba = create_user_tree_node("promote"); add_child_node(b, ba);
struct TreeNode_t *bb = create_user_tree_node("individual"); add_child_node(b, bb);
struct TreeNode_t *bc = create_user_tree_node("and common"); add_child_node(b, bc);
struct TreeNode_t *bca = create_user_tree_node("education"); add_child_node(bc, bca);
struct TreeNode_t *bcb = create_user_tree_node("mutual"); add_child_node(bc, bcb);
struct TreeNode_t *bcc = create_user_tree_node("support"); add_child_node(bc, bcc);
struct TreeNode_t *bcd = create_user_tree_node("health"); add_child_node(bc, bcd);
struct TreeNode_t *bcda = create_user_tree_node("mental"); add_child_node(bcd, bcda);
struct TreeNode_t *bcdb = create_user_tree_node("physical"); add_child_node(bcd, bcdb);
struct TreeNode_t *ca = create_user_tree_node("free"); add_child_node(c, ca);
struct TreeNode_t *cb = create_user_tree_node("code"); add_child_node(c, cb);
struct TreeNode_t *cc = create_user_tree_node("access"); add_child_node(c, cc);
}