- fml_atom_strx (r->p[0], arg, 127);
- *right_val = atoi (arg);
- }
- else
- *right_val = 0;
-}
-
-static struct fml_node *fml_exec_and (Fml fml, struct fml_node *l,
- struct fml_node *r)
-{
- if (l && r)
- return r;
- else
- return NULL;
-}
-
-static struct fml_node *fml_exec_or (Fml fml, struct fml_node *l,
- struct fml_node *r)
-{
- if (l)
- return l;
- return r;
-}
-
-static struct fml_node *fml_exec_indx (Fml fml, struct fml_node *l,
- struct fml_node *r)
-{
- struct fml_node *list = l;
- int indx;
-
- if (!l || !r || !r->is_atom)
- return NULL;
- indx = fml_atom_val (r->p[0]);
- while (--indx >= 0 && list)
- list = list->p[1];
- if (!list)
- return NULL;
- if (list->is_atom)
- {
- struct fml_node *fn = fml_node_alloc (fml);
- fn->is_atom = 1;
- fn->p[0] = list->p[0];
- return fn;
- }
- else
- return list->p[0];
-}
-
-static struct fml_node *fml_exec_plus (Fml fml, struct fml_node *l,
- struct fml_node *r)
-{
- int left_val, right_val;
- char arg[20];
- struct fml_node *fn;
-
- fml_lr_values (l, &left_val, r, &right_val);
- sprintf (arg, "%d", left_val + right_val);
- fn = fml_node_alloc (fml);
- fn->is_atom = 1;
- fn->p[0] = fml_atom_alloc (fml, arg);
- return fn;
-}
-
-static struct fml_node *fml_exec_minus (Fml fml, struct fml_node *l,
- struct fml_node *r)
-{
- int left_val, right_val;
- char arg[20];
- struct fml_node *fn;
-
- fml_lr_values (l, &left_val, r, &right_val);
- sprintf (arg, "%d", left_val - right_val);
- fn = fml_node_alloc (fml);
- fn->is_atom = 1;
- fn->p[0] = fml_atom_alloc (fml, arg);
- return fn;
-}
-
-
-static struct fml_node *fml_exec_gt (Fml fml, struct fml_node *l,
- struct fml_node *r)
-{
- int left_val, right_val;
- struct fml_node *fn;
- fml_lr_values (l, &left_val, r, &right_val);
- if (left_val > right_val)
- {
- fn = fml_node_alloc (fml);
- fn->is_atom = 1;
- fn->p[0] = fml_atom_alloc (fml, "1");