Soft'N'Design Software
/
projects
/
calc.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
use tab_t for argument
[calc.git]
/
program.c
diff --git
a/program.c
b/program.c
index c966617c00562beef7d02e191d963ddcb9ff4347..18a9719d3a318be6819dd5483f5f4a5a92e4cd30 100644
(file)
--- a/
program.c
+++ b/
program.c
@@
-3,6
+3,7
@@
#include <string.h>
#include "alloc.h"
#include <string.h>
#include "alloc.h"
+#include "argument.h"
#include "debug.h"
#include "parser.h"
#include "stack.h"
#include "debug.h"
#include "parser.h"
#include "stack.h"
@@
-13,9
+14,6
@@
/* global variables */
/* global variables */
-int argument_size = 0;
-double *argument = NULL;
-
workspace_t *programs = NULL;
int nb_programs = 0;
workspace_t *programs = NULL;
int nb_programs = 0;
@@
-53,7
+51,7
@@
void prog (int id, element_t *root)
/* clean old program */
if ((programs + n)->storage) {
/* clean old program */
if ((programs + n)->storage) {
- free ((programs + n)->storage);
+ free
_tab
((programs + n)->storage);
}
if ((programs + n)->stack) {
free_tab ((programs + n)->stack);
}
if ((programs + n)->stack) {
free_tab ((programs + n)->stack);
@@
-72,26
+70,14
@@
void prog (int id, element_t *root)
(programs + n)->id = id;
(programs + n)->answer = 0;
(programs + n)->storage = NULL;
(programs + n)->id = id;
(programs + n)->answer = 0;
(programs + n)->storage = NULL;
- (programs + n)->storage_size = 0;
(programs + n)->stack = NULL;
(programs + n)->root = dupelement (root);
}
(programs + n)->stack = NULL;
(programs + n)->root = dupelement (root);
}
-double arg (int id)
-{
- double ret = 0;
- if ((id <= 0) || (id > argument_size)) {
- VERBOSE (WARNING, fprintf (stdout, "error out of bound (%d/%d)\n", id, argument_size));
- } else {
- ret = argument[id - 1];
- }
- return ret;
-}
-
double call (int id, int nbargs, element_t **args)
{
workspace_t tmp = {0};
double call (int id, int nbargs, element_t **args)
{
workspace_t tmp = {0};
- int i,
l,
n = -1;
+ int i, n = -1;
double ret = 0;
if (programs) {
double ret = 0;
if (programs) {
@@
-112,46
+98,35
@@
double call (int id, int nbargs, element_t **args)
/* store context */
tmp.answer = answer;
tmp.argument = argument;
/* store context */
tmp.answer = answer;
tmp.argument = argument;
- tmp.argument_size = argument_size;
- tmp.storage = storage;
- tmp.storage_size = storage_size;
tmp.stack = stack;
tmp.stack = stack;
+ tmp.storage = storage;
/* change context */
answer = 0;
/* change context */
answer = 0;
- storage = (programs + n)->storage;
- storage_size = (programs + n)->storage_size;
argument = NULL;
argument = NULL;
- argument_size = 0;
- stack = (programs + n)->stack;
if (nbargs > 0) {
if (nbargs > 0) {
- argument = (double *) callocordie (nbargs, sizeof (double));
- for (i = 0, l = 0; i < nbargs; l++) {
- if (args[l]) {
- argument[i++] = evaluate_element (args[l], 0);
- }
- }
- argument_size = nbargs;
+ def (nbargs, args);
}
}
+ stack = (programs + n)->stack;
+ storage = (programs + n)->storage;
/* evaluate program */
element_t *elements = dupelement ((programs + n)->root);
ret = evaluate_element (elements, 0);
delelement (elements);
/* evaluate program */
element_t *elements = dupelement ((programs + n)->root);
ret = evaluate_element (elements, 0);
delelement (elements);
+
+ /* cleaning context */
(programs + n)->answer = answer;
(programs + n)->answer = answer;
- (programs + n)->storage = storage;
- (programs + n)->storage_size = storage_size;
if (argument) {
if (argument) {
- free (argument);
+ free
_tab
(argument);
}
(programs + n)->stack = stack;
}
(programs + n)->stack = stack;
+ (programs + n)->storage = storage;
/* restore context */
answer = tmp.answer;
/* restore context */
answer = tmp.answer;
- storage = tmp.storage;
- storage_size = tmp.storage_size;
argument = tmp.argument;
argument = tmp.argument;
-
argument_size = tmp.argument_siz
e;
+
storage = tmp.storag
e;
stack = tmp.stack;
return ret;
stack = tmp.stack;
return ret;
@@
-240,7
+215,7
@@
void del (int id)
/* clean program */
if ((programs + n)->storage) {
/* clean program */
if ((programs + n)->storage) {
- free ((programs + n)->storage);
+ free
_tab
((programs + n)->storage);
}
if ((programs + n)->stack) {
free_tab ((programs + n)->stack);
}
if ((programs + n)->stack) {
free_tab ((programs + n)->stack);