full edit function
[calc.git] / parser.c
index b3f370d0c059f6715fdf0b7141027809ec643f3e..3d8681cdf3bb7f6d8972459744b15f2b64486928 100644 (file)
--- a/parser.c
+++ b/parser.c
@@ -206,6 +206,7 @@ element_t *subparser (element_t **proot, char **pstr, func_t func, int nbops, in
 element_t *parser (char *str, char **next, int prio)
 {
     element_t *root = NULL;
+    char *string = str;
     int i;
 
     VERBOSE (DEBUG, fprintf (stdout, "Starting parsing\n"));
@@ -478,6 +479,9 @@ element_t *parser (char *str, char **next, int prio)
         *next = str;
     }
 
+    /* save string */
+    root->string = string;
+
     return root;
 }
 
@@ -872,11 +876,10 @@ void edit (int id)
     }
 
     /* set string program */
-    //rl_insert_text ((programs + n)->string);
-    VERBOSE (INFO, fprintf (stdout, "edit: %s\n", (programs + n)->string));
+    fprintf (stdout, "edit: %s\n", (programs + n)->string);
 }
 
-void save_string (int id, char *string)
+void savestring (int id, char *string)
 {
     int i, n = -1;
 
@@ -1138,7 +1141,10 @@ double evaluate_element (element_t *root, char mask)
     case While: return while_do (root->ops[0], root->ops[1]);
     case Code: return execute_code (root->ops, root->nbops);
     case Print: return print (op0);
-    case Prog: prog ((int)op0, (int)op1, root->ops[2]); break;
+    case Prog:
+        prog ((int)op0, (int)op1, root->ops[2]);
+        savestring ((int)op0, root->string);
+        break;
     case Call:
         for (i = 1, nb =0; i < root->nbops; i++) {
             if (root->ops[i]) {