X-Git-Url: https://secure.softndesign.org/git/?a=blobdiff_plain;f=program.c;h=b93a90cb299538f1dc0b79b0ae2223baba7c6021;hb=b6311fa2c6d14d644f8289cb96b5aee862956b61;hp=7db9d40291b3433a503b32f07c0b605f2ff7497e;hpb=89a2c19deeb8b45dc8c655e59bc58f7a606ecd2c;p=calc.git diff --git a/program.c b/program.c index 7db9d40..b93a90c 100644 --- a/program.c +++ b/program.c @@ -73,8 +73,11 @@ void prog (int id, element_t *root) double call (int id, int nbargs, element_t **args) { + int i; double ret = 0; + VERBOSE (DEBUG, fprintf (stdout, "new call (%d)\n", id)); + /* look for program */ int n = lookfor_program (id); if (n == -1) { @@ -82,15 +85,30 @@ double call (int id, int nbargs, element_t **args) return 0; } - /* set arguments */ - tab_t *old_argument = copy_tab (argument); + /* display debug information */ + VERBOSE (DEBUG, fprintf (stdout, "nbargs: %d\n", nbargs)); + for (i = 0; i < nbargs; i++) { + VERBOSE (DEBUG, fprintf (stdout, "argument %d\n", i + 1); print_element (args[i], 0)); + } + VERBOSE (DEBUG, fprintf (stdout, "program\n"); print_element (programs[n]->root, 0)); /* backup context */ workspace_t *tmp = backup_ws (alloc_ws ()); restore_ws (programs[n]); /* set arguments */ - argument = def (nbargs, args); + VERBOSE (DEBUG, fprintf (stdout, "argument before evaluation (%d)\n", size_tab (argument))); + for (i = 0; i < size_tab (argument); i++) { + VERBOSE (DEBUG, fprintf (stdout, "arg %d value: %g\n", i + 1, get_tab (argument, i + 1))); + } + VERBOSE (DEBUG, fprintf (stdout, "evaluate %d args\n", nbargs)); + tab_t *new_argument = def (nbargs, args); + tab_t *old_argument = argument; + argument = new_argument; + VERBOSE (DEBUG, fprintf (stdout, "argument after evaluation (%d)\n", size_tab (argument))); + for (i = 0; i < size_tab (argument); i++) { + VERBOSE (DEBUG, fprintf (stdout, "arg %d value: %g\n", i + 1, get_tab (argument, i + 1))); + } /* evaluate program */ answer = 0; @@ -114,15 +132,16 @@ double call (int id, int nbargs, element_t **args) void list () { int i; - fprintf (stdout, "programs:"); + printf ("programs:"); for (i = 0; i < nb_programs; i++) { - fprintf (stdout, " %d", programs[i]->id); + printf (" %d", programs[i]->id); } - fprintf (stdout, "\n"); + printf ("\n"); } void edit (int id) { + extern char *edit_line; int n = lookfor_program (id); if (n == -1) { VERBOSE (WARNING, fprintf (stdout, "error unknown program (%d)\n", id)); @@ -130,7 +149,11 @@ void edit (int id) } /* set string program */ - fprintf (stdout, "edit: %s\n", programs[n]->string); + if (edit_line) { + free (edit_line); + } + edit_line = strdup (programs[n]->string); + //printf ("edit: %s\n", programs[n]->string); } void savestring (int id, char *string)