From 7dfcc480ba1e19bd3232349fc733caef94034292 Mon Sep 17 00:00:00 2001 From: stainer_t Date: Mon, 8 Sep 2025 13:48:49 +0200 Subject: Initial commit from Polytechnique Montreal --- Ganlib/src/cleopn.c | 96 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 Ganlib/src/cleopn.c (limited to 'Ganlib/src/cleopn.c') diff --git a/Ganlib/src/cleopn.c b/Ganlib/src/cleopn.c new file mode 100644 index 0000000..c842a1f --- /dev/null +++ b/Ganlib/src/cleopn.c @@ -0,0 +1,96 @@ + +/*****************************************/ +/* CLE-2000 API */ +/* LIFO stack utility for CLE-2000 */ +/* AUTHOR: A. Hebert ; 27/07/10 */ +/*****************************************/ + +#include +#include +#include "cle2000.h" + +void cleopn(lifo **my_lifo) +{ + (*my_lifo) = (lifo *) malloc(sizeof(lifo)); + (*my_lifo)->nup = 0; + (*my_lifo)->root = NULL; + (*my_lifo)->node = NULL; +} +lifo_node * clepop(lifo **my_lifo) +{ + lifo_node *my_node; + if ((*my_lifo)->nup == 0) return NULL; + my_node = (*my_lifo)->node; + (*my_lifo)->node = my_node->daughter; + my_node->daughter = NULL; + (*my_lifo)->nup--; + return my_node; +} +void clepush(lifo **my_lifo, lifo_node *my_node) +{ + lifo_node *daughter_node; + if ((*my_lifo)->nup == 0) { + (*my_lifo)->root = my_node; + daughter_node = NULL; + } else { + daughter_node = (*my_lifo)->node; + } + (*my_lifo)->node = my_node; + (*my_lifo)->node->daughter = daughter_node; + (*my_lifo)->nup++; +} +int_32 clecls(lifo **my_lifo) +{ + if ((*my_lifo)->nup != 0) return -1; + free(*my_lifo); + (*my_lifo) = NULL; + return 0; +} +lifo_node * clenode(lifo **my_lifo, const char *name) +{ + lifo_node *my_node; + my_node = (*my_lifo)->node; + if (my_node == NULL) return NULL; + while (my_node->daughter != NULL) { + if (strcmp(my_node->name, name) == 0) return my_node; + my_node = my_node->daughter; + } + if (strcmp(my_node->name, name) == 0) return my_node; + return NULL; +} +lifo_node * clepos(lifo **my_lifo, int_32 ipos) +{ + lifo_node *my_node; + int_32 iloop; + if ((ipos > (*my_lifo)->nup - 1) || (ipos < 0)) return NULL; + my_node = (*my_lifo)->node; + for (iloop = 0; iloop < (*my_lifo)->nup - ipos - 1; ++iloop) { + my_node = my_node->daughter; + } + return my_node; +} +void clelib(lifo **my_lifo) +{ + lifo_node *my_node; + int_32 iloop; + printf("\n lifo content:\n node type name........ access OSname/value\n"); + for (iloop = 0; iloop < (*my_lifo)->nup; ++iloop) { + my_node = clepos(my_lifo, iloop); + if (abs((int)my_node->type) < 10) { + printf(" %4d (%4d) %12s (%2d) %s\n", (int)iloop, (int)my_node->type, my_node->name, (int)my_node->access, my_node->OSname); + } else if ((int)my_node->type == 11) { + printf(" %4d (%4d) %12s val = %d\n", (int)iloop, (int)my_node->type, my_node->name, my_node->value.ival); + } else if ((int)my_node->type == 12) { + printf(" %4d (%4d) %12s val = %e\n", (int)iloop, (int)my_node->type, my_node->name, my_node->value.fval); + } else if ((int)my_node->type == 13) { + printf(" %4d (%4d) %12s val = '%s'\n", (int)iloop, (int)my_node->type, my_node->name, my_node->value.hval); + } else if ((int)my_node->type == 14) { + printf(" %4d (%4d) %12s val = %e\n", (int)iloop, (int)my_node->type, my_node->name, my_node->value.dval); + } else if ((int)my_node->type == 15) { + printf(" %4d (%4d) %12s val = %d\n", (int)iloop, (int)my_node->type, my_node->name, my_node->value.ival); + } else { + printf(" %4d (%4d) %12s\n", (int)iloop, (int)my_node->type, my_node->name); + } + } + printf("\n access= 0:creation mode / 1:modification mode / 2:read-only mode\n\n"); +} -- cgit v1.2.3