summaryrefslogtreecommitdiff
path: root/Ganlib/src/cleopn.c
diff options
context:
space:
mode:
authorstainer_t <thomas.stainer@oecd-nea.org>2025-09-08 13:48:49 +0200
committerstainer_t <thomas.stainer@oecd-nea.org>2025-09-08 13:48:49 +0200
commit7dfcc480ba1e19bd3232349fc733caef94034292 (patch)
tree03ee104eb8846d5cc1a981d267687a729185d3f3 /Ganlib/src/cleopn.c
Initial commit from Polytechnique Montreal
Diffstat (limited to 'Ganlib/src/cleopn.c')
-rw-r--r--Ganlib/src/cleopn.c96
1 files changed, 96 insertions, 0 deletions
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 <stdlib.h>
+#include <string.h>
+#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");
+}