full edit function
authorLaurent Mazet <mazet@softndesign.org>
Tue, 31 Jan 2023 22:03:49 +0000 (23:03 +0100)
committerLaurent Mazet <mazet@softndesign.org>
Tue, 31 Jan 2023 22:03:49 +0000 (23:03 +0100)
calc.c
parser.c
parser.h

diff --git a/calc.c b/calc.c
index 042bda76fa8c65c04f8d6b8ab889194357a3714f..d5b02468f9dd2b66bc6f9ca906094d22e0d5841d 100644 (file)
--- a/calc.c
+++ b/calc.c
@@ -224,9 +224,6 @@ int main (int argc, char *argv[])
                 if (!element->hidden) {
                     print (answer);
                 }
-                if (element->func == Prog) {
-                    save_string (element->ops[0]->value, line[i]);
-                }
                 delelement (element);
                 ret = 0;
             }
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]) {
index 9fbde3a13c32d34f15105d85b77c59d1f4cf416d..0b9233fa406a25834e6cb93c8acea5cc505f7272 100644 (file)
--- a/parser.h
+++ b/parser.h
@@ -43,6 +43,7 @@ typedef struct _element_t {
     double value;
     int prio;
     int hidden;
+    char *string;
 } element_t;
 
 #define ERROR_OP ((element_t *)(-1))
@@ -68,8 +69,6 @@ void print_element (element_t *root, int level);
 
 double evaluate_element (element_t *root, char mask);
 
-void save_string (int id, char *string);
-
 /* completion functions */
 
 char **generate_completion_list ();